Страница 1 из 1
					
				Динамическое создание массива
				Добавлено: 19 Декабрь 2005, 17:17
				 ru_alex
				Привет всем!
Как динамически создать массив? Вроде где-то инфа проходила, но не нашел...
			 
			
					
				
				Добавлено: 20 Декабрь 2005, 10:48
				 Andrew Listiev
				Если вы имеете в виду создание массива через оператор New, то увы, никак. Можно немного схитрить и использовать дополнительную процедуру: 
CreateArray Procedure(Long ArrayLength)
MyArray       String(16), Dim(ArrayLength)
 Code
!
! Далее стандартно работаем с массивом
!
Я давно отказался от использования массивов, заменив подход использованием очереди:
MyArray Queue
Element   Long
             End
			 
			
					
				
				Добавлено: 21 Декабрь 2005, 21:20
				 Mit
				Всем привет!
Эх, раньше было демократичней, мог войти в качестве Гостя,
а сейчас нужно регистрироваться!
Простите, год отключен от Клариона, может ляпну что-либо невпопад.
В свое время подумал, что NEW выделяет память каким-нибудь
сишным malloc и ему до лампочки, какой объект ему подсунуть.
Подсунул STRING и ,вроде, получилось. Но лучше CSTRING 
с учетом нуль-терминатора. Помнится в 32-битных приложениях
есть ограничения на размер STRING, а на CSRTING - нет.   
Вот примеры из архива (кажется, я их уже отправлял на форум).
С уважением, 
Владимир Митраков
 
      PROGRAM
!*********************************************************************
! Пример создания 2-мерного динамического массива
! Владимир Митраков
!*********************************************************************
       MAP
         GetMatr(LONG I, LONG J, LONG NN),REAL
         PutMatr(LONG I, LONG J, LONG NN, REAL U)
       END !map
DynRef     &STRING
Arr         REAL,DIM(1),OVER(DynRef)
sz          LONG
rr          REAL
     CODE
     M# = 3000  !Кол-во строк
     N# = 4000  !Кол-во столбцов
     sz= M# * N#
     DynRef &= NEW(STRING((sz * 8)))
     loop i#=1 to M#
       loop j#=1 to N#
         ri$ = i#+0.1
         rj$ = j#+0.1
         rr = ri$+rj$
         PutMatr(i#,j#,N#,rr)
       end
     end
     R$ = GetMatr(3,4,N#)
     message(R$)
     DISPOSE(DynRef)
GetMatr     PROCEDURE(LONG I, LONG J, LONG NN)
indx    long
     code
     indx = (I-1)*NN + J
     return(Arr[indx])
PutMatr     PROCEDURE(LONG I, LONG J, LONG NN, REAL U)
indx    long
     code
     indx = (I-1)*NN + J
     Arr[indx]=U
!========================================================
      PROGRAM
!*********************************************************************
!Пример аналога массивам структур в С
!Динамическое выделение памяти
!Владимир Митраков
!*********************************************************************
       MAP
       END !map
!DynRef     &STRING
DynRef     &CSTRING
CELL       GROUP,DIM(1),OVER(DynRef)
x            real
y            REAL
z            REAL
osv          REAL
iterF        REAL
             END
    CODE
     N# = 3  !Кол-во элементов
     DynRef &= NEW(CSTRING((N# * SIZE(CELL)+1))) !Выделяем память
     loop i#=1 to N#
       CELL[i#].x = i#+0.1
       CELL[i#].y = i#+0.2
       CELL[i#].z = i#+0.3
       CELL[i#].osv = i#+0.4
       CELL[i#].iterF = i#+0.5
    end
      k# = 3
     message(CELL[k#].x &'   '& CELL[k#].y&'   '&CELL[k#].z&'   '&CELL[k#].osv&'   '&CELL[k#].iterF)
     DISPOSE(DynRef)
			 
			
					
				
				Добавлено: 22 Декабрь 2005, 2:02
				 Admin
				Проблема в том что в качестве гостя сюда мог заходить не только ты но и куча СПАМЕРОВ :-\
Так что селяви...
			 
			
					
				
				Добавлено: 22 Декабрь 2005, 14:46
				 ru_alex
				
DynRef &CSTRING 
CELL GROUP,DIM(1),OVER(DynRef) 
супер, особенно dim(1)  

 
			
					
				
				Добавлено: 22 Декабрь 2005, 18:11
				 Mit
				To Admin
  Все понял...Согласен...
To Александр
  Рад, если чем-то помог
С уважением, Mit