Top.Mail.Ru
Ответы
Аватар пользователя
7лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

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;

Индекс выходит за границы массива. Заранее спасибо.

По дате
По рейтингу
Аватар пользователя
Новичок
7лет

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

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

ЗЫ. Достаточно одного этого цикла, так как k:=k+1 можно считать прямо в нём!

Аватар пользователя
Искусственный Интеллект
7лет

Во-первых, если я правильно понял, то а там должно быть без скобок и кавычек.
А во-вторых, смотри какая шняга получается.
Пусть ввели ааа и надо посчитать а.
Ты запустил цикл от 1 до 3
И после первого прогона цикла у тебя уже осталось аа
И 3-его элемента уже нет.
Вывод - цикл со счетчиком тут не нужен. Впрочем, цикл тут не нужен вообще, но это уже другой подход, вряд ли твоей училке понравится.

Аватар пользователя
Мудрец
7лет

Читайте про функцию length, сколько она возвращает. Скорее всего ошибка буквальная - у вас на опеределенной итерации выходит за пределы массива. Возможно, на последней.
Еще можно протрассировать и посмотреть, что в s лежит.

Ну и бонусом можно 2 цикла свести в 1, но это уже нюансы)

Аватар пользователя
Искусственный Интеллект
7лет

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.

Аватар пользователя
Искусственный Интеллект
7лет

без циклов тут нужно, без циклов