В чем ошибка? Пишет "Индекс находится вне границ массива" вроде 17 сторокаprogram...

0 голосов
107 просмотров

В чем ошибка? Пишет "Индекс находится вне границ массива" вроде 17 сторока
program test;
uses crt;
var s, s1:string;
n, f, i, j, len:integer;
begin
clrscr;
writeln('введите предложение');
readln(s);
s:=' '+s;
writeln('ведите приставку');
readln(s1);
len:=length(s1);
n:=0;
f:=0; while j<=length(s) do <br> begin
if s[j]=' ' then
begin
for i:=1 to len do
if s[j+i]<>s1[i] then f:=1;
if f=0 then begin n:=n+1; j:=j+len; end
else j:=j+1; end;
end;
writeln('n=',n);
readln;
end.

В выделенной строке выдает ошибку


Информатика (493 баллов) | 107 просмотров
0

а что вводите?

Дано ответов: 2
0 голосов
Правильный ответ

Смотрите, в этом цикле:
while j<=length(s) do  </strong> 
J может быть равно длине строки. А внутри цикла есть вот это:
  if s[j+i]<>s1[i] then f:=1;
То есть если s[J] - последний символ, то на этой строчке пойдет обращение уже к несуществующему индексу массива.

(4.6k баллов)
0

if s[j+i], если предпоследний, а I = 2? учитывая сообщение об ошибке, то она именно здесь должна быть.

0

я тупой =). зависает сейчас или что? и что он вывести должен?

0

должен вывести n-число слов начинающихся с какой-либо приставки. Когда вводишь предложение и приставку ничего не происходит, просто так и висит, при нажатии ентера выходит из программы

0

вечный цикл

0

надо опустить else j := j + 1 На строчку ниже

0

благодарю

0

и else убрать - там же в любом случае надо увеличить

0

f := 0 внести в цикл while и вроде работает

0

спасибо огромное, все работает х)

0 голосов

Задание не много не понятно, где что стоит, лучше сфотай

(14 баллов)