I need some help in this Turbo Pascal problem:
Two integers are said to be brothers if each digit of N1 appears at least once in N2 and vice versa. Examples: if N1 = 1164 and N2 = 614 the program will display N1 and N2 are brothers, if N1 = 504 and N2 = 455 the program will display N1 and N2 are not brothers
My question is: How to check whether the 2 integers are brothers or not? This is my work:
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;
when I run this, it always print ("integers are brothers") even when I put 504 and 455, I want to know where the mistake is.
Try something like this instead:
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;
Instead of for
, you can use repeat until
too.