Если q=p, то оба указателя ссылаются на одно и то же место в памяти, т.е. значения p^ и q^ всегда будут одинаковы. После p^=5 оба указателя будут ссылаться на 5. q^:=p^+1 приведет к тому, что cсылка будет на 6, поэтому в первом if условие ложно и выполняется ветка else и оба указателя будут ссылаться на 10. Во втором if условие истинно, поэтому выполняется ветка then. В ней присваивание p:=q ничего не меняет, поскольку оба указателя и так уже указывают на одно и то же место в памяти. А после q^:=20 в это место будет записана константа 20, поэтому при выводе p^ мы получаем значение 20. ответ: 20
Type tFIO=record fam,im,otch:string end; var f:tFIO; s:string; g:Text; i,n:integer; begin Assign(g,'IOF.txt'); Rewrite(g); Write('Количество сотрудников: '); Readln(n); for i:=1 to n do begin With f do begin { сформировать запись типа f } Writeln('*** Сотрудник № ',i,' ***'); Writeln('Фамилия: '); Readln(s); fam:=s; Writeln('Имя: '); Readln(s); im:=s; Writeln('Отчество: '); Readln(s); otch:=s; { занести данные в файл } Writeln(g,im,' ',otch,' ',fam) end end; Close(g) end.
После p^=5 оба указателя будут ссылаться на 5.
q^:=p^+1 приведет к тому, что cсылка будет на 6, поэтому в первом if условие ложно и выполняется ветка else и оба указателя будут ссылаться на 10.
Во втором if условие истинно, поэтому выполняется ветка then. В ней присваивание p:=q ничего не меняет, поскольку оба указателя и так уже указывают на одно и то же место в памяти. А после q^:=20 в это место будет записана константа 20, поэтому при выводе p^ мы получаем значение 20.
ответ: 20
tFIO=record
fam,im,otch:string
end;
var
f:tFIO;
s:string;
g:Text;
i,n:integer;
begin
Assign(g,'IOF.txt'); Rewrite(g);
Write('Количество сотрудников: '); Readln(n);
for i:=1 to n do
begin
With f do
begin
{ сформировать запись типа f }
Writeln('*** Сотрудник № ',i,' ***');
Writeln('Фамилия: '); Readln(s); fam:=s;
Writeln('Имя: '); Readln(s); im:=s;
Writeln('Отчество: '); Readln(s); otch:=s;
{ занести данные в файл }
Writeln(g,im,' ',otch,' ',fam)
end
end;
Close(g)
end.