Дан файл F. Вывести на экран, из каждой строки слово наибольшей длины — Pascal(Паскаль)

program Project1;
 
const
  Fn = 'file.txt';
  (*Список разделителей слов.*)
  D = [' ', '.', ',', ':', ';', '!', '?', '-', #9, #10, #13];
var
  F : Text;
  S, WordMax : String;
  i, j, P1, LenS, Len, LenMax : Integer;
begin
  Assign(F, Fn);
  Reset(F);
 
  j := 0;
  while not Eof(F) do begin
    (*Номер очередной строки.*)
    j := j + 1;
    (*Переход на следующую строку для всех строк, кроме первой.*)
    if j > 1 then Readln(F);
 
    Read(F, S);
 
    LenS := Length(S);
    P1 := 0;
    LenMax := 0;
    WordMax := '';
    (*Перебор символов прочитанной строки.*)
    for i := 1 to LenS do begin
      (*Пропускаем разделители.*)
      if S[i] in D then Continue;
      (*Отслеживаем начало слова.*)
      if (i = 1) or (S[i - 1] in D) then
        P1 := i
      ;
      (*Отслеживаем конец слова.*)
      if (i = LenS) or (S[i + 1] in D) then begin
        (*Длина слова.*)
        Len := i - P1 + 1;
        (*Если длина слова наибольшая среди уже просмотренных слов,
        то выбираем текущее слово, как максимальное по длине.*)
        if Len > LenMax then begin
          LenMax := Len;
          WordMax := Copy(S, P1, Len);
        end;
      end;
    end;
 
    if LenMax > 0 then
      Writeln('Строка N', j, ': ', WordMax)
    else
      Writeln('Строка N', j, ': В строке нет слов.')
    ;
  end;
 
  Close(F);
 
  if j = 0 then
    Writeln('Файл пуст.')
  ;
 
  Readln;
end.

Leave a Comment

6 + 4 =