Задание
Построить график распределения (гистограмму) согласных букв. Вывести на печать слова, которые начинаются с согласной буквы, которая чаще всего встречается.
Выбор алгоритма решения задачи
В данной работе необходимо ввести в файл предложение. Проверить какие в этом предложении начальные буквы. Нахождение той начальной буквы, которой больше всего в предложении.
Описание решения задачи
Данную задачу можно развязать так: необходимо в файл внести предложение, потом в программе объявить связь с этим предложением: assign(f,'c:\pr6_20.txt'). В цикле: for pos := 1 to length(s) do проверить какие буквы является начальными. Подсчитать их количество и вывести на экран:
for pos := 1 to freqs[c_pos] do write('*');
Схема алгоритма решения задачи
Текст программы
program pr6_20;
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,pos : word;
s : string;
c_pos,freq_let : char;
begin
clrscr;
assign(f,'c:\pr6_20.txt');
reset(f);
while not eof(f) do
begin
readln(f,s);
for pos := 1 to length(s) do
if ((pos = 1) OR (s[pos-1] = ' ')) AND not (upcase(s[pos]) in Vowels) then
inc(freqs[upcase(s[pos])]);
end;
for c_pos := 'A' to 'Z' do
if freqs[c_pos] <> 0 then
begin
write('"',c_pos,'" ');
for pos := 1 to freqs[c_pos] do write('*');
writeln;
end;
max_freq := freqs['A'];
for c_pos := 'B' to 'Z' do
if freqs[c_pos] > max_freq then
begin
max_freq := freqs[c_pos];
freq_let := c_pos;
end;
close(f);
reset(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
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);
end;
writeln('"');
end;
end;
readln;
end.
Результати роботи програми
У файлі міститься така інформація:
asldf asldjf asldj lasdjf lasdj flasdf jasldfj lweroiasfl lasdjf