program spisok; uses crt; type sp=^adres; adres=record street:string; dom,kv,zilci:integer; link:sp; end; sp1=^adres1; adres1=record street:string; dom,kv,zilci:integer; link:sp1; end; var begp,endp,pp:sp; begp1,endp1:sp1; i,j:integer; nm:byte; v:boolean; Procedure vvod(var begp,endp:sp); var pp:sp; begin Writeln('vvedite kolichestvo zap'); readln(nm); for i:=1 to nm do begin new(pp); write('street '); readln(pp^.street); write('# doma '); readln(pp^.dom); write('# kvartiri '); readln(pp^.kv); write('kol-vo zilcov '); readln(pp^.zilci); pp^.link:=nil; if begp=nil then begp:=pp else endp^.link:=pp; endp:=pp; end; end; procedure vivod(begp,endp:sp); var pp:sp; begin clrscr; write('--------------------------------------------------'); writeln; write('| street | #doma | #kv | kol-vo zilcov |'); for i:=1 to nm do pp:=begp; while pp<>nil do begin writeln; write(pp^.street:12,' '); write(pp^.dom:6, ' ' ,pp^.kv:9, ' ', pp^.zilci:8, ' '); writeln; pp:=pp^.link; end; write('---------------------------------------------------'); writeln; end; procedure poisk(var begp1,endp1:sp1;begp,endp:sp); var pp:sp; pp1:sp1; begin writeln('Vvedite street, dom, kv cheres enter'); begin readln(pp1^.street); readln(pp1^.dom); readln(pp1^.kv); pp:=begp; while pp<>nil do begin if ((pp1^.street=pp^.street) and (pp1^.dom=pp^.dom)) and (pp1^.kv=pp^.kv) then begin write('Kol-vo zilcov: '); write(pp^.zilci); writeln; v:=true; end; if v=false then writeln('takogo adresa ne naideno'); pp:=pp^.link; end; end; end; function insert_sort(p1:sp):sp; function insert(pp:sp;p1:sp):sp; begin pp^.link:=Nil; if p1=nil then insert:=pp else if ((pp^.street<p1^.street) and (pp^.dom<p1^.dom)) and ((pp^.kv<p1^.kv)and(pp^.zilci<p1^.zilci)) then begin pp^.link:=p1; insert:=pp; end else begin p1^.link:=insert(pp,p1^.link); insert:=p1; end; end; begin if p1=nil then insert_sort:=nil else insert_sort:=insert(p1,insert_sort(p1^.link)); end; procedure vivodsort(begp:sp); var pp:sp; begin write('--------------------------------------------------'); writeln; write('| street | #doma | #kv | kol-vo zilcov |'); for i:=1 to nm do pp:=begp; while pp<>nil do begin writeln; write(pp^.street:12,' '); write(pp^.dom:6, ' ' ,pp^.kv:9, ' ', pp^.zilci:8, ' '); writeln; pp:=pp^.link; end; write('---------------------------------------------------'); writeln; end; Procedure novmas(var begp,endp:sp); var x:string; pp:sp; begin for i:=1 to nm do x:=begp^.street; pp:=begp; begp:=pp^.link; dispose(pp); end; Procedure novmasa(begp,endp:sp); var pp:sp; begin write('-------------------------------------'); writeln; write('| #doma | #kv | kol-vo zilcov |'); pp:=begp; while pp<>nil do begin writeln; write(pp^.dom:6, ' ' ,pp^.kv:8, ' ',pp^.zilci:8, ' '); writeln; pp:=pp^.link; end; write('-------------------------------------'); writeln; readln; end; begin clrscr; begp:=nil; endp:=nil; vvod(begp,endp); vivod(begp,endp); poisk(begp1,endp1,begp,endp); writeln('ots spisok'); begp:=insert_sort(begp); vivodsort(begp); novmas(begp,endp); novmasa(begp,endp); readln; end.