© Иванов Дмитрий, МБОУ « Лицей № 2 », г. Нижневартовск
Задача № 10
Вам необходимо написать программу анализа текста. На вход программе подаются строки, содержащие английские слова. В одной строке может быть произвольное количество слов. Все слова записаны строчными( маленькими) английскими буквами. Между словами в строке может быть один или больше пробелов, возможны пробелы в начале и в конце строки. Других символов, кроме строчных английских букв и пробелов, в строках нет. Длина каждой строки не превышает 200 символов. Количество строк неизвестно, общее количество слов не более одного миллиона. Конец ввода обозначается строкой, содержащей единственный символ «*». Напишите эффективную, в том числе по памяти, программу, которая будет определять количество слов, начинающихся на каждую букву английского алфавита, и выводить эти количества и соответствующие им буквы в порядке убывания. Если количество слов, начинающихся на какие-то буквы, совпадает, эти буквы следует выводить в алфавитном порядке. Если на какую-то букву слов нет, выводить эту букву не надо. Размер памяти, которую использует Ваша программа, не должен зависеть от размера исходного списка. Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи и укажите используемый язык программирования и его версию. Пример входных данных: one two three four five a quick brown fox
* Пример выходных данных для приведенного выше примера входных данных: f 3 t 2 а 1 b 1 о 1 q 1 Примечание. Английский алфавит совпадает с латинским и содержит 26 букв от а до z: Abcdefghijklmnopqrstuvwxyz
Решение: program analiz; uses crt; var a: array [ 97.. 123 ] of integer; z: string; i, max, k: integer; da: boolean; begin max:= 0; repeat readln( z); da:= true; for i:= 1 to length( z) do begin if( ord( z [ i ])> 96) and( ord( z [ i ])< 124) and da then begin a [ ord( z [ i ])]:= a [ ord( z [ i ])]+ 1; da:= false; end; if z [ i ]=' ' then май, 2015 г.
da:= true; end; until z ='*'; for i:= 97 to 123 do if a [ i ]> max then max:= a [ i ]; for i:= max downto 1 do begin for k:= 97 to 123 do if a [ k ]= max then writeln( char( k),' ', max); max:= max-1; end; end.