Задача №7.
На вход программе
подается текст на английском языке, заканчивающийся точкой (другие символы «.»
в тексте отсутствуют). Требуется написать программу, которая будет определять и
выводить на экран английскую букву,
встречающуюся
в этом тексте чаще всего, и количество там таких букв. Строчные и прописные
буквы при этом считаются неразличимыми. Если искомых букв несколько, то
программа должна выводить на экран первую из них по алфавиту.
Например, пусть файл содержит следующую запись: It is not a simple task. Yes!
Чаще всего здесь встречаются буквы I, S и Т (слово Yes в подсчете не учитывается, так как расположено после точки). Следовательно, в данном случае программа должна вывести два символа, разделенных пробелом: I 3.
Решение задачи №7.
var
ch:char; {символьная переменная поможет нам считать символы с клавиатуры}
st:string; {строковая переменная примет значение всего текста до точки}
i,n,max:integer; {целочисленные переменные i-индекс, n-будет считать количество символов в тексте до точки, max-поможет определить какая буква встречается чаще всего}
a: array [97..122] of integer; {целочисленный массив с индексами от 97 до 122 (промежуток величины кода строчных английских букв, смотрите алгоритм решения задачи №5), поможет определить какие буквы чаще всего встречаются в тексте}
begin
for i:=97 to 122 do {задаем цикл для обнуления массива a}
a[i]:=0; {обнулили массив a}
n:=0; {начальное значение n равно 0}
repeat {задаем цикл для считывания символов до точки}
begin
read(ch); {считываем символ в символьную переменную ch}
st:=st+ch; {строковая переменная st увеличивает свое значение на величину символьной переменной ch (на величину считанного символа), по окончании цикла строковая переменная будет иметь значение всего текста до точки}
n:=n+1; {считаем каждый символ}
end;
until ch='.'; {если следующий символ "Точка", выходим из цикла}
for i:=1 to n do {так как нам не важно ПРОПИСНЫЕ или строчные буквы, задаем цикл в котором ПРОПИСНЫЕ английские буквы станут строчными}
begin
if (ord(st[i])>64)and(ord(st[i])<91) then {если текущий символ - это ПРОПИСНАЯ буква (код ПРОПИСНОЙ буквы лежит в интервале от 65 до 90), то ..}
st[i]:=char(ord(st[i])+32); {.. то к коду символа прибавляем 32 (ord(st[i])+32), а получившееся значение кода преобразуем в символ}
if (ord(st[i])>96)and(ord(st[i])<123) then {если текущий символ - не ПРОПИСНАЯ буква, то проверяем строчная ли это буква(код строчной буквы лежит в интервале от 97 до 122), а не пробел или другой символ}
a[ord(st[i])]:=a[ord(st[i])]+1; {если текущий символ строчная буква, то массив a с индексом равным значению кода символа (a[ord(st(i)]), увеличивает свое значение на единицу, мы подсчитываем сколько раз встречается в тексте каждый символ}
end; {мы подсчитали сколько раз в тексте встречается каждый символ (каждая буква), осталось только узнать какие буквы чаще всего встречаются, и вывести на экран первую по алфавиту из них}
max:=0; {начальное значение переменной max равно 0}
for i:=97 to 122 do {в данном цикле определим какие буквы чаще всего встречаются в тексте (самые популярные)}
if a[i]>max then max:=a[i]; {задаем условие если значение элемента массива больше значения переменной max, то переменная max принимает значение элемента массива, после прохода цикла переменная max покажет нам сколько раз в тексте можно встретить самые популярные буквы, нам осталось вывести стоящую первую в алфавите популярную букву}
i:=96; {переменная i будет иметь значение кода первой строчной буквы алфавита - а минус единица}
repeat {для этого задаем цикл который будет просматривать все строчные буквы с начала алфавита}
i:=i+1; {каждый проход цикла переменная i увеличивает свое значение на 1, мы переходим к следующей букве}
if a[i]=max then writeln(char(i),' ',max); {как только элемент массива a[i] будет равен переменной max, мы выводим на экран значение нужной нам по задаче буквы и количество повторений в тексте, и...}
until a[i]=max; {.. и тут же выходим из цикла, задача решена}
end.
Алгоритм решения задачи
- Считываем символы текста до точки, переменная типа строка принимает значение всего текста (далее к данной переменной будем обращаться как к массиву символов (st[i])), также считаем количество символов до точки.
- Далее переводим все ПРОПИСНЫЕ буквы в строчные и подсчитываем сколько каждая буква встречалась в тексте.
- Далее определяем сколько раз в тексте встречаются самые популярные буквы.
- В конце проходим весь алфавит строчных букв с начала, проверяем является ли буква популярной, как только буква входит в состав популярных, выводим результат на экран, и тут же выходим из цикла.