Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели и списки. 
:(
    Опции темы
Rencom
Дата 21.5.2006, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 27.9.2005

Репутация: нет
Всего: нет



Задача: создать список и напечатать его.

Некорректно работает, вероятно, из-за неправильно расставленных символов ^. Среда разработки Borland Pascal 7.0. Помогите разобраться.

Код

Program MyList;

uses
  Crt;

Type
  TElem=integer;
  TList=^TNode;
  TNode=record
          info: TElem;
          next: TList
        end;

Var
  E            : TElem;
  L,buffer  : TList; { L - ссылка на первый элемент в списке }
  N,i          : Byte; { N - число элементов в списке }
  t             : Boolean;

Procedure Init_List(var List:TList);
  begin
    List:=nil
  end;

Function List_Is_Empty(var List:TList):boolean;
  begin
    List_Is_Empty:=List=nil
  end;

Procedure Add_To_List(var List:TList;Element:TElem);
  var N:TList;
  begin
    new(N);
    N^.info:=Element;
    N^.next:=List;
    List:=N
  end;

Procedure Print_List(List:TList);
  begin
    IF not List_Is_Empty(List)
       then
         Print_List(List^.next)
       else
         begin
           inc(i);
           Writeln('#',i,'=',List^.info)
         end
  end;

{ - MAIN PROGRAM - }

Begin
  ClrScr;
  Writeln('Please, press <Enter> to start program.');
  Readln; ClrScr;

  Write('Number of elements of List: '); Read(N);

  Writeln('Please, input elements of List:');
  Init_List(L);
  For i:=1 to N do
      begin
        write('#',i,'='); read(E);
        Add_To_List(L,E)
      end;

  Writeln;
  i:=0; Print_List(L)

End.
 
PM MAIL   Вверх
volvo877
Дата 21.5.2006, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Rencom @  21.5.2006,  02:18 Найти цитируемый пост)
вероятно, из-за неправильно расставленных символов ^

Рекурсия не совсем верно описана. Вот так попробуй:
Код

Procedure Print_List(List:TList);
begin

  if not List_Is_Empty(List^.next) { <--- Обрати внимание на List^.NEXT !!!}
  then Print_List(List^.next);

  { Здесь не нужно Else !!! }
  inc(i);
  Writeln('#',i,'=',List^.info)
end;
 
PM MAIL   Вверх
Rencom
Дата 21.5.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 27.9.2005

Репутация: нет
Всего: нет



volvo877 : да, действительно не верно описана, спасибо. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.