Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2012, 22:36   #1
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
Вопрос Списки с указателями,исправьте ошибку!(Delphi)

Хрестос воскрес народ, с пасхой!!!
Кому не трудно покапайтесь в моем коде!!!
Выкидывает ошибку когда добавляю 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.
<----Весы Там.

Последний раз редактировалось Npwas; 15.04.2012 в 13:15.
Npwas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки с указателями!(Delphi) Npwas Помощь студентам 2 27.03.2012 13:32
Списки с указателями, как пользоватьс?(Delphi) Npwas Помощь студентам 0 26.03.2012 13:27
Исправьте ошибку 15104 Общие вопросы C/C++ 2 06.10.2011 11:07
Исправьте ошибку.С# Tase4ka Помощь студентам 8 12.02.2011 14:09
Исправьте ошибку kipapsih Помощь студентам 0 07.01.2011 20:19