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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2008, 16:21   #1
parinoff
 
Регистрация: 21.11.2008
Сообщений: 7
Вопрос Вывод кольцевого списка в обратном порядке

Всем привет
Подскажите как вывести кольцевой список в обратном порядке? Вот мой код процедуры вывода нет вообще не знаю как ее делать
Заранее благодарю!

Код:
program P1;
Uses Crt;
        type
            te=Integer;
            pe = ^el;
            el = Record
               inf:te;
               next:pe;
            End;
        Var
           saq:pe;
           menu: byte;
Procedure NewLos(var saq:pe);
var q:pe; a:te; i:te;
Begin
clrscr;
  New(saq);
  q:=saq;
  q^.next:=nil;
  writeln('Procedura Vvoda LOS.');
  writeln('Dlya vihoda vvedite 0 i nazmite Enter.');
  write('Vvedite 1-ii element LOS:');
  readln(a);
  i:=2;
  while a<>0 Do
    Begin
      write('Vvedite ',i,'-ii element LOS:');
      new(q^.next);
      q:=q^.next;
      q^.inf:=a;
      q^.next:=nil;
      readln(a);
      i:=i+1;
    end;
   q^.next:=saq^.next;
end;
Procedure ReversOutput(var saq:pe);
var q:pe;
Begin
clrscr;
  {-----Чего тут писать?------}
end;
Procedure Output(var saq:pe);
var q:pe;
Begin
clrscr;
  if saq = nil then
   begin
    writeln('Press any key for Exit');
    writeln('LOS Pustoi!!!');
    Repeat Until KeyPressed;
   end
  else
   begin
    q:=saq^.next;
    writeln('Vvedennii LOS');
    writeln('Press any key for Exit');
    Repeat
     While q<>saq Do
      Begin
       Write(q^.inf);
       write(' - ');
       q:=q^.next;
      end;
    Until KeyPressed;
   end;
end;
parinoff вне форума Ответить с цитированием
Старый 21.11.2008, 16:47   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Список обязательно нужен однонаправленный? Если сделать его двунаправленным, то обратный вывод будет по сути таким же, как и прямой.
Arigato вне форума Ответить с цитированием
Старый 22.11.2008, 00:27   #3
lexus_ilia
Студентик :)
Пользователь
 
Аватар для lexus_ilia
 
Регистрация: 29.09.2008
Сообщений: 84
По умолчанию

так ему и нужен обязательно двунаправленный список, если конечно не добавить ещё один список в который вносить все данные с его списка в обратном порядке, но по-моему это глупо...
lexus_ilia вне форума Ответить с цитированием
Старый 22.11.2008, 01:49   #4
Stepler
Форумчанин
 
Аватар для Stepler
 
Регистрация: 03.02.2008
Сообщений: 213
По умолчанию

Все довольно просто, ненужно никакого лишнего гемора с созданием двунаправленого списка или дополнительного списка.
Вот собственно решение, с помощю рекурсивной процедури делаем вывод.
Код:
procedure revo(vk:pe);
 begin
 if(vk=nil)then exit;
 revo(vk^.next);
 write(vk^.inf);
 end;
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Stepler вне форума Ответить с цитированием
Старый 22.11.2008, 10:26   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

А какой размер стека по умолчанию в Турбо Паскале? Кажется, 16Кб. Если список будет большим, может не хватить.
Arigato вне форума Ответить с цитированием
Старый 22.11.2008, 12:03   #6
Stepler
Форумчанин
 
Аватар для Stepler
 
Регистрация: 03.02.2008
Сообщений: 213
По умолчанию

Цитата:
А какой размер стека по умолчанию в Турбо Паскале? Кажется, 16Кб.
Совершенно верно по умолчанию 16 кб.
Цитата:
Если список будет большим, может не хватить.
Совершенно верно, но для данного случая стека хватит для списка длинной не меньше чем на 2000 елементов.
Но тем не менее рекурсия дает елегантное решение проблеми с выводом однонаправленого списка в обратном порядке
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Stepler вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод списка в алфавитном порядке ErvinR PHP 4 24.10.2008 16:03
Во вводимом тексте переписать все слова в обратном порядке. menlo Помощь студентам 5 17.11.2007 10:18
элемменты заданого масива a(n) перепешите в новый масив b(n) в обратном порядке! finch Помощь студентам 4 25.06.2007 13:20