Короче нужно написать программу которая будет печатать фамилии двух людей из списка,живущих в разных городах по одинаковому адресу. Не могу её осилить,помогите плиз.Вот на что меня хватило:
Код
program lr52; type jitel=record city:string[25]; street:string[25]; dom:integer; kvartira:integer; familia:string[25]; end; var spisok:array[1..25] of jitel; i,n:integer;
procedure IRONIA_SUDBY(var s:jitel); var i,j,k:integer; b:boolean; begin for i:=1 to 15 do for j:=i+1 to 15 do begin if (s[i].dom=s[j].dom)and(s[i].kvartira=s[j].kvartira) then begin b:=true; for k:=1 to 20 do if s[i].street[k]<>s[j].street[k] then b:=false; if not b then continue; for k:=1 to 20 do if s[i].city[k]<>s[j].city[k] then b:=false; if b then continue; for k:=1 to 20 do write(s[i].familia[k]); write(' '); for k:=1 to 20 do write(s[j].familia[k]); writeln; exit; end; end; end;
begin write('write dannie'); readln(n); for i:=1 to n do begin writeln('write'); with spisok[i] do begin writeln('Familia');readln(familia); writeln('Kvartira');readln(kvartira); writeln('Dom');readln(dom); writeln('Ylica');readln(street); writeln('Gorod');readln(city); end;
IRONIA_SUDBY(s); end;
Автор: volvo 18.05.2007 0:25
Зачем же так сложно? Тебе надо найти ВСЕ совпадения? Тогда так:
procedure IRONIA_SUDBY; var i,j,k:integer; b:boolean; begin for i:=1 to n - 1 do for j:=i+1 to n do begin if (spisok[i].dom=spisok[j].dom) and (spisok[i].kvartira=spisok[j].kvartira) and (spisok[i].street = spisok[j].street) and (spisok[i].city <> spisok[j].city) then writeln(spisok[i].familia, ' из ', spisok[i].city, ' и ', spisok[j].familia, ' из ', spisok[j].city, ' живут по адресу: ул. ', spisok[i].street, ', ', spisok[i].dom, ' / ', spisok[i].kvartira); end; end;
{ вызывать так: } ... IRONIA_SUDBY; ...
Добавлено через 1 мин. Если достаточно только одной пары - после печати выйди из процедуры через Exit...