2017-07-19 4 views
1

J'ai besoin d'aide dans ce problème Turbo Pascal:travail à domicile Turbo-pascals

Deux entiers sont dits frères si chaque chiffre de N1 apparaît au moins une fois N2 et vice versa. Exemples: si N1 = 1164 et N2 = 614 le programme affichera N1 et N2 sont frères, si N1 = 504 et N2 = 455 le programme affichera N1 et N2 ne sont pas frères

Ma question est: Comment vérifier si les 2 entiers sont frères ou pas? Ceci est mon travail:

function brother(n1, n2: integer): boolean; 
var 
    test: boolean; 
    ch1, ch2: string; 

begin 
    chr(n1, ch1); 
    chr(n2, ch2); 
    i := 0; 
    repeat 
    j := 0; 
    i := i + 1; 
    test := false; 
    repeat 
     j := j + 1; 
     if ch1[i] = ch2[j] then 
     test := true; 
    until (test = true) or (j = length(ch2)); 
    until (test = false) or (i = length(ch1)); 
    brother := test; 
end; 

quand je lance cela, il imprime toujours (« entiers sont frères »), même quand je mets 504 et 455, je veux savoir où l'erreur est.

+0

Voici un peu de pseudo code pour vous! ... Je pense qu'une partie de votre problème provient de votre fonction étant un peu confus ... essayez ceci: faites une boucle (boucle à travers chaque caractère de str1) qui utilise une fonction lui-même est passé un char à la fois (1 char à la fois de str1), et voit si le char existe dans une chaîne donnée (str2), incrémente un compteur 'oui' ou si c'est un 'non' à tout moment puis arrête tous les tests. Une fois que vous avez atteint la fin de la chaîne donnée (str2) et avez un nombre de yes = la longueur de la chaîne donnée = string est brother. –

+0

Votre code semble erroné. 'chr' est une pseudo-fonction qui convertit un' integer' en un seul 'char'. Je suppose que dans votre code réel, vous avez quelque chose comme 'str (n1, ch1);'. Vous aviez aussi '(n1, n2: entiers)' comme votre liste de paramètres (j'ai corrigé cela), et ce n'est pas du code compilable non plus. –

Répondre

0

Essayez quelque chose comme ceci:

function contains(s: string; ch: char): boolean; 
var 
    i: integer; 
begin 
    contains := false; 
    for i := 1 to length(s) do 
    if s[i] = ch then 
     contains := true; 
end; 

function brother(n1, n2: integer): boolean; 
var 
    test: boolean; 
    ch1, ch2: string; 
    i: integer; 
begin 
    str(n1, ch1); 
    str(n2, ch2); 
    test := true; { assume "brotherhood" } 

    for i := 1 to length(ch1) do 
    if not contains(ch2, ch1[i]) then 
     test := false; { obviously no brothers after all } 

    { must test both ways, so (n1=455, n2=504) fails too } 
    for i := 1 to length(ch2) do 
    if not contains(ch1, ch2[i]) then 
     test := false; 

    brother := test; 
end; 

Au lieu de for, vous pouvez utiliser repeat until aussi.

+0

cela fonctionne, également avec __repeat__ –

-1

Vous avez besoin de la variante else/if de Pascal et là vous devez vérifier son égalité.

+1

Je connais assez bien Pascal, mais je n'ai aucune idée de comment c'est une réponse. Vérifiez quelle égalité? Celui-là pourrait devoir utiliser si ou est un donné. –