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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2012, 18:22   #1
RevenGGe
Пользователь
 
Аватар для RevenGGe
 
Регистрация: 03.06.2012
Сообщений: 37
По умолчанию Обратный порядок списка

Здравствуйте. Помогите пожалуйста решить задачу:
Дан список целых чисел. Отобразить его в обратном порядке.
Буду очень благодарен.
RevenGGe вне форума Ответить с цитированием
Старый 16.10.2012, 20:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как именно дан?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2012, 21:31   #3
RevenGGe
Пользователь
 
Аватар для RevenGGe
 
Регистрация: 03.06.2012
Сообщений: 37
По умолчанию

Код:
uses crt;
type
    EIType=integer;
    link=^rec;
    Rec=record
        inf:EIType;
        next:link;
       end;
var S:link;


Procedure InsertEI(var l:link;d:EIType);
var p,q:link;
begin
 new(q);
 q^.inf:=d;
 q^.next:=nil;

 if l=nil then l:=q

 else begin
      p:=l;
      while p^.next<>nil do
          p:=p^.next;

         q^.next:=p^.next;
         p^.next:=q;


    
      end;
end;

Procedure Init (var l:link);
var k:EIType;
begin
 writeln('Введите последовательность целых чисел, конец "0"');
 readln(k);
 while k<>0 do
  begin
   InsertEI(l,k);
   readln(k);
  end;
end;



Procedure Print(var l:link);     {В этой процедуре ошибка. 
Если вводить числа "1,2,3,4,12,13", то оно будет выдавать "13,12,4,3,2,0,1". 
Откуда берется ноль, я понимаю, но как это исправить не знаю. }
var q:link;
begin
 writeln;

 q:=l;
while q<>nil do
 begin
  q:=l;
 while q^.next^.next<>nil do
  begin
    q:=q^.next;
  end;

   if q^.next<>nil then
  writeln(q^.next^.inf);
   q^.next:=nil;

 end;
 writeln(l^.inf);

end;



BEGIN
 clrscr;
 s:=nil;
 Init(s);
 Print(s);
 readln;
 END.
RevenGGe вне форума Ответить с цитированием
Старый 16.10.2012, 21:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А вот стесняюсь спросить, ты не хочешь сделать список двусвязным? Чтоб каждый элемент списка помнил не только следующего но и предидущего за ним?
Код:
Procedure Print(var l:link);   
var e,q:link;
begin
q:=l;
while q<>nil do q:=q^.next;
while q<>l do begin
 e:=l; while e^.next<>q do e:=e^.next; write(e^.next^.inf); q:=e;
end; write(q^.inf);
end;
Так подходит?
I'm learning to live...

Последний раз редактировалось Stilet; 16.10.2012 в 21:51.
Stilet вне форума Ответить с цитированием
Старый 16.10.2012, 21:57   #5
RevenGGe
Пользователь
 
Аватар для RevenGGe
 
Регистрация: 03.06.2012
Сообщений: 37
По умолчанию

почти. Первым выдаёт 268
RevenGGe вне форума Ответить с цитированием
Старый 17.10.2012, 00:25   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мне непонятно, что Вам собственно надо - исправить ошибку при вводе списка, или обеспечить вывод списка как прямом, так и в обратном порядке?!

если исправить ошибку, то:
Код:

Procedure InsertEI(var l:link;d:EIType);
var p,q:link;
begin
 new(q);
 q^.inf:=d;
 q^.next:=nil;

 if l=nil then l:=q

 else begin
      p:=l;
      while p^.next<>nil do
          p:=p^.next;

         p^.next:=q;
      end;
end;
ну и с выводом Вы что-то перемудрили...
Код:
Procedure Print(l:link);
var q:link;
begin
 writeln;
 q:=l;
 while q<>nil do
 begin
   Write(q^.inf, ' ');
   q:=q^.next;
  end;
  WriteLn;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2012, 07:51   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ну и с выводом Вы что-то перемудрили...
Серж, внимательнее:
Цитата:
Отобразить его в обратном порядке.
А у тебя прямой порядок.
Цитата:
Первым выдаёт 268
Ды это... Отладчик в руки и трассируй. Выясни пошаговкой куда обращаются переменки, я то с потолка писал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.10.2012, 08:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ага, я в курсе! Виталий, но я вроде бы внимательным был.

более того, я об этом автора темы напрямую спрашиваю-уведомляю:
Цитата:
Сообщение от Serge_Bliznykov
что Вам собственно надо - исправить ошибку при вводе списка, или обеспечить вывод списка как прямом, так и в обратном порядке?!
поясню, почему я сделал такое предположение...
у автора темы была ошибка при добавлении элементов в список.
Поэтому я предполжил, что элементы списка выводятся НЕ В ТОМ ПОРЯДКЕ, как их добавляли в список. А автор хотел их вывести в том порядке, как они добавлялись (по сути - в прямом порядке). Но он решил, что проше вывести их в обратном порядке, чтобы получить прямой порядок вывода..
возможно, что я ошибаюсь... поэтому и уточняю у автора темы...

ну, как-то так..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2012, 11:20   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хе... А может ты и прав. Я как-то не подумал о такой вариации неточного ТЗ
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратный порядок Vapali-Pik Помощь студентам 0 28.07.2011 00:39
Изменить порядок слов в документе на обратный arthur_92 Microsoft Office Word 1 07.06.2011 00:14
Обратный порядок G. J. Cezar Общие вопросы C/C++ 2 22.10.2010 15:10
Обратный алфавитный порядок ~GVS Помощь студентам 0 21.04.2010 15:54
Обратный порядок вывода (системы счис.) forsaken66 Общие вопросы C/C++ 2 17.10.2009 01:45