program laba4_5;
uses crt;
type adress_type=record
gorod,ylica : string;
dom,korp,kvar : integer;
end;
massiv_adres=array [1..1000] of ^adress_type;
massiv_adres_din=^massiv_adres;
var massiv : massiv_adres_din;
n,m : integer;
procedure zapolnenie(var adress : adress_type; n : integer);
begin
with adress do
begin
write('Введите название города, адреса №',n,' :');
readln(gorod);
write('Введите название улицы, адреса №',n,' :');
readln(ylica);
write('Введите номер дома, адреса №',n,' :');
readln(dom);
while dom<=0 do
begin
textcolor(5);
writeln('ОШИБКА : Номер дома должен быть положительным!');
textcolor(15);
write('Повторите ввод : ');
readln(dom);
end;
write('Введите номер корпуса, адреса №',n,' :');
readln(korp);
while korp<=0 do
begin
textcolor(5);
writeln('ОШИБКА : Номер корпуса должен быть положительным!');
textcolor(15);
write('Повторите ввод : ');
readln(korp);
end;
write('Введите номер квартиры, адреса №',n,' :');
readln(kvar);
while kvar<=0 do
begin
textcolor(5);
writeln('ОШИБКА : Номер квартиры должен быть положительным!');
textcolor(15);
write('Повторите ввод : ');
readln(kvar);
end;
end;
end;
procedure input(var massiv : massiv_adres_din; var n,m : integer);
var i,j : integer;
begin
clrscr;
write('Введите количество элементов массива N(1<=N<=1000) : ');
readln(i);
while (i<1) or (i>1000) do
begin
textcolor(5);
writeln('ОШИБКА : Введено неверное количество элементов массива!');
textcolor(15);
write('Повторите ввод (1<=N<=1000) : ');
readln(i);
clrscr;
end;
clrscr;
for j:=1 to i do
zapolnenie(massiv^[j]^,j);
write('Введите номер N первого из изменяемых адресов : ');
readln(n);
while (n<=0) or (n>i) do
begin
textcolor(5);
writeln('ОШИБКА : Номер должен быть больше 0 и меньше ',i,' !');
textcolor(15);
write('Повторите ввод : ');
readln(n);
end;
write('Введите номер M второго из изменяемых адресов : ');
readln(m);
while (m<=0) or (m>i) do
begin
textcolor(5);
writeln('ОШИБКА : Номер должен быть больше 0 и меньше ',i,' !');
textcolor(15);
write('Повторите ввод : ');
readln(m);
end;
end;
procedure zamena(var adress1,adress2 : adress_type);
var buf : integer;
begin
buf:=adress1.dom;
adress1.dom:=adress2.kvar;
adress2.kvar:=buf;
end;
procedure output(massiv : massiv_adres_din; n,m : integer);
begin
clrscr;
zamena(massiv^[n]^,massiv^[m]^);
with massiv^[n]^ do
begin
writeln('Первый измененный адресс :');
writeln('Город ',gorod,' улица ',ylica,' дом ',dom,' корпус ',korp,' квартира ',kvar);
end;
with massiv^[m]^ do
begin
writeln('Второй измененный адресс :');
writeln('Город ',gorod,' улица ',ylica,' дом ',dom,' корпус ',korp,' квартира ',kvar);
end;
readkey;
end;
begin
new(massiv);
input(massiv,n,m);
output(massiv,n,m);
dispose(massiv);
end.