zadach297.PAS

{* Задача 297 *}

Unit ZADACH297;
Interface
Implementation
Begin
 writeln('Дан файл, содержащий текст, набранный заглавными русскими буквами. В нем содержатся также знаки препинания. Провести частотный анализ текста, т.е. указать (в процентах) сколько раз встречается та или иная буква.');
End.

Program zadach297;

Uses zadach297.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключение модулей *}
Const {* Предопределенные *}
  pr = [' ''.'', ''?''!'':''('')',#13];
Var {* В работе нам потребуются переменные: *}
  s     : char;
  file1 : text;
  b     : Array [1..32] Of char;
  c     : Array [1..32] Of integer;
  d     : Array [1..32] Of real;
  i     : integer;
  n     : integer;
Begin
  clrscr; {* Стираем всё с экрана *}
  assign(file1, 'c:file1.txt'); {* Связывание file1 с файлом 'c:file1.txt' *}
  reset(file1); {* Подготовка переменной file1 для чтения из файла *}
  n := 0;
  For i := 1 To 32 Do {* Переменная i увеличивается с 1 до 32 *}
    b[i] := Chr(Ord(127 + i));
  While Not(EOF(file1)) Do
  Begin
    read(file1, s);
    If Not(s In pr) Then
      n := n + 1;
    For i := 1 To 32 Do {* Увеличиваем i от 1 до 32 с шагом 1 *}
      If s = b[i] Then
        c[i] := c[i] + 1;
  End;
  close (file1); {* Закрытие файла *}
  For i := 1 To 32 Do {* Цикл для i => [1 .. 32] *}
    d[i] := 100 * c[i] / n;
  For i := 1 To 16 Do {* Переменная i увеличивается с 1 до 16 *}
  Begin
    write(b[i] : 2);
    writeln(d[i] : 8 : 2, '%');
  End;
  writeln('Press any key ...');
  readln; {* Приостановка программы. Ожидание Enter *}
  clrscr; {* Очищаем экран *}
  For i := 17 To 32 Do {* Увеличиваем i от 17 до 32 с шагом 1 *}
  Begin
    write(b[i] : 2);
    writeln(d[i] : 8 : 2, '%');
  End;
  readln
End.