@Ecl1pse544

Здравствуйте, можете помочь доработать код на Pascal?

Ошибка при выполнении процедуры: Ссылка на объект не указывает на экземпляр объекта.

procedure vstavka(var list: ukaz;n:integer;fioo,godd,poll,sost,det,okll:string);
var p: ukaz; i:integer;
fiooo,goddd,polll,sostt,dett,oklll:string;
begin
temp:=left;
list:=temp;
p:=list;
n:=0;
i:=1;
if (temp<>nil) and (temp^.next<>nil) then
begin

Writeln('Введите элементы которые нужно вставить');
writeln('Введите ФИО студента');
readln(fioo);
writeln('Введите год рождения студента');
readln(godd);
writeln('Введите пол студента');
readln(poll);
writeln('Введите cемейное состояние студента');
readln(sost);
writeln('Введите кол-во детей студента');
readln(det);
writeln('Введите оклад студента');
readln(okll);
p^.inf.fio:=fioo;
p^.inf.god:=godd;
p^.inf.pol:=poll;
p^.inf.semsost:=sost;
p^.inf.koldet:=det;
p^.inf.okl:=okll;
temp := list;
list := nil;
while temp<>nil do
begin
n:=n+1;
writeln(i,')',temp^.inf.fio,' | ',temp^.inf.god,' | ',temp^.inf.pol,' | ',temp^.inf.semsost,' | ',temp^.inf.koldet,' | ',temp^.inf.okl);
if i=2 then
begin
temp^.inf := p^.inf;
p^.next := temp^.next;
temp:= p^.next;
end;
list^.next:=temp^.next;
list^.inf := temp^.inf;
temp:=temp^.next;
i:=i+1;
end;
end;
list := temp;
end;


Вот программа полностью
Program Spisok;
type
zap=record
fio:string[15];
god:string[15];
pol:string[15];

semsost:string[15];
koldet:string[15];
okl:string[15];
end;
ukaz=^element;
element=record
inf:zap;
next:ukaz;
end;

var newE,left,right,temp,p,list:ukaz;
z:zap;
fioo,godd,poll,sost,det,okll:string;
number,n:integer;


procedure org;
begin
writeln('Выполняется процедура организации очереди');
writeln('Для выхода из процедуры введите символ: *');
writeln('Введите ФИО студента');
readln(z.fio);
writeln('Введите год рождения студента');
readln(z.god);
writeln('Введите пол студента');
readln(z.pol);
writeln('Введите cемейное состояние студента');
readln(z.semsost);
writeln('Введите кол-во детей студента');
readln(z.koldet);
writeln('Введите оклад студента');
readln(z.okl);
if z.fio='*' then exit;
new(newE);
newE^.inf.fio:=z.fio;
newE^.inf.god:=z.god;
newE^.inf.pol:=z.pol;
newE^.inf.semsost:=z.semsost;
newE^.inf.koldet:=z.koldet;
newE^.inf.okl:=z.okl;
newE^.next:=nil;
left:=newE;
right:=newE;
while true do
begin
writeln('Введите ФИО студента');
readln(z.fio);
writeln('Введите год рождения студента');
readln(z.god);
writeln('Введите пол студента');
readln(z.pol);
writeln('Введите cемейное состояние студента');
readln(z.semsost);
writeln('Введите кол-во детей студента');
readln(z.koldet);
writeln('Введите оклад студента');
readln(z.okl);
if z.fio='*' then exit;
new(newE);
newE^.inf.fio:=z.fio;
newE^.inf.god:=z.god;
newE^.inf.pol:=z.pol;
newE^.inf.semsost:=z.semsost;
newE^.inf.koldet:=z.koldet;
newE^.inf.okl:=z.okl;
newE^.next:=left;
left:=newE;
end;
end;


procedure dob;
begin
writeln('Введите ФИО студента');
readln(z.fio);
writeln('Введите год рождения студента');
readln(z.god);
writeln('Введите пол студента');
readln(z.pol);
writeln('Введите cемейное состояние студента');
readln(z.semsost);
writeln('Введите кол-во детей студента');
readln(z.koldet);
writeln('Введите оклад студента');
readln(z.okl);
if z.fio='*' then exit;
new(newE);
newE^.inf.fio:=z.fio;
newE^.inf.god:=z.god;
newE^.inf.pol:=z.pol;
newE^.inf.semsost:=z.semsost;
newE^.inf.koldet:=z.koldet;
newE^.inf.okl:=z.okl;
newE^.next:=nil;
right:=newE;
end;


procedure udal;
begin
writeln('Исключение главного элемента очереди');
writeln('Нажмите клавишу Enter');
readln;
temp:=left^.next;
dispose(left);
left:=temp;
end;


procedure prosmotr(n:integer;fioo,godd,poll,sost,det,okll:string);
var i:integer;
begin
writeln('Очередь содержит следующие элементы');
temp:=left;
n:=0;
i:=1;
while temp<>nil do
begin
n:=n+1;
writeln(i,')',temp^.inf.fio,' ',temp^.inf.god,' ',temp^.inf.pol,' ',temp^.inf.semsost,' ',temp^.inf.koldet,' ',temp^.inf.okl);
fioo:=temp^.inf.fio;
godd:=temp^.inf.god;
poll:=temp^.inf.pol;
sost:=temp^.inf.semsost;
det:=temp^.inf.koldet;
okll:=temp^.inf.okl;
temp:=temp^.next;
i:=i+1;
end;
writeln('Нажмите кнопку Enter');
readln;
end;


procedure vstavka(var list: ukaz;n:integer;fioo,godd,poll,sost,det,okll:string);
var p: ukaz; i:integer;
fiooo,goddd,polll,sostt,dett,oklll:string;
begin
temp:=left;
list:=temp;
p:=list;
n:=0;
i:=1;
if (temp<>nil) and (temp^.next<>nil) then
begin

Writeln('Введите элементы которые нужно вставить');
writeln('Введите ФИО студента');
readln(fioo);
writeln('Введите год рождения студента');
readln(godd);
writeln('Введите пол студента');
readln(poll);
writeln('Введите cемейное состояние студента');
readln(sost);
writeln('Введите кол-во детей студента');
readln(det);
writeln('Введите оклад студента');
readln(okll);
p^.inf.fio:=fioo;
p^.inf.god:=godd;
p^.inf.pol:=poll;

p^.inf.semsost:=sost;
p^.inf.koldet:=det;
p^.inf.okl:=okll;
temp := list;
list := nil;
while temp<>nil do
begin
n:=n+1;
writeln(i,')',temp^.inf.fio,' | ',temp^.inf.god,' | ',temp^.inf.pol,' | ',temp^.inf.semsost,' | ',temp^.inf.koldet,' | ',temp^.inf.okl);
if i=2 then
begin
temp^.inf := p^.inf;
p^.next := temp^.next;
temp:= p^.next;
end;
list^.next:=temp^.next;
list^.inf := temp^.inf;
temp:=temp^.next;
i:=i+1;
end;
end;
list := temp;
end;
{--------------------------------------------------------------------}
begin
while true do
begin
writeln('1-Организация очереди');
writeln('2-Добавление элемента в очередь');
writeln('3-Удаление элемента из очереди');
writeln('4-Просмотр очереди');
writeln('5-Вставить элемент в начало списка ');
writeln('6-Выход');
writeln('------------------');
writeln('Введите номер пункта меню');
readln(number);
case number of
1: org;
2: dob;
3: udal;
4: prosmotr(n,fioo,godd,poll,sost,det,okll);
5: vstavka(list,n,fioo,godd,poll,sost,det,okll);
6: exit;
end;
end;
end.
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
В какой момент у тебя ошибка? Может пояснишь? Что ты делаешь, прежде чем она возникнет?
И код нужно заключать в тег CODE.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы