Text58. Дан текстовый файл. Подсчитать число появлений в нем каждой строчной (то есть маленькой) русской буквы и создать строковый файл, элементы которого имеют вид «<буква>-<число ее появлений>» (например, «а-25»). Буквы, отсутствующие в тексте, в файл не включать. Строки упорядочить по убыванию числа появлений букв, а при равном числе появлений — по возрастанию кодов букв.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
program Text58; var F_in,F_out: Text; Name,S:string; C:Char; Num:array[1..33] of integer; Max,i:integer; begin Write('File In name: '); Readln(Name); Assign(F_in,Name); Reset(F_in); Write('File Out name: '); Readln(Name); Assign(F_out,Name); for i:=1 to 33 do Num[i]:=0; While not eof(F_in) do begin While not eoln(F_in) do begin Read(F_in,C); if (ord(C) in [160..165]) then inc(Num[ord(C)-159]) else if (ord(C) = 241) then inc(Num[7]) else if (ord(C) in [166..175]) then inc(Num[ord(C)-158]) else if (ord(C) in [224..239]) then inc(Num[ord(C)-207]); end; Readln(F_in); end; Close(F_in); Rewrite(F_out); repeat Max:=0; for i:=1 to 33 do if ((Num[i]>Num[Max]) or (Max=0)) and (num[i]<>0) then Max:=i; if Max<>0 then begin str(Num[Max],S); if (Max<=6) then S:=chr(159+Max)+'-'+S else if Max=7 then S:=chr(241)+'-'+S else if Max<=17 then S:=chr(158+Max)+'-'+S else if Max<=33 then S:=chr(207+Max)+'-'+S; Writeln(F_out,S); Num[Max]:=0; end; Until (Max=0); Close(F_out); end. |
Другие задачи из раздела Text можно посмотреть здесь.
Комментарии:
Комментарии 1