uses crt;
type
stroka=packed array [1..20] of char;
citizen=record
familia, gorod:stroka;
adres:record
street:stroka;
dom, kv: 1..999
end
end;
spisok=array [1..15] of citizen;
procedure Pack(var n:byte;var fm:stroka);{создание массива символов}
var i:byte;
begin
write('Количество символов : ');
readln(n);
for i:=1 to n do
read(fm[i]);
readln;
end;
procedure ironia_sudby(sp:spisok;n:byte);{процедура по условию}
var i,j,k:byte;
begin
k:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
{если города разные, а адрес одинаковый}
if ((sp[i].gorod)<>(sp[j].gorod))and(sp[i].adres.street=sp[j].adres.street)
and(sp[i].adres.dom=sp[j].adres.dom)and(sp[i].adres.kv=sp[j].adres.kv) then
begin
k:=1;
with sp[i] do{оператор with позволяет не писать многократно имя записи, типа sp[j].gorod}
writeln(familia,' ',gorod,' ',adres.street,' ',adres.dom,' ',adres.kv);
with sp[j] do
writeln(familia,' ',gorod,' ',adres.street,' ',adres.dom,' ',adres.kv);
exit;
end;
if k=0 then writeln('Совпадений нет!');
end;
var fcitizen:file of citizen;
i,n,d:byte;
gr:spisok;{массив записей}
begin
clrscr;
assign(fcitizen,'fm.dat');
rewrite(fcitizen);
write('количество записей в списке n= ');
readln(n);
for i:=1 to n do
with gr[i] do
begin
write('фамилия и о: ');Pack(d,gr[i].familia);{создаем фамилию}
write('город: ');Pack(d,gorod);
write('улица: ');Pack(d,adres.street);
write('дом: ');readln(adres.dom);
write('квартира: ');readln(adres.kv);
write(fcitizen,gr[i]);{заносим запись в файл}
end;
clrscr;{очищаем экран}
writeln('Содержание списка:');
reset(fcitizen);
i:=0;
while not eof(fcitizen) do
begin
i:=i+1;
read(fcitizen,gr[i]);{читаем записи в массив, как бы нет его пока}
with gr[i] do
writeln(familia,' ',gorod,' ',adres.street,' ',adres.dom,' ',adres.kv)
end;
close(fcitizen);
writeln('Живут в разных городах по одному адресу:');
ironia_sudby(gr,n);{вызываем нашу процедуру}
readln
end.