Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2010, 20:21   #1
Luuun
 
Регистрация: 28.01.2010
Сообщений: 3
По умолчанию Ошибка "выход за границы диапазона"

Смотрел похожие темы, пытался разобраться, но так и не понял в чем суть данной ошибки. Прога запускается, но при вводе матрицы вручную или рандомом сразу же выдает:
"Ошибка: 6 - выход за границы диапазона изменения индекса 1..5




Код:
program Task2;
uses crt;

const maxsize=5;
type matrix=array[1..maxsize,1..maxsize] of integer;
var flag:integer;
a:matrix;

procedure random_input(var matr:matrix);
var i,j,b:integer;
begin
for i:=1 to b do
for j:=1 to b do matr[i,j]:=random(10); //случайный ввод матрицы
end;


procedure manual_input(var matr:matrix);
var i,j,c:integer;
begin
for i:=1 to c do
begin
for j:=1 to c do read(matr[i,j]); //ручной ввод матрицы
writeln;
end;
end;



Сильно хочу понять свою проблему...

Последний раз редактировалось Luuun; 28.01.2010 в 20:31. Причина: Требования модератора
Luuun вне форума Ответить с цитированием
Старый 28.01.2010, 20:23   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

1) Нуждаетесь в помощи - читайте правила! Оформляйте код с помощью !
2) Когда код такой длинный ВСЕГДА(!) если хотите его кому-то показать ставьте комментарии! Хотя бы блоки отделяйте и подписывайте, зачем какой.
3) Идите трассировкой и смотрите, к кому обращение.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 28.01.2010, 20:46   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от Luuun Посмотреть сообщение
Код:
program Task2;
uses crt;
procedure random_input(var matr:matrix);
var i,j,b:integer;
begin
for i:=1 to b do
for j:=1 to b do matr[i,j]:=random(10); //случайный ввод матрицы
end;
Локальная переменная b не определена. Замени b на maxsize. При ручном вводе то же самое. c -> maxsize
eoln вне форума Ответить с цитированием
Старый 28.01.2010, 20:50   #4
Luuun
 
Регистрация: 28.01.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Локальная переменная b не определена. Замени b на maxsize. При ручном вводе то же самое. c -> maxsize
Дак изначально у меня все так и было, но возникла проблема в том, что maxsize - глобальная переменная, а моя прога должна использовать локальные/формальные.
У меня есть вариант рабочей программы, в которой используются глобальные переменные, но вот никак не домозгую, как их сделать локальными не нанося вред проге

Последний раз редактировалось Luuun; 28.01.2010 в 20:55.
Luuun вне форума Ответить с цитированием
Старый 28.01.2010, 21:02   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
procedure random_input(var matr:matrix; b: integer);
var i,j:integer;
begin
for i:=1 to b do
for j:=1 to b do matr[i,j]:=random(10); //случайный ввод матрицы
end;
Из тела программы вызывать так: random_input(a, любое_число_от_0_до_maxsize)
Код:
var flag:integer;
a:matrix;
надо объявить после процедур
eoln вне форума Ответить с цитированием
Старый 28.01.2010, 21:43   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Код:
procedure random_input(var matr:matrix);
var i,j,b:integer;
begin
for i:=1 to b do
for j:=1 to b do ...

procedure manual_input(var matr:matrix);
var i,j,c:integer;
begin
for i:=1 to c do
begin
for j:=1 to c do ...
В обеих процедурах b и c локальные переменные и, следовательно, не инициализированы (начальное значение их неопределенное . В процедурах они не принимают никакого значения.
Вопрос - зачем тогда вообще их применять?
Если верхний предел цикла for изменяется в программе где то в другом месте, то эти переменные должны быть или глобальными или (как в #5) передаваться в качестве параметра.
Смысл разъяснений понятен?
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 28.01.2010, 22:39   #7
Luuun
 
Регистрация: 28.01.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от DeKot Посмотреть сообщение
Код:
procedure random_input(var matr:matrix);
var i,j,b:integer;
begin
for i:=1 to b do
for j:=1 to b do ...

procedure manual_input(var matr:matrix);
var i,j,c:integer;
begin
for i:=1 to c do
begin
for j:=1 to c do ...
В обеих процедурах b и c локальные переменные и, следовательно, не инициализированы (начальное значение их неопределенное . В процедурах они не принимают никакого значения.
Вопрос - зачем тогда вообще их применять?
Если верхний предел цикла for изменяется в программе где то в другом месте, то эти переменные должны быть или глобальными или (как в #5) передаваться в качестве параметра.
Смысл разъяснений понятен?
Смысл то понятен, но дело в том, что в моей программе должны ис пользоваться не глобальные переменные, а локальные.
Пытаюсь обмозговать #5, но что-то так полностью и не пойму...
Мне нужно после каждой процедуры объявлять переменные?
Растолкуйте пожалуйста!
Luuun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Range("хххххх").Select и обрамление диапазона рамкой ShamanK Microsoft Office Excel 3 09.11.2009 15:52
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50