Форум «Всё о Паскале» _ Задачи _ Список и рекурсия
Автор: NTL 11.12.2006 22:52
Дан список символов. Необходими расположить элементы в обратном порядке. Желательно использовать рекурсию, но можно и без нее. Помогите, пжлста..Никак не могу написать эту процеруру
Код
Type point = ^MyWord; MyWord = record ch: char; next: point end; var slovo:point;
Автор: volvo 11.12.2006 23:02
Покажи, как пытался, и как создавал вообще список...
(Думаешь, под новым ником ты неузнаваем? Ошибаешься...)
Автор: NTL 11.12.2006 23:19
Цитата(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.
Цитата
(Думаешь, под новым ником ты неузнаваем? Ошибаешься...)
гы гы гы...Да, я и не хотел прятаться...Просто нужно было срочно на форум Может лучше старый разблокируешь? Я учел свои ошибки и больше так делать не буду
Автор: volvo 11.12.2006 23:32
Не пойдет вот этот кусок:
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 = '.';
, тогда ошибка уйдет, и больше не вернется ...
Ну, а твоя процедура должна быть такой, например:
procedure printreverse(first: point); begin if first^.ch <> '.' then printreverse(first^.next);