program_pr6_20.PAS

{* График распределения согласных букв *}

Unit PROGRAM_PR6_20;
Interface
Implementation
Begin
 writeln('

Построить график распределения (гистограмму) согласных букв. Вывести на печать слова, которые начинаются с согласной буквы, которая чаще всего встречается.

Выбор алгоритма решения задачи

В данной работе необходимо ввести в файл предложение. Проверить какие в этом предложении начальные буквы. Нахождение той начальной буквы, которой больше всего в предложении.

Описание решения задачи

Данную задачу можно развязать так: необходимо в файл внести предложение, потом в программе объявить связь с этим предложением: assign(f,'c:pr6_20.txt'). В цикле: for pos := 1 to length(s) do проверить какие буквы является начальными. Подсчитать их количество и вывести на экран:

for pos := 1 to freqs[c_pos] do write('*');

'
);
End.

Program pr6_20;

Uses program_pr6_20.pas; {* Эту строку можно удалить *}
Uses crt; {* Вызов внешних функций *}
Type {* Типы переменных *}
  Letters = Set Of 'A'..'Z';
  TFreqs = Array ['A'..'Z'Of word;
Const {* Предопределенные *}
  Vowels : Letters = ['A''E''I''O''U''Y'];
Var {* Объявление переменных *}
  f        : Text;
  freqs    : TFreqs;
  max_freq : word;
  pos      : word;
  s        : String;
  c_pos    : char;
  freq_let : char;
Begin
  clrscr; { * Стираем всё с экрана * }
  assign(f, 'c:pr6_20.txt'); { * Привязка переменной f к файлу 'c:pr6_20.txt' * }
  reset(f); {* Открытие файла для чтения *}
  While Not eof(f) Do {* Проверяем, не достигнут ли конец файла *}
  Begin
    readln(f, s);
    For pos := 1 To length(s) Do {* pos => [1 .. length(s)] *}
      { * pos => [1 .. length(s)] * }
    If ((pos = 1) Or (s[pos - 1] = ' ')) And Not (upcase(s[pos]) In Vowels) Then
      inc(freqs[upcase(s[pos])]); { * Прибавим к freqs[upcase(s[pos])] единицу * }
  End;
  For c_pos := 'A' To 'Z' Do {* Увеличиваем c_pos от 'A' до 'Z' с шагом 1 *}
    If freqs[c_pos]  0 Then
    Begin
      write('"', c_pos, '" ');
      For pos := 1 To freqs[c_pos] Do {* Увеличиваем pos от 1 до freqs[c_pos] с шагом 1 *}
        write(' * ');
      writeln; { * Вывод пустой строки * }
    End;
  max_freq := freqs['A'];
  For c_pos := 'B' To 'Z' Do {* Увеличиваем c_pos от 'B' до 'Z' с шагом 1 *}
    If freqs[c_pos] > max_freq Then
    Begin
      max_freq := freqs[c_pos];
      freq_let := c_pos;
    End;
  close(f); {* Закрытие файл *}
  reset(f); {* Подготовка переменной f для чтения из файла *}
  writeln(#13#10, 'Words with first letter "', freq_let, '":',#13#10);
  While Not eof(f) Do {* Если в файле ещё есть данные, то продолжаем *}
  Begin
    readln(f, s);
    For pos := 1 To length(s) Do {* Увеличиваем pos от 1 до length(s) с шагом 1 *}
      { * pos => [1 .. length(s)] * }
    If ((pos = 1) Or (s[pos - 1] = ' ')) And (upcase(s[pos]) = freq_let) Then
    Begin
      write('"');
      While (s[pos]  ' 'And (pos  length(s)) Do
      Begin
        write(s[pos]);
        inc(pos); { * pos ++  * }
      End;
      writeln('"');
    End;
    
  End;
  readln; { * Ждем подтверждения пользователя * }
End.