Программа
TYPE List=^Element; { Список символов текста }
Element=record
Ch:char; { Символ }
Next:List { Следующий элемент текста }
end;
PROCEDURE DisposerList(var L:List); { Процедура удаления списка }
Begin
if L<>nil then begin { Если переменная существует, то }
DisposerList(L^.NEXT); { удаление хвоста списка }
Dispose(L); { удаление переменной }
L:=nil { Переопределение ссылки }
end
End;
PROCEDURE InputText(Mark:char;var L:List); { Процедура ввода текста }
Var Ch:char; { Вводимый список }
Ref:List; { Ссылка на элемент списка }
Begin
Read(Ch); { Ввод символа }
if Ch<>Mark { Проверка конца текста }
then begin
InputText(Mark,L); { Ввод оставшейся части текста }
New(Ref); { Созданеие нового элемента списка }
{ Связывание нового элемента со списком: }
Ref^.Next:=L;
L:=Ref;
L^.Ch:=Ch; { Определение символа текста }
end
else ReadLn; { Пропуск конца строки }
End;
PROCEDURE GetStat(L:List;var NumSent:word;var NumCh:word);{ Процедура получения числа и длин предложений }
Begin
if L<>nil then { Проверка конца списка }
begin
if not(L^.Ch in [#10,#13]) { "Отбрасывание" маркеров конца строки }
then Write(L^.Ch); { Вывод символа текста }
Inc(NumCh); { Подсчет символов предложения }
if L^.Ch='.' then { Проверка конца предложения }
begin
WriteLn(' [',NumCh,']'); { Вывод числа символов предложения }
NumCh:=0; { Сброс числа символов предложения }
Inc(NumSent) { Набор числа предложений }
end;
GetStat(L^.Next,NumSent,NumCh); { Просмотр оставшейся части списка }
end
End;
VAR Mark:char; { Символ - признак конца текста }
Text:List; { Указатель на текст }
NumSent,NumCh:word; { Число предложений и символов }
BEGIN
WriteLn; { Пропуск строки }
Write('Введите символ конца текста '); { Вывод приглашения }
ReadLn(Mark); { Ввод символа }
Text:=nil; { Сброс указателя }
WriteLn('Введите текст'); { Вывод приглашения }
InputText(Mark,Text); { Ввод текста }
WriteLn('-------------------------------'); { Вывод разделителя }
NumSent:=0; { Сброс числа предложений }
NumCh:=0; { Сброс числа символов }
GetStat(Text,NumSent,NumCh); { Определение числа и длин предложений }
if NumCh<>0 then WriteLn(' [Данная последовательность не заканчивается точкой]');
{ Выод сообщения об ошибке формата }
WriteLn('-------------------------------'); { Вывод разделителя }
WriteLn('Число предложений ',NumSent);
DisposerList(Text) { Уничтожение текста }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию