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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2011, 22:17   #1
gvilon
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 10
По умолчанию Проблема с созданием динамического списка

Создать процедуру создания списка с 5-ти елементов, и процедуру для вывода информационных полей из этого списка.


Код:
type pp=^elem;
     elem=record
      inf1:integer;
      next:pp;
     end;
     
var ptb, pte, pt:pp;

procedure newList;
var i:integer;
begin
  ptb:=nil;
  for i:=1 to 5 do
  begin
    new(pt);
    pt^.inf1:=random(20);
    if ptb=nil then 
      ptb:=pt;
    pte^.next:=pt;
    pte:=pt;   
  end;
  pte^.next:=nil;
end;

procedure showList;
begin
  while ptb <> nil do
  begin
    writeln(ptb^.inf1);
    ptb:=ptb^.next;
  end;
end;

begin

  randomize;
  
  newList;
  showList;
  
end.
ptb - указатель на первый елемент списка
pte - на последний
pt - текущий

Уже 3 часа сижу над прогой и не выходит(((
gvilon вне форума Ответить с цитированием
Старый 06.10.2011, 22:50   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от gvilon Посмотреть сообщение
Уже 3 часа сижу над прогой и не выходит(((
Уверен, эти три часа не прошли даром )).

Вот, смотри.
Код:
const
  n= 5;

type
  pp= ^elem;
  elem= record
    inf1: integer;
    next: pp;
  end;

var
  ptb, pte: pp;

procedure newList;
var
  i: integer;
  pt: pp;
begin
  ptb:= nil;
  for i:=1 to n do begin
    new(pt);
    pt^.inf1:= 100+i;  { random(20); }
    if ptb=nil then begin
      ptb:= pt;
      pte:= pt
    end
    else pte^.next:= pt;
    pte:= pt;
    pte^.next:= nil;
  end;
end;

procedure showList;
begin
  while ptb <> nil do begin
    writeln(ptb^.inf1);
    ptb:=ptb^.next;
  end;
end;

begin
  { randomize; }
  newList;
  showList;
end.
Если есть вопросы - давай.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 06.10.2011, 22:54   #3
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

вместо
Код:
if ptb=nil
 then
  ptb:=pt;
pte^.next:=pt;
pte:=pt;
нужно
Код:
if ptb=nil
 then 
  ptb:=pt
 else
  pte^.next:=pt;
pte:=pt;
т.к. при создании первого элемента, pte не создан ...
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 06.10.2011, 23:08   #4
gvilon
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 10
По умолчанию

Спасибо. Теперь понял в чем ошибка была. Просто раньше не встречался с таким типом задач.
gvilon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
роблема с созданием объекта динамического массива Класса GDA230105 C++ Builder 3 26.07.2011 09:25
Сортировка динамического списка | Delphi Chloe Помощь студентам 2 15.07.2011 13:09
Сортировка двунаправленного динамического списка lacost Общие вопросы C/C++ 3 08.05.2009 10:32
Помогите плизз с созданием списка Julia-21 Паскаль, Turbo Pascal, PascalABC.NET 3 18.01.2009 19:12
сортировка динамического списка new_sergei Помощь студентам 1 19.12.2008 00:36