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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2013, 10:44   #1
aldmitt
 
Регистрация: 04.12.2013
Сообщений: 9
По умолчанию Паскаль: переписать строковый список в обратном порядке

Товарищи кодеры помогите в решении задачи!
"Дан однонаправленный список, состоящий из строк. Переписать список в обратном порядке"
Давно не программировал, списки изучаю второй день.
aldmitt вне форума Ответить с цитированием
Старый 04.12.2013, 10:50   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

http://www.programmersforum.ru/showthread.php?t=30507
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 04.12.2013, 12:17   #3
aldmitt
 
Регистрация: 04.12.2013
Сообщений: 9
По умолчанию

Есть ещё какие-нибудь варианты?
aldmitt вне форума Ответить с цитированием
Старый 04.12.2013, 14:11   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Конечно, есть. Раз тот не нравится, держите другой.
Код:

type
 pNode=^TNode; {Типизированный указатель - указатель на данные типа TNode}
 TNode=record
   Value:string; {значение элемента}
   Next:PNode; {Указатель на следующий элемент}
 end;

procedure ReverseOutput(vk:pnode);
begin
  if (vk=nil) then
   exit;
  ReverseOutput(vk^.next);
  writeln(vk^.Value);
end;

var
 First:pnode;
 Temp:pnode; {временный указатель на ячейку. Понадобится для построения связанного списка}
 v:string;
begin
 First:=nil; {В начале у нас First не указывает ни на что}
 repeat
   write('Введите значение нового элемента (0 для выхода):');
   readln(v);
   if v='0' then break; {Если ввели 0, то окончим ввод элементов}
   if First=NIL then {Если First=NIL, то сейчас мы создадим первый элемент}
   begin
     new(Temp); {Создали первый элемент. Его адрес в Temp}
     First:=Temp; {Так как элемент первый, запомним его адрес}
   end else {Иначе это уже не первый элемент}
   begin
     New(Temp^.Next); {Создаем на основе предыдущего, чтобы сохранилась связь между элементами}
     Temp:=Temp^.Next; {Текущий элемент теперь тот, который мы только что создали.
                       И предыдущий указывает на него}
   end;
   Temp^.Value:=v; {Зададим значение текущего элемента}
 
 until false; {Бесконечный цикл. Прервется только если пользователь введет 0}
 {Всё у нас хорошо. Только вот в последнем элементе параметр Next не определен. Непорядок}
 Temp^.Next:=NIL; {Ну вот теперь то лучше}
 {Заметьте, что даже если пользователь сразу введет 0, то в переменной First будет NIL,
что значит - пустой список}

 {Теперь выведем наш связанный список. Адрес его первого элемента находится в переменной First,
и это хорошо %)}
 Temp:=First; {Укажем переменной Temp на первый элемент последовательности}
 while Temp<>NIL do {Пока текущий элемент существует}
 begin
   writeln(Temp^.Value); {Выводим текущий элемент}
   Temp:=Temp^.Next; {Переходим к следующему}
   {Обратите внимание, что если следующий элемент не существует,
   то в Temp попадет значение NIL, и цикл прекратится}
 end;
 ReverseOutPut(first);
end.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 04.12.2013, 14:33   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128
Конечно, есть. Раз тот не нравится, держите другой.
Красавчик!!

я хотел бы отметить один малюсенький нюансик.
в задании: "Переписать список в обратном порядке". Вы же выводите список в обратном порядке. Строго говоря, это не одно и то же.
Препод вполне может учесть этот нюанс, как невыполнение задания.
(а может и нет, от препода зависит )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.12.2013, 14:43   #6
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Красавчик!!

я хотел бы отметить один малюсенький нюансик.
в задании: "Переписать список в обратном порядке". Вы же выводите список в обратном порядке. Строго говоря, это не одно и то же.
Препод вполне может учесть этот нюанс, как невыполнение задания.
(а может и нет, от препода зависит )
Увы, не мое. Взял из FAQ и добавил процедуру из ссылки.
Да, признаюсь, понял так, что нужно именно вывести в обратном порядке. Впрочем, после такого детально расписанного кода тс сам легко сможет выполнить задание.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 04.12.2013, 22:40   #7
aldmitt
 
Регистрация: 04.12.2013
Сообщений: 9
По умолчанию

Спасибо большое за вариант! Всё подробно расписано!) Я думаю такое решение подойдёт. Но хотел бы всё таки уточнить в чем же конкретно разница межу "ПЕРЕПИСАТЬ список в обратном порядке" и "ВЫВЕСТИ список в обратном порядке"?!
aldmitt вне форума Ответить с цитированием
Старый 04.12.2013, 22:52   #8
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Если только вывести, то сам список остается неизменным. А если переписать, то элементы списка будут изменены.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 04.12.2013, 23:14   #9
aldmitt
 
Регистрация: 04.12.2013
Сообщений: 9
По умолчанию

Если не затруднит, можно пример какой-нибудь, по переписке цикла. Я думаю мне пригодится, так сказать, для общего развития=)
aldmitt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В последней строке символы, следующие за заданиым символом, переписать в обратном порядке Leshkin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.11.2012 21:47
слово в обратном порядке (Паскаль АВС) tanya61043 Помощь студентам 1 27.05.2012 23:09
переписать строку s так, чтобы символы в ней были записаны в обратном порядке edikesh Помощь студентам 7 05.12.2011 23:16
переписать массив в обратном порядке Настя22 Паскаль, Turbo Pascal, PascalABC.NET 1 25.02.2011 11:01
Во вводимом тексте переписать все слова в обратном порядке. menlo Помощь студентам 5 17.11.2007 10:18