Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 90
от 30.10.2005, 19:36

Администратор:Калашников О.А.
В рассылке:Подписчиков: 146, Экспертов: 44
В номере:Вопросов: 1, Ответов: 2


Вопрос № 28261: Здравствуйте, уважаемые эксперты! Подскажите пожалуйста. Не понимаю один момент. Уже запарился! Прога по работе со списком. Имеются процедуры создания, печати и удаления списка. Это рабочая прога: program test_list; ...

Вопрос № 28.261
Здравствуйте, уважаемые эксперты!

Подскажите пожалуйста. Не понимаю один момент. Уже запарился!

Прога по работе со списком. Имеются процедуры создания, печати и удаления списка.

Это рабочая прога:
program test_list;
uses crt;
type
list=^l;
l=record
inf: integer;
next: list;
end;
var
root, tmp: list;
{=======================CREATE=================}
procedure create (var root: list);
var
tmp: list;
i, n: integer;
begin
new(tmp);
root:=tmp;
for i:=1 to 10 do
begin
tmp^.inf:=i*2;
new(tmp^.next);
if i<10 then tmp:=tmp^.next; {***1}
end;
tmp^.next:=nil; {***2}
end;
{========================PRINT====================}
procedure print (root: list);
begin
while root<>nil do
begin
write(root^.inf,' ');
root:=root^.next;
end;
end;
{========================DELETE==================}
procedure destroy_list(var root: list);
var
tmp: list;
begin
while root<>nil do
begin
tmp:=root^.next;
dispose(root);
root:=tmp;
end;
end;
{=======================MAIN=====================}
begin
clrscr;
create(root);
print(root);
destroy_list(root);
readkey;
end.
Интересуют только строки, помеченные ***.
В рабочем варианте (смотри выше) я НЕ перехожу на последний элемент, а делаю tmp^.next:=nil.
Почему я не могу ПЕРЕЙТИ на последний элемент и ПРИСВОИТЬ ему занчение nil??????
То есть:

tmp:=tmp^.next; {***1}
end;
tmp:=nil; {***2}

Большое спасибо. Хотелось-бы конкретно разобраться со списками на Pascal'e (это только малая часть всей работы)...

Приложение:

Отправлен: 25.10.2005, 01:58
Вопрос задал: Стомов Евгений (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, Стомов Евгений!
Я немного переделал процедуру Create. Непонятно, если у Вас уже есть глобальная переменная tmp, зачем Вы вводите еще одну, локальную?

Приложение:

Ответ отправил: sir henry (статус: Профессор)
Отправлен: 25.10.2005, 07:55
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ!

1) tmp - только локальные (была опечатка).

2) Можно ли сделать, чтобы все элементы списка заполнялись сразу, а не со второго?

3) Можно ли в Вашей программе строку tmp^.next:=nil; вынести из цикла? Программа тоже будет работать!

Отвечает: Маренич Владимир
Здравствуйте, Стомов Евгений!

procedure create (var root: list);
var
tmp: list;
i, n: integer;
begin
tmp:=nil;
for i:=10 downto 1 do
begin
new(root);
root^.inf:=i*2;
root^.next:=tmp;
tmp:=root;
end;
Ответ отправил: Маренич Владимир (статус: 3-ий класс)
Отправлен: 26.10.2005, 11:09


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Rambler's Top100 Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное