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

Регистрация
25 Мар 2013
Сообщения
72
Репутация
0
Спасибо
0
Монет
0
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=('a') then

k:=k+1;

end;

for b:=1 to c do begin

if s=('a') then

delete(s,b,1); end;

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

write(s);

end.

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

delete(s,b,1); end;

Индекс выходит за границы массива. Заранее спасибо.
 
Во-первых, если я правильно понял, то а там должно быть без скобок и кавычек. А во-вторых, смотри какая шняга получается. Пусть ввели ааа и надо посчитать а. Ты запустил цикл от 1 до 3 И после первого прогона цикла у тебя уже осталось аа И 3-его элемента уже нет. Вывод - цикл со счетчиком тут не нужен. Впрочем, цикл тут не нужен вообще, но это уже другой подход, вряд ли твоей училке понравится.
 
Читайте про функцию length, сколько она возвращает. Скорее всего ошибка буквальная - у вас на опеределенной итерации выходит за пределы массива. Возможно, на последней. Еще можно протрассировать и посмотреть, что в s лежит. Ну и бонусом можно 2 цикла свести в 1, но это уже нюансы)
 
Назад
Сверху