© Иванов Дмитрий , МБОУ « Лицей № 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 .