Массив в TYPE

Предыдущая тема Следующая тема Перейти вниз

Массив в TYPE

Сообщение  Gena в Чт Мар 26, 2009 3:10 pm

Здравствуйте, подскажите пожалуста как устроить нечто подобное(код неправильный):
Type Object
n As integer
poligon(n) As Treuglnik3D
.....
End Type
То есть: у меня есть некий объёкт с N-ым количеством полигонов и его надо отрисовать на месте x,y,z
Подскажите как. Я предполагаю, что надо использовать указатели на начало полигонов объекта, но может есть более простое решение?

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 24
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  Gena в Чт Мар 26, 2009 4:20 pm

И ещё вопрос возник: почему нельзя делать так
For per(0)=0 To 127?

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 24
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  tux в Пт Мар 27, 2009 8:58 am

я так понимаю проблемы с динамическим массивом внутри типа, к сожалению так нельзя, тип обязательно должен быть фиксированного размера, поэтму надо делать либо фиксированный массив, либо использовать указатели. Как вариант, можно массив использовать отдельно от типа, и поотдельности обрабатывать и тип, и массив.
И ещё вопрос возник: почему нельзя делать так
For per(0)=0 To 127?
потомучто неразумно использовать элемент массива как счетчик, скажите зачем это Вам надо, и я скажу почему так делать ненадо.
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  Andrew в Пт Мар 27, 2009 5:20 pm

И ещё вопрос возник: почему нельзя делать так
For per(0)=0 To 127?

С первого взгляда может показаться что между per(0) и per - никакой разницы, только первое - это элемент массива, а второе переменная. С переменной такое возможно, а вот с массивом - нет, потому что элемент массива - это указатель на его содержимое. Это тоже самое что ты напишешь:
For 0=0 to 127
Переменная же
For i=0 to 127
Т.е. ты с каждым циклом приравниваешь переменную "i" числу - 0,1,2,3...127. Если поставить вместо переменной массив, то получится что ты число приравниваешь числу, а массив как я говорил является указателем на его содержимое.

Т.е. между x=3 и 3=x есть две большие разницы. Нельзя число приравнять числу, а вот переменную приравнять - можно, на то она и переменная.

Может ты имел ввиду:
Dim i(127) as Integer
For per(i)=0 to 127
;А здесь можно каждый элемент массива заполнять чем-то
per(i) = i
Next

Тогда массив будет содержать значения:
per(0)=0
per(1)=1
per(2)=2
............
per(127)=127

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  tux в Пт Мар 27, 2009 8:41 pm

С переменной такое возможно, а вот с массивом - нет, потому что элемент массива - это указатель на его содержимое.
несовсем так, элемент массива и переменная по сути являются одним и тем же типом, и зачастую могут без проблем взаимозаменяться, но вот допустим в подобном случае компилятор ругается, и это связанно скорее всего не с типом переменной, а с особенностями самого компилятора, просто, скорее всего, никому в голову не приходило подобным образом использовать цикл
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  Gena в Пн Мар 30, 2009 4:14 pm

Andrew, не точная аналогия: ведь я могу написать
a(1)=3 => 0 = 3
a(1)=5 => 3 = 5 Wink

Dim i(127) as Integer
For per(i)=0 to 127
;А здесь можно каждый элемент массива заполнять чем-то
per(i) = i
Next

Эээээээээээээээ.. Зачем такие сложности? Наверно это пример индусского шифрования китайской программы Wink (я не знаю как это может работать)
Код:

dim as integer i(127), per
for per = 0 to 127
i(per)=per
next
А если быть точным, то любая переменная - это указатель на определённую часть памяти)
Я согласен с tux что скорее всего - это особенность компилятора. Кто-нибуть, кто использует другие языки - посмотрите, если не трудно.
P.S.
Хаха
А такой пример работает:
Код:

dim as integer a(127), i
for i = 0 to 128
a(1)=i
next


Последний раз редактировалось: Gena (Вс Апр 12, 2009 9:26 am), всего редактировалось 2 раз(а)

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 24
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  Gena в Пн Мар 30, 2009 4:21 pm

А массив в Type, я сделал таким хитрым способом (с помощью ЖЛ):
Сначала (при загрузки карты) я сделал множество списков, хранящих в памяти видеокарты полигоны ( glNewLis(str(n)) ...<>...glEndList )
А потом при отрисовке я буду перемещать точку отсчёта ( glTranslateF ) и вызывать отрисовку списка ( glCallList(str(n)) ). Так-то! =)

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 24
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  Andrew в Вт Мар 31, 2009 7:03 pm

Dim i(127) as Integer
For per(i)=0 to 127
;А здесь можно каждый элемент массива заполнять чем-то
per(i) = i
Next

немного запутал всех и сам себя. ошибка, не 'For per(i)=0 to 127' a 'For i=0 to 127' и Dim PER(127), вот, теперь все правильно.

dim as integer a127), i
for i = 0 to 128
a(1)=i
next

А в чем особенность работы этого кода? Отсутствие открывающей скобки??? Изначально интересовала строчка 'for per(i) = 0 to 127'

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  Gena в Вс Апр 12, 2009 9:25 am

Поясню:
Этот код не работает
Код:

dim as integer a(50)
for a(1) = 0 to 50
...
next
Этот код работает
Код:

dim as integer a(50), i
for i = 0 to 50
a(1)=i
...
next
А результат должен быть один и тот же. Так-то вот.

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 24
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Массив в TYPE

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения