Хрестос воскрес народ, с пасхой!!!
Кому не трудно покапайтесь в моем коде!!!
Выкидывает ошибку когда добавляю 3- ий раз подтермин, да и кроме того есть несколько ошибок еще!!! Найдите ошибку, если не трудно!!! Я пока както со списками не совсем дружу, рассчитываю на вашу помощь!!!
Код:
program Spiski;
{$APPTYPE CONSOLE}
uses
SysUtils;
TYPE
LIST_PTR = ^LIST;
LIST = Record
name:string;
index:integer;
next:LIST_PTR;
podtermin:LIST_PTR;
end;
//u-список терминов, z-список подтерминов
VAR
u,Head,z,Head2,schow:LIST_PTR;
g,id,id2:Integer;
fuck:boolean;
Digit,Digit2:string;
PROCEDURE Input(dig:string);
Var
tmp:LIST_PTR;
BEGIN
IF u = nil then
Begin
new(u);
tmp:=u;
Head:=u;
inc(id);
End
Else
Begin
tmp:=u;
Head:=u;
While tmp^.next <> nil do
tmp:=tmp^.next;
new(tmp^.next);
tmp:=tmp^.next;
inc(id);
Head:=u;
End;
tmp^.next:=nil;
tmp^.name:=dig;
tmp^.index:=id;
END;
Procedure Input_podtermin(dig2:string);
Var
tmp3:LIST_PTR;
BEGIN
IF z.podtermin=nil Then
Begin
New(z.podtermin);
tmp3.podtermin:=z.podtermin;
End
Else
Begin
tmp3.podtermin:=z.podtermin;
While tmp3.podtermin^.next <> nil Do
tmp3:=tmp3.podtermin^.next;
new(tmp3.podtermin^.next);
tmp3.podtermin:=tmp3.podtermin^.next;
End;
tmp3.podtermin^.next:=nil;
tmp3.podtermin^.name:=dig2;
END;
Procedure input_podtitle;
Var
tmp2:LIST_PTR;
BEGIN
IF z=nil Then
Begin
new(z);
tmp2:=z;
Head2:=z;
Input_podtermin(Digit2);
End
Else
Begin
tmp2:=z;
Head2:=z;
While tmp2^.podtermin=nil do
tmp2:=tmp2^.podtermin;
new(tmp2^.podtermin);
tmp2:=tmp2^.podtermin;
Input_podtermin(Digit2);
End;
tmp2^.podtermin:=nil;
tmp2^.name:=' podtermini: ';
END;
Procedure Vivod;
BEGIN
u:=Head;
z:=Head2;
While u <> nil Do
Begin
Writeln(u^.name,' ',u^.index);
Writeln(z^.name);
u:=u^.next;
While z^.podtermin<>nil do
Begin
Writeln(' ',z.podtermin^.name);
z.podtermin:=z.podtermin^.next;
End;
z:=z^.podtermin;
End;
u:=Head;
writeln;
END;
PROCEDURE Found(dig:string);
Var
figoro:boolean;
BEGIN
figoro:=true;
u:=Head;
While u <> nil do
Begin
IF (u^.name=dig) and (figoro) Then
Begin
Writeln('Vi iskali etot termin: ',u^.name);
Writeln('Jego index: ',u^.index);
figoro:=false;
schow:=u;
End
Else
u:=u^.next;
End;
Writeln;
END;
PROCEDURE Del(dig : string);
Var
x, dx : LIST_PTR ;
BEGIN
u:=Head;
x:=u;
While x<>Nil do
Begin
IF x^.name=dig Then
Begin
IF x=u Then
Begin
u:=u^.Next;
Dispose(x);
x:=u;
End
Else
Begin
dx^.Next:=x^.Next;
Dispose(x);
x:=dx^.Next;
End;
Dec(id);
End
Else
Begin
dx:=x;
x:=x^.Next;
Dec(id);
End;
End;
END;
BEGIN
fuck:=true;
g:=1;
While g<>0 do
begin
Writeln('1.Vvod');
Writeln('2.Vivod');
Writeln('3.Poisk');
Writeln('4.Udalenije');
Writeln('5.Dobavitj podtermin');
Writeln('0.Vihod');
Readln(g);
Writeln;
case g of
1: Begin
Write('Vvedite termin: ');
Readln(Digit); //заполняем список до нулевого элемента
Input(Digit)
End;
2: Vivod;
3: Begin
Write('Vvedite iskomij termin: ');
Writeln;
Readln(Digit); //заполняем список до нулевого элемента
Found(Digit);
u:=Head;
End;
4: Begin
Write('Kakoj element vi hotite udalitj: ');
Readln(Digit);
Del(Digit);
End;
5:Begin
Write('Vvedite termin:');
Readln(Digit);
Found(Digit);
Write('Vvedite podtermin:');
Readln(Digit2);
input_podtitle;;
End;
End
End;
END.