Описать процедуру ironia_sudby(S), которая печатает фамилии двух (любых) жителей из списка S, живущих в разных городах по одинаковому адресу — Pascal(Паскаль)

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.

Leave a Comment

77 − = 67