На вход программы подаются произвольные алфавитно-цифровые символы. Ввод этих символов заканчивается точкой. Требуется написать программу, которая будет печатать последовательность строчных английских букв ('a' 'b'... 'z') из входной последовательности и частот их повторения. Печать должна происходить в алфавитном порядке. Например, пусть на вход подаются следующие символы:
fhb5kbfыshfm.
В этом случае программа должна вывести
b2
f3
h2
k1
m1
s1
program C4;
uses crt;
var a:array['a'..'z'] of integer;
i:integer;
ch:char;
Begin
repeat
read(ch);
if ch in ['a'..'z'] then a[ch]:=a[ch]+1;
Until ch='.';
for i:=1 to 255 do
begin
if (chr(i) in ['a'..'z']) and (a[chr(i)]>0) then
writeln(chr(i),a[chr(i)]);
end;
End.


почему в задаете переменную ch, а в последнем условии пишете chr?
chr — функция языка Паскаль возвращающая символ по его коду.
Такое решение очень плохо читается, можно запутаться при многократном вызове функции chr, всё таки на экзамене не будет IDE и компилятора, лишь ручка и листочек.
Предлагаю такое:
program Task27;
var
c: char;
arr: array['a'..'z'] of integer;
begin
c := 'a';
while (c <> '.') do begin
read(c);
if (c in ['a'..'z']) then
arr[c] += 1;
end;
for c := 'a' to 'z' do begin
if (arr[c] <> 0) then
writeln(c, arr[c]);
end;
end.
Здесь также нет цикла в 255 итераций, не существенный выигрыш конечно, но это число (255) тоже может вылететь из головы. И "x += 1" можно заменить на "x := x + 1", хотя писать ручкой все эти символы не комильфо, легче запомнить "+=, *=, -=" и т.д., в принципе и запоминать нечего.