Помощь - Поиск - Пользователи - Календарь
Полная версия: Список и рекурсия
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
NTL
Дан список символов. Необходими расположить элементы в обратном порядке. Желательно использовать рекурсию, но можно и без нее. Помогите, пжлста..Никак не могу написать эту процеруру give_rose.gif
Код
Type
  point = ^MyWord;
  MyWord = record
    ch: char;
    next: point
  end;
var
   slovo:point;
volvo
Покажи, как пытался, и как создавал вообще список...

(Думаешь, под новым ником ты неузнаваем? Ошибаешься...)
NTL
Цитата(volvo @ 11.12.2006 19:02) *

Покажи, как пытался, и как создавал вообще список...

Код
uses crt;
Type
  point = ^MyWord;
  MyWord = record
    ch: char;
    next: point
  end;
var
   slovo:point;

procedure Print (first: point);
Var r: point;
begin
  R:= first;
  write('C/\OBO = ');
  While r<>nil do
    begin
      Write (r^.ch);
      R:=r^.Next;
  end;
  writeln;
end;

procedure Vvod(var first:point);
var r, last:point;
begin
  first:= nil; last := nil;

  writeln('HABEPuTE C/\OBO C "." HA KOHCE ');
  while r^.ch <> '.' do begin
      new(r);
      r^.next := nil;
      read(r^.ch);

      if first = nil then first := r
      else last^.next := r;

      last := r;
  end;
end;
{---------------------------------------------------------------------------}
begin
clrscr;
  vvod(slovo);
  print(slovo);
  {PrintReverse(slovo);}  {сосбтвенно это искомая процедура}
  readkey
  end.


Цитата
(Думаешь, под новым ником ты неузнаваем? Ошибаешься...)

гы гы гы...Да, я и не хотел прятаться...Просто нужно было срочно на форум good.gif Может лучше старый разблокируешь? Я учел свои ошибки и больше так делать не буду nea.gif
volvo
no1.gif Не пойдет вот этот кусок:
  writeln('HABEPuTE C/\OBO C "." HA KOHCE ');
while r^.ch <> '.' do begin ...

У тебя пока R не инициализирован... На FPC тут же выбило Segmentation Fault, в Турбо паскале нельзя доверять результату этой процедуры... Поменяй на такое:
  writeln('HABEPuTE C/\OBO C "." HA KOHCE ');
repeat
new( r );
r^.next := nil;
read(r^.ch);

if first = nil then first := r
else last^.next := r;

last := r;
until r^.ch = '.';

, тогда ошибка уйдет, и больше не вернется smile.gif ...

Ну, а твоя процедура должна быть такой, например:
procedure printreverse(first: point);
begin
if first^.ch <> '.' then
printreverse(first^.next);

write(first^.ch);
end;
NTL
мистика какая-то smile.gif smile.gif smile.gif Большое спасибо! Респект
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.