Page 1 of 1

Объявление масивов в константах

Posted: 27.07.2009 17:20
by Fullmetal8ender
В паскале есть возможность объявить массив в константах.
Порою это очень удобно.
Выглядит это примерно так

Code: Select all

const
    List: array [1..5] of integer = (1,2,3,4,5);
Стулс ругаеться на двоеточие после названия массива и предлагает поставить туда равно.
Если так и сделать то ничего хорошего из этого не выходит.

Есть предложения по поводу?

Posted: 27.07.2009 17:35
by Vizit0r
есть, попробуй другое название, уж очень смахивает на что-то из системного :)


да и равно насколько я помню тоже неплохо бы...

Code: Select all

const
rb_Main = $4F77778F;
P.S. Да и не ставятся в константах размерности массивов, да и сам массив не уверен что обьявляется - не помню уже, потом гляну

Posted: 28.07.2009 7:16
by Fullmetal8ender
Ладно, подойдем к вопросу более конкретно.
Хочеться занести в масив ИД рунбуков.
Обьявлять массив в переменных и присваивать каждому значению определенное ИД долго и занимает много места.
А в константах можна просто перечислить значения массива, это удобно.
Вот как бы так сделать?

ПС в вашем примере я не увидел массива..а просто 1 константу
А тут нужен именно массив, что бы через цикл обращаться к разным его элементам.

Posted: 28.07.2009 7:28
by CFA
в константах не выйдет (может и выйдет, но я не смог), но можно инициализировать массив целиком, а не поэлементно - http://stealth.od.ua/forum/viewtopic.php?t=1075 последний пост

Posted: 28.07.2009 8:58
by Vizit0r
та это понятно...
var
vendor_types : array of word;


BEGIN
vendor_types:= [$0191, $0190, $0018, $0032,$85, $0001, $0002, $0011];

но это ж неинтересно :)

походу да, действительно нельзя в константах обьявлять массивы.
дэльфийская конструкция вида
remap : array [0..8] of Shortint=(7,6,5,0,-1,4,1,2,3);
не работает, как и писал автор.
что ж, это паскальскрипт, а не полноценный паскаль. придется вместо 1 строки писать 2 - обьявлять, а заполнять в программе второй строкой :)

Posted: 28.07.2009 9:51
by Fullmetal8ender
Ну, я так и предполагал.
Надеюсь с типом даных cardinal оно работает.
Проверю....

Posted: 28.07.2009 15:04
by Vizit0r
а какая разница?

Posted: 29.07.2009 14:58
by Fullmetal8ender
СКрипт компилируеться нормально, а вот при запуске выдает ошибку
5:17:55 [Kradun]: Compiling
15:17:55 [Kradun]: Compiled succesfully
15:17:55 [Kradun]: Could not call proc at 0.777
15:17:55 [Kradun]: Script n_m.sc stoped successfuly

кусочек кода тут

Code: Select all

var
i:integer;
b:array[1..6] of cardinal;

begin
b:=[$3197,$3194,$3195,$3193,$3198,$3192];

Если присваивать каждый элемент по отдельности то все работает.

Posted: 29.07.2009 21:44
by Vizit0r
потом гляну, чего ему не нравится

если забуду - напомни :)

Posted: 30.07.2009 5:14
by CFA
при таком присваивании

Code: Select all

b:=[$3197,$3194,$3195,$3193,$3198,$3192];
предыдуще объявление массива

Code: Select all

b:array[1..6] of cardinal;
теряет силу, такие массивы индексируются с нуля, те массив будет уже такой

Code: Select all

b:array[0..5] of cardinal;
приведенный код работает без ошибок, ошибка где то дальше - идет обращение к элементу массива выходящего за границы, вероятно что-то типа b[6] или в цикл от 1 до 6, а надо от 0 до 5

Posted: 30.07.2009 9:09
by Fullmetal8ender
Совсем забыл что надо начинать с нуля!
Пасибо, щас проверим

если все переписать вот так:

Code: Select all

var
i:integer;
b:array of cardinal;

begin
b:=[$3197,$3194,$3195,$3193,$3198,$3192];
то всё работает (при условии что в теле программы мы используем массив b[0..5]

Большое спасибо всем!

Posted: 30.07.2009 21:14
by Edred
Vizit0r wrote:дэльфийская конструкция вида
remap : array [0..8] of Shortint=(7,6,5,0,-1,4,1,2,3);
не работает, как и писал автор.
Добавлю (на всякий случай) подтверждение этого. Такой вопрос давным-давно подымался на форуме паскаль скрипта и разработчики ответили, что такая конструкция не поддерживается.

Единственный момент: я не слежу за новыми версиями паскаль скрипта. Миралекс, как я понимаю, тоже не следит. Vizitor, наверное, тоже не следит. Так что есть вероятность, что уже есть какая-нибудь более свежая версия паскаль скрипта и она подобное держит... Надо проверять.

Счас глянул - последняя версия паскаль скрипта - 3.0.39.777, от мая этого года. Визитор, глянь, плиз на этот момент, может стоит свежий паскаль скрипт прикрутить. Шарится это все тут: http://www.remobjects.com/ps.aspx

Где у меня ссылка на форум по паскаль скрипту... хз. Потом найду. Или у Миралекса спросить, он должен знать.

Posted: 30.07.2009 21:18
by Vizit0r
насколько я помню, в стелсе - февральский или что-то около того.
вряд ли там что-то сильно изменилось.

хотя в следующей версии прикручу, мало ли