Программа


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.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию