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

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

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

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

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2015, 20:43   #1
Kir94
Новичок
Джуниор
 
Регистрация: 16.10.2015
Сообщений: 5
По умолчанию Вывод списка на экран

Помогите пожалуйста исправить код чтобы он выводил элементы списка на экран. Я так думаю что элементы просто не заносятся в список, т.е. нужно исправить процедуру add, но у меня не получается. Помогите пожалуйста.
Код:
{программа организации списка динамическими переменными}
uses crt;
{создаем тип динамической переменной}
type DinPer=^item;
item=record
inf: string;
next: DinPer;
end;
{описываем переменные head – голова списка, указывает на первый элемент,
hv – хвост списка, последний элемент, не указывает ни на что, указатель имеет значение nil,
p – динамическая переменная, используется для работы со списком}
var head,hv,p:DinPer;
n,i:integer;
x: string;
{ добавление в список элементов в хвост}
procedure add(var hv:DinPer; x:string);
begin
new(p);
p^.next:=nil;
hv:=p;
hv^.inf:= x;
end;
{вывод на экран элементов списка}
procedure print;
begin
writeln('элементы списка: ');
p:=head;
while p<>nil do
begin
writeln(p^.inf);
p:=p^.next;
end;
end;
begin
clrscr;
{голова списка не ссылается ни на какую область памяти (переменную)}
head:=nil;
{хвост списка не ссылается ни на какую область памяти (переменную)}
hv:=nil;
writeln('введите количество добавляемых элементов');
readln(n);
writeln('введите элементы списка ');
for i:=1 to n do begin
readln(x);
add(hv,x);
end;
{просмотр всех элементов списка}
Print;
end.
Kir94 вне форума Ответить с цитированием
Старый 16.10.2015, 21:02   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,111
По умолчанию

У Вас переменная head имеет значение Nil.
В процедуре Add значение этой переменной не присваивается.
Рекомендация: Скачать книгу Т.А. Павловская, Программирование на ЯВУ, Паскаль. Книга имеется в списке рекомендуемой литературы, см. Раздел "Полезная литература. Паскаль" в заголовке этой конференции. Там имеется прекрасный пример работы со списком.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.10.2015, 21:04   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,803
По умолчанию

Код:
procedure add(var hv:DinPer; x:string);
begin
new(p);
p^.next:=nil;
p^.inf:= x;

if hv=nil then begin
 head:=hv;
end else begin
 hv^.next:=p;
end;

hv:=p;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2015, 21:14   #4
Kir94
Новичок
Джуниор
 
Регистрация: 16.10.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
procedure add(var hv:DinPer; x:string);
begin
new(p);
p^.next:=nil;
p^.inf:= x;

if hv=nil then begin
 head:=hv;
end else begin
 hv^.next:=p;
end;

hv:=p;
end;
Все равно список не выводится
Kir94 вне форума Ответить с цитированием
Старый 16.10.2015, 21:31   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,111
По умолчанию

Вот пример без привязки к Вашим переменным.
Код:
Procedure Add(x: byte);
var n, tmp: Plist;
begin
   new(n);    {получаем указатель на новый элемент}
   n^.data:=x;  {Заполняем элемент значением}
   n^.next:=nil; {элемент добавляется в хвост}

   if head = nil then {список пуст}
      head:=n {созданный элемент - первый элемент списка}
   else     {список не пуст}
   begin
      tmp:=head;
      while tmp^.next <> nil do {переходим в конец списка}
          tmp:=tmp^.next;
      tmp^.next:=n;  {Добавляем элемент в хвост}
   end;
end;
Кстати, а какую роль играет переменная hv?


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.10.2015, 21:52   #6
Kir94
Новичок
Джуниор
 
Регистрация: 16.10.2015
Сообщений: 5
По умолчанию

а можно или код полностью или ссылку на этот пример, а то не разберусь в некоторых местах кода
Kir94 вне форума Ответить с цитированием
Старый 16.10.2015, 22:06   #7
Kir94
Новичок
Джуниор
 
Регистрация: 16.10.2015
Сообщений: 5
По умолчанию

Все разобрался и теперь все работает. Спасибо всем за помощь
Kir94 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не получается вывод списка на экран КРИЖ Visual C++ 1 01.06.2013 17:38
Вывод эллементов списка на экран. Visp1024 Общие вопросы C/C++ 0 13.01.2013 15:23
Вывод списка символов справа налево 5 раз подряд и исключить вывод цифр Gareek Помощь студентам 2 23.12.2011 21:41
Вывод на экран списка статей, опубликован-ных после заданного года Igor571 Паскаль, Turbo Pascal, PascalABC.NET 2 01.12.2008 08:23
Вывод сообщения на экран при выборе из списка определенного значения MaGistR Microsoft Office Excel 1 31.01.2008 09:10