Форум «Всё о Паскале» _ Задачи _ списки. удаление буквы из слов
Автор: Insomnia 25.06.2011 19:01
program delete_1_bykvy_iz_slov; // удалить 1_ю букву из всех слов
{$APPTYPE CONSOLE}
uses SysUtils;
type Tinfo= string; TList= ^TElem; TElem= record info: Tinfo; next: TList; end;
procedure create (var p: Tlist;info: Tinfo); begin if p<>nil then create(p^.next,info) else begin new(p); p^.info:=info; p^.next:=nil; end; end;
procedure input (var p: Tlist); var ch: char; s: string; begin writeln('input a text, point - end'); read(Ch); if Ch='.' then begin writeln('the text are empty'); readln; readln; exit end else begin while Ch<>'.' do begin s:=s+Ch; read(Ch) end; readln; end; create (p,s); end;
procedure print (l: Tlist); var p: Tlist; begin p:=l; while p<>nil do begin writeln(p^.info); p:=p^.next; end; end;
var L: Tlist; begin input(L); print (L); readln end.
не пойму, как мне обратиться к 1 букве. список я правильно создал?
Автор: IUnknown 25.06.2011 21:22
Цитата
список я правильно создал?
Нет. В любом случае неправильно. По двум причинам:
1. Тебе нужен не список, содержащий всю введенную строку за исключением точки, а список, который в качестве элементов содержит слова (то есть, надо разделять введенную строку на слова и хранить каждое из них в отдельном элементе списка. Добавляется одной-единственной строкой: проверкой очередного символа на разделитель между словами, и если да - то записать новое слово в список и "обнулить" временную переменную s).
2. Даже если тебе нужно хранить сразу всю введенную строку в одном-единственном элементе списка (хотя зачем тогда список? Храни просто в строковой переменной), то и тогда это сделано неверно. Потому, что ты не учишься на ошибках. У тебя уже были предупреждения, что переменная может не быть инициализированной, так? Вот здесь - тот же случай: внутри input строка s не инициализируется. Это еще более усугубляется тем, что переменная не глобальная, а локальная, то есть, содержит мусор. Как бы ты правильно не написал create, если ты в нее передашь мусор - то и получишь в результате его же.