|
|
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. 07.08.2014 - Breakpoint - точка остановки 07.08.2014 - Топ-10 самых популярных приложений в Facebook 18.11.2013 - Панель управления и персонализация системы. Windows Vista 18.11.2013 - Логические и физические диски. Windows Vista 18.11.2013 - Удаление файлов и папок 01.11.2013 - Программирование дисковых подсистем: возможности 31.10.2013 - Windows8 или Windows7? 31.10.2013 - Windows8, игры |
|
Non-commercial fansite
|