Другие языки программирования и технологии

Народ, оч рассчитываю на вашу помощь .../паскаль/

Нужно написать программу в турбо паскале . Посчитать все символы аА, Bb. и т.д. в общем сколько каких букв было введено. Вот мой вариант только для маленькой буквы 'a'....Вроде бы можно сделать как-то по другому через CASE....подскажите кто знает. Uses crt; Var suma, n, i: byte; x: string; Begin ClnScr; writeln('Vvedite stroku'); readln(x); n:=lenght(x); suma:=0; for i:=1 to n do if x = 'a' then suma:=suma+1; writeln('a=' , suma); readln; End.
Доброго времени суток.

Абсолютно верно, Сыроежка! И даже проще. Не надо ничего вычитать.

var A : array['A'..'z'] of Integer;

Обнуляем массив

FillChar(A, SizeOf(A), 0);

А затем

for i:=1 to Length(S) do Inc(A[S[ i ]]);

Вот и все. Теперь элемент массива содержит число символов, равных индексу массива. С таким объявлением будут различаться символы разных регистров. Если это не надо, то массив объявить так ['A'..'Z'] или ['a'..'z']

Вывести результат можно так

for ch:='A' to 'z' do
if A[ch] > 0 then WriteLn(ch, ' - ', A[ch]);

ch - переменная типа Char

Удачи!
Эмиль Хабибуллин
Эмиль Хабибуллин
59 613
Лучший ответ
Вы должны объявить массив из 26 букв (столько букв в латинском алфавите) . Я не знаю Паскаль, но навреное там можно объявить массив с любым диапозоном индексов, например от буквы 'A' до буквы 'Z'.
Затем, вы должны устроить цикл по длине введенного слова, которое вы храните в переменной 'x'. Внутри этого цикла выделять подстроку из 'x' (наверное есть такая функция в Паскале) , состоящую из одной буквы.
Я напишу это функцию, как я ее себе представляю (ее имя может быть другим в Паскале, но смысл ясен)

substr( x, i, 1 ) или str( x, i, 1 ), ( не знаю, как в Паскале называется подобная функция) , где i - это переменная цикла по длине строки.

Например, вы определеяете массив от 1 до 26 (по количеству букв) . Затем устраиваете цикл по длине введенной строки. Выделяете в цикле очередную ьукву из строки. Переводите ее, допустим, в верхней регистр. Вычитаете из нее значение "A" - 1 и получите индекс элемента вашего массива, который соответсвтует нужной букве, и увеличиваете его на единицу!
Примерно такой алгоритм!:)
Uses crt;
Var
suma_a,suma_b, n, i: byte;
x: string;
Begin
ClnScr;
writeln('Vvedite stroku');
readln(x);
n:=lenght(x);
suma_a:=0;
suma_b:=0;
for i:=1 to n do
case x of
'a': suma_a:=suma_a+1;
'b': suma_b:=suma_b+1;
end;

writeln('a=' , suma_a);
writeln('b=' , suma_b);

readln;
End.