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

Pascal ABC. Помогите исправить ошибку в программе.

var

s:string;

c,k:integer;

b:byte;

a:char;

begin

write('Type stroke: '); readln(s);

write('Type symbol: '); readln(a);

c:=length(s);

k:=0;

for b:=1 to c do begin

if s[b]=('a') then

k:=k+1;

end;

for b:=1 to c do begin

if s[b]=('a') then

delete(s,b,1); end;

writeln('symbol ', a, ' is written ', k, ' times.');

write(s);

end.

Строка с ошибкой: if s[b]=('a') then

delete(s,b,1); end;

Индекс выходит за границы массива. Заранее спасибо.
На данный момент 2 ошибки явных
s[b]='a' --> s[b]=a
Вы скорее всего хотите найти в строке не количество символов 'a', а символов, введенных с клавиатуры.

Но проблема с выходом за границы массива не в этом, delete(s,b,1) уменьшает количество символов в строке и рано или поздно вы обязательно выйдете за её пределы.
С этим бороться просто - удалять символы с конца строки к первому символу. В цикле for b = c downto 1.

ЗЫ. Достаточно одного этого цикла, так как k:=k+1 можно считать прямо в нём!
Саша Сашка
Саша Сашка
11 112
Лучший ответ
Во-первых, если я правильно понял, то а там должно быть без скобок и кавычек.
А во-вторых, смотри какая шняга получается.
Пусть ввели ааа и надо посчитать а.
Ты запустил цикл от 1 до 3
И после первого прогона цикла у тебя уже осталось аа
И 3-его элемента уже нет.
Вывод - цикл со счетчиком тут не нужен. Впрочем, цикл тут не нужен вообще, но это уже другой подход, вряд ли твоей училке понравится.
var s:string; i,n:integer; c:char;
begin
write('String: '); readln(s); write('Symbol: '); readln(c);
n:=0; for i:=1 to length(s) do n:=n+ord(s[i]=c);
writeln('Symbol ',c,' is written ',n,' times.');
end.
ЕТ
Егор Тунегов
96 640
без циклов тут нужно, без циклов
Читайте про функцию length, сколько она возвращает. Скорее всего ошибка буквальная - у вас на опеределенной итерации выходит за пределы массива. Возможно, на последней.
Еще можно протрассировать и посмотреть, что в s лежит.

Ну и бонусом можно 2 цикла свести в 1, но это уже нюансы)
Евгений Нуртдинов Без вот этого прога работает

for b:=1 to c do begin

if s[b]=('a') then

delete(s,b,1); end;

может в операции delete ошибка?