Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 27.09.2018, 06:03   #1
Kukla19
Пользователь
 
Регистрация: 23.09.2018
Сообщений: 16
Репутация: 10
По умолчанию Индекс находится вне границ массива.

Код:

uses crt, graphabc;

var
n,dx,dy,nmax,i: integer;
xo, yo: array[1..10] of integer;

procedure vrag_init;
begin
n:=1;
repeat

dx:=random(1,10);
dy:=random(1,10);
for var i:=1 to n do
xo[i]:=50*dx;
yo[i]:=50*dy; // тут ошибка
rectangle(xo[i],yo[i],xo[i]+50,yo[i]+50);

n:=n+1;
nmax:=random(3,6);
until n>nmax;
end;


begin
vrag_init;
end.

Программа выполняется, но в помеченной комментарием строке происходит ошибка. "Индекс находится вне границ массива".

Почему? Диапазон массива 1..10. Ведь индекс в цикле равен одному.
Kukla19 вне форума   Ответить с цитированием
Старый 27.09.2018, 07:16   #2
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,021
Репутация: 675
По умолчанию

Тут забавное сочетание ошибок
1) Вы забыли взять в операторные скобки тело цикла for. В результате тело цикла состоит из одного оператора, а строчка 16, на которой происходит ошибка, в цикл не попадает
2) Вы объявили переменную цикла прямо в заголовке, используя var i. Но ещё одна переменная i объявлена на уровне программы.

В результате в строчках 15 и 16 используются разные переменные, хоть обе и называются i. Та, что в цикле, изменяется от 1 до N, а вот другая не инициализирована и остаётся равной 0, что и вызывает ошибку
Black Fregat вне форума   Ответить с цитированием
Старый 27.09.2018, 07:25   #3
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 32
Репутация: 51
По умолчанию

Цитата:
Сообщение от Kukla19 Посмотреть сообщение
Почему?
Потому, что переменная i в этой строке глобальная, не инициализированная, поэтому равна 0
CMY_3 вне форума   Ответить с цитированием
Старый 27.09.2018, 07:48   #4
Kukla19
Пользователь
 
Регистрация: 23.09.2018
Сообщений: 16
Репутация: 10
По умолчанию

Всем спасибо большое!
Kukla19 вне форума   Ответить с цитированием
Старый 27.09.2018, 10:21   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,354
Репутация: 5274
По умолчанию

и не понимаю, зачем в цикле repeat until значение переменной nmax переопределять в каждой итерации. Не разумнее это сделать один раз ДО цикла?
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 27.09.2018, 13:39   #6
Kukla19
Пользователь
 
Регистрация: 23.09.2018
Сообщений: 16
Репутация: 10
По умолчанию

Да точно, так и сделал. Это по неопытности делаю такие ошибки. Мне сейчас хоть как сделать - лишь бы работало.
Kukla19 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] Не компилирует программу. пишет,что Индекс находится вне границ массива Baldr Помощь студентам 2 02.10.2017 18:41
Индекс находится вне границ массива. stopping Помощь студентам 3 04.11.2016 22:34
индекс находится вне границ массива (паскаль) max75025 Помощь студентам 5 20.12.2014 09:06
Индекс находился вне границ массива. Maks3 C# (си шарп) 3 23.11.2014 22:54
Индекс находился вне границ массива. banan4ik Помощь студентам 1 30.05.2013 02:25


02:36.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru