У меня проблемы с выводом, может и добавляет подтермин не правильно, толком не могу никак разобраться с ошибкой!!! Уже не первый день долблюсь, исправьте ошибку(ошибки) кто может!!! НАЙДИТЕ ОШИБКУ КТОНИБУДЬ, ПОЖ*Л*ЙСТА, МОЙ МОЗГ ПРОСТО КЛИНИТ ПРИ ПОПЫТКЕ ВНИКНУТЬ В РАБОТУ СО СПИСКАМИ!!!
Код:
program Slovarik;
{$APPTYPE CONSOLE}
uses
SysUtils;
TYPE
Ukazatel = ^LIST;
LIST = record
termin:string;
next:Ukazatel;
sub :Ukazatel;
end;
VAR
term_list,Mt:Ukazatel;
term_dop:string;
g:Integer;
ololo:boolean;
{ПРОЦЕДУРА ДОБАВЛЕНИЯ ТЕРМИНА В СПИСОК}
PROCEDURE Vvod_term(term_pr:string);
Var
tmp:Ukazatel;
BEGIN
IF term_list=nil Then
Begin
new(term_list);
tmp:=term_list ;
Mt:=term_list;
End
Else
Begin
tmp:=term_list;
Mt:=term_list;
While tmp^.next <> nil Do
tmp:=tmp^.next;
new(tmp^.next);
tmp:=tmp^.next;
Mt:=term_list;
End;
tmp^.next:=nil;
tmp^.termin:=term_pr;
END;
{ПРОЦЕДУРА ДОБАВЛЕНИЯ ПОДТЕРМИНА В СПИСОК}
procedure Vvod_subterm(main_term:Ukazatel;term_pr:string);
var tmp:Ukazatel;
begin
if term_list=nil then
// нет терминов для добавления подтерминов
exit;
if main_term=nil then begin
// неопределен термин верхнего уровня
exit;
end;
if main_term^.sub = nil then begin
// список подтерминов пуст, создаем новый
new(main_term^.sub);
main_term^.sub:=term_list;
end
else begin
// список подтерминов существует, ищем последний элемент и к нему вяжем новый
tmp:=main_term^.sub;
while tmp^.next <> nil do
tmp:=tmp^.next;
new(tmp^.next);
tmp:=tmp^.next;
end;
tmp^.next:=nil;
tmp^.termin:=term_pr;
end;
{ПРОЦЕДУРА ВЫВОДА}
PROCEDURE Vivod;
BEGIN
term_list:=Mt;
IF term_list<>nil Then
While term_list<>nil Do
Begin
Writeln(term_list^.termin);
term_list:=term_list^.sub;
While term_list<>nil Do
Begin
Writeln(term_list^.termin);
term_list:=term_list^.next;
End ;
term_list:=term_list^.next;
End
Else
Writeln('Spisok pust');
term_list:=Mt;
writeln;
END;
{ПРОЦЕДУРА ПОИСКА ТЕРМИНА}
PROCEDURE Found(term_pr:string);
Var
found_termin:Ukazatel;
BEGIN
ololo:=true;
term_list:=Mt;
While term_list <> nil Do
Begin
IF (term_list^.termin=term_pr) and (ololo) then
Begin
Writeln;
Writeln('Vi etot termin iskali: ',term_list^.termin);
found_termin:=term_list^.next;
ololo:=false
End
Else
term_list:=term_list^.next;
End;
term_list:=found_termin;
Writeln;
END;
{ПРОЦЕДУРА УДАЛЕНИЯ УКАЗАННОГО ТЕРМИНА}
PROCEDURE Del(term_pr : string);
Var
x, dx : Ukazatel ;
BEGIN
Found(term_pr);
IF ololo Then
Begin
Writeln('Takogo termina net v spiske');
Writeln
End
Else
Begin
x:=term_list;
While x<>Nil do
IF x^.termin=term_pr Then
Begin
IF x=term_list Then
Begin
term_list:=term_list^.Next;
Dispose(x);
x:=term_list
End
Else
Begin
dx^.Next:=x^.Next;
Dispose(x);
x:=dx^.Next
End
End
Else
Begin
dx:=x;
x:=x^.Next
End;
Writeln('Teper dannij temin udalen');
Writeln
End
END;
BEGIN
g:=1;
While g<>0 Do
Begin
Writeln('1.Vvod termina');
Writeln('2.Vivod vsego');
Writeln('3.Poisk termina');
Writeln('4.Udalenije termina');
Writeln('5.Vvod subtermina');
Writeln('0.Vihod iz programmi');
Readln(g);
Writeln;
Case g of
1: Begin
Write('Vvedite termin: ');
Readln(term_dop);
Vvod_term(term_dop)
End;
2: Vivod;
3: Begin
Write('Vvedite iskomij termin: ');
Writeln;
Readln(term_dop);
Found(term_dop)
End;
4: Begin
Write('Kakoj termin vi hotite udalitj: ');
Readln(term_dop);
Del(term_dop)
End;
5: Begin
Write('Vvedite termin:');
Readln(term_dop);
Found(term_dop);
Write('Vvedite subtermin:');
Readln(term_dop);
Vvod_subterm(term_list,term_dop);
End
End
End;
END.