Другие языки программирования и технологии

Pascal. Почему выдает ошибку? Помогите отладить

program spisok; uses crt; type uk = ^zapis; zapis = record gr: string[10]; next: uk; end; var beg: uk; menu: byte; temp: string[10]; procedure init; begin beg := nil; end; procedure add(var beg: uk); var p, p1: uk; begin if beg = nil then begin writeln('vvedite v pust'); readln(temp); new(beg); beg^.gr := temp; beg^.next := nil; end else begin writeln('vvedite v pol'); readln(temp); new(p); if temp < beg^.gr then begin p^.gr := temp; p^.next := beg; beg^.next := nil; beg := p; end; end else begin writeln('vvedite v ser'); readln(temp); new(p1); p := beg; while (p <> nil) and (p^.next^.gr < temp) do begin p := p^.next; p1^.inf := temp; p1^.next := p^.next; p^.next := p1; end; end; end; procedure print; var p: uk; begin if beg = nil then writeln('Список пуст') else begin p := beg; write('Список групп: '); while p <> nil do begin write('- ', p^.gr, ' -'); p := p^.next; end; end; end; begin init; repeat clrscr; writeln('Введите 1 для добавления группы'); writeln('Введите 2 для просмотра списка групп'); writeln('Введите 4 для выхода'); readln(menu); case menu of 1: add(beg); 2: print; end; readkey; until menu = 4; end. Думаю суть программы обьяснять не надо, всё и так понятно. Выдает ошибку что не хватает точки с запятой перед else... но перед else её и быть не может, в чем проблема въехать не могу... Жду ответов.
Alexander Windermut
Alexander Windermut
360
program spisok;

uses
crt;

type
uk = ^zapis;
zapis = record
gr: string[10];
next: uk;
end;

var
beg: uk;
menu: byte;
temp: string[10];

procedure init;
begin
beg := nil;
end;

procedure add(var beg: uk);
var
p, p1: uk;
begin
if beg = nil then
begin
writeln('vvedite v pust');
readln(temp);
new(beg);
beg^.gr := temp;
beg^.next := nil;
end
else
begin
writeln('vvedite v pol');
readln(temp);
new(p);
if temp < beg^.gr then
begin
p^.gr := temp;
p^.next := beg;
beg^.next := nil;
beg := p;
end

else
begin
writeln('vvedite v ser');
readln(temp);
new(p1);
p := beg;
while (p <> nil) and (p^.next^.gr < temp) do
begin
p := p^.next;
p1^.inf := temp;
p1^.next := p^.next;
p^.next := p1;
end;
end;

end;

procedure print;
var
p: uk;
begin
if beg = nil then writeln('Список пуст') else begin
p := beg;
write('Список групп: ');
while p <> nil do
begin
write('- ', p^.gr, ' -');
p := p^.next;
end;
end;
end;

begin
init;
repeat
clrscr;
writeln('Введите 1 для добавления группы');
writeln('Введите 2 для просмотра списка групп');
writeln('Введите 4 для выхода');
readln(menu);
case menu of
1: add(beg);
2: print;
end;
readkey;
until menu = 4;
end.

вот так, (у тебя else не относился к if, сейчас относится ко второму if) теперь у тебя inf не описан в p1^.inf := temp; и еще куча ошибок) )
жаль форматирование текста пропадает. форматировать постфактум не занятие не очень =\
Курманбек Токтоев
Курманбек Токтоев
4 241
Лучший ответ
Alexander Windermut Спасибо, не хватало в вашем коде 1 энда :) и то место в процедурке добавления, которое должно добавлять по идее элемент между другими элементами, не рабочий совершенно. Но зато теперь ясно в чем была проблема, был бы признателен, если вы доработаете немного код :)
Курманбек Токтоев Нет уж, трудитесь сами =)
поставь точку с запятой где просит компилятор и отпишись о результатах
Jurij Elenskiy
Jurij Elenskiy
1 720
Alexander Windermut в том то и дело, что он просит прям перед else, а если принебречь тем, что перед else она не ставится и поставить , то компиллятор выдает ошибку типа "ожидался оператор" и так далее до бесконечности..
то же самое было, пересмотрел заного все
Alexander Windermut В смысле?