| 
| 
 | Вопрос # 4 565/ вопрос открыт / | 
 |  Здравствуйте! При компиляции ставит ошибку в массиве после буквы 'j' - array[1..j]. Помогите. Не знаю как исправить
 Приложение:Переключить в обычный режим implementationuses Unit1,Unit2,Unit3,Unit4,Unit5,Unit6,Unit7,Unit8;{$R *.dfm}vark(...)Hst: real;J0,j, i, x1(...)x36,y0(...)y36: integer;  
Ответ #1. Отвечает эксперт: DNK Здравствуйте, Емельянов Константин Игоревич!В качестве границ диапазона можно устанавливать только выражения, значения которых известно на этапе компиляции. Обычно это константа, а тут j - это переменная. Конечно можно поставить 36 вместо j, но дальше ошибка всплывет опять, из-за того что вместо "(x1, x2,... и т.д." должно быть константа. Программа пишется в корне неправильно.
 
|  | Ответ отправил: DNK (статус: Студент)Время отправки: 6 сентября 2010, 11:51
 Оценка за ответ: 4
 Комментарий к оценке: Причину указал верно |  Ответ #2. Отвечает эксперт: Вадим К Здравствуйте, Емельянов Константин Игоревич!при объявлении массива Вы используете переменную, а по синтаксису разрешено только константы или то, что может ими быть.
 То есть вот так можно
 const j = 100;
 var a:array[1..j] of integer;
 
 а вот если j переменная, то компилятор не знает, сколько места нужно выделить под массив и соответственно не может.
 Если же нужен массив с переменным размером, то следует использовать динамические массивы.
 Объявляются так
 a:array of integer;// размер как видим не указан.
 
 а потом, что бы выставить правильный размер, используем такое
 SetLength(a, 100); Вот тут и можно использовать и переменную, и выражение. Хоть через куб.
 Единственный момент - такие массивы индексируются с нуля, а не с единицы.
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 6 сентября 2010, 11:53
 Оценка за ответ: 5
 Комментарий к оценке: Всё понятно разложил |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 6 сентября 2010, 11:52; участников в обсуждении: 1. 
|   | M_a_G (статус: Посетитель), 6 сентября 2010, 11:52 [#1]:При описании массивов нужно четко указывать его границы. Для чего это нужно? Это небходимо делать для того, чтобы среда разработки могла выделить под него память. 
 Массивы, у которых границы указаны на этапе разработки называются статическими.
 А массивы, у которых границы задаются программно называются динамическими.
 
 Если Вы заранее не знаете какой величины будет массив, то выделяйте под него память программно, например, с помощью метода SetLength(). Справку по этому методу можно найти в самой среде разработки.
 
 Рекомендую прочитать статьи про динамические массивы, их много в Рунете.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |