Ошибка времени выполнения: Индекс находился вне границ массива. Inc(i)
Inc(i) выдаёт мне ошибку о выходе за границы массива, не понимаю что сделать надо
TextGen.pas(23) : Ошибка времени выполнения: Индекс находился вне границ массива.
program TextGenerator;
const
max_words = 100;
type
WordArray = array[1..max_words] of string;
function ReadWordsFromFile(filename: string): WordArray;
var
fileHandle: Text;
word: string;
words: WordArray;
i: integer;
begin
assign(fileHandle, filename);
reset(fileHandle);
i := 1;
while not Eof(fileHandle) do
begin
read(fileHandle, word);
words[i] := word;
Inc(i); // В этом месте паскаль ругается
end;
close(fileHandle);
ReadWordsFromFile := words;
end;
procedure PrintWords(words: WordArray);
var
i: integer;
begin
for i := 1 to max_words do
begin
if words[i] <> '' then
writeln(words[i])
else
break;
end;
end;
procedure FindFollowingWords(words: WordArray; searchWord: string);
var
i: integer;
begin
for i := 1 to max_words - 1 do
begin
if words[i] = searchWord then
writeln(words[i + 1]);
end;
end;
procedure CreateWordPairs(words: WordArray);
var
i: integer;
begin
for i := 1 to max_words - 1 do
begin
if words[i] <> '' then
writeln(words[i], ' (', words[i + 1], ')')
else
break;
end;
end;
{ Main }
var
words: WordArray;
filename: string;
searchWord: string;
begin
filename := 'Garri.txt';
words := ReadWordsFromFile(filename);
writeln('Слова из файла: ');
printWords(words);
writeln('Введите слово для поиска следующих слов: ');
readln(searchWord);
FindFollowingWords(words, searchWord);
writeln('Пары слов со следующим словом: ');
CreateWordPairs(words);
end.
Файл Garri.txt это тупо книга с Гарри Поттером, откуда слова вытягиваются
Ответы (1 шт):
Автор решения: Arik
→ Ссылка
Проблема в том, что размер массива равен 100, а книга должна вмещать куда больше слов, чем 100. Так, что когда переменная "i" становится равной 101 и в массив идет попытка вставит очередное слово по индексу 101 (words[101] := word;), то это и вызывает ошибку выхода за пределы массива.