PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Возврат процедурой любого количества значений.


Возврат процедурой любого количества значений.

Сообщений 1 страница 3 из 3

1

Добрый день.
У меня сомнения в корректности вот такого способа возврата процедурой любого количества значений.
Скорее всего я где-то этот способ подсмотрел, но где - не помню, хоть убей.
В отладчике всё работает прекрасно.
Хотелось бы узнать мнение специалистов, можно ли так делать?
Код с поддержкой unicode

Код:
;Решается задача выборочной совместной обработки данных из нескольких 
;массивов с большими (порядка тысячи) количествами элементов.
;В примере для простоты массивы имеют по пять элементов.
;Аргументы процедуры имеют вид: (0,2,3,4), (1,2,2,1) и так 
;далее.... согласно применяемого алгоритма обработки.
;


Global Dim SLOVO1.l(4)
Global Dim SLOVO2.l(4)
Global Dim SLOVO3.l(4)
Global Dim SLOVO4.l(4)

Debug "инициализация массивов:"


For i=0 To 4
  SLOVO1(i)=1
Next i

For i=0 To 4
  SLOVO2(i)=2
Next i

For i=0 To 4
  SLOVO3(i)=3
Next i

For i=0 To 4
  SLOVO4(i)=4
Next i

;вывод значений в отладчике:

Debug "SLOVO1"
For i=0 To 4
  Debug SLOVO1(i)
Next i

Debug "SLOVO2"
For i=0 To 4
  Debug SLOVO2(i)
Next i

Debug "SLOVO3"
For i=0 To 4
  Debug SLOVO3(i)
Next i

Debug "SLOVO4"
For i=0 To 4
  Debug SLOVO4(i)
Next i



Procedure Sklad(a,b,c,d)
  x=SLOVO1(a)
  y=SLOVO2(b)
  z=SLOVO3(c)
  k=SLOVO4(d)
  x=x+100
  y=x+1
  z=y+1
  k=z+1
  SLOVO1(a)=x
  SLOVO2(b)=y
  SLOVO3(c)=z
  SLOVO4(d)=k
EndProcedure


Debug "манипуляции с данными"
Sklad(1,2,3,4)


Debug "SLOVO1 - новые значения"
For i=0 To 4
  Debug SLOVO1(i)
Next i

Debug "SLOVO2 - новые значения"
For i=0 To 4
  Debug SLOVO2(i)
Next i

Debug "SLOVO3 - новые значения"
For i=0 To 4
  Debug SLOVO3(i)
Next i

Debug "SLOVO4 - новые значения"
For i=0 To 4
  Debug SLOVO4(i)
Next i

0

2

Opitim написал(а):

можно ли так делать

Можно. Но использование глобальных массивов все же нежелательно, если предполагается в программе использовать "чужой" код или наоборот, этот код использовать в других исходниках. Исключением может быть тот случай, когда код оформлен в виде модуля.
Так же глобальные массивы накладывают и другие ограничения, такие как невозможность использования процедуры с различными массивами и отсутствие поддержки многопоточности.
Избавится от этих недостатков, можно если отказаться от глобальных массивов и их (массивы) передавать в процедуру через ее аргументы.

Код:
Dim SLOVO1.l(4)
Dim SLOVO2.l(4)
Dim SLOVO3.l(4)
Dim SLOVO4.l(4)

Debug "инициализация массивов:"


For i=0 To 4
  SLOVO1(i)=1
Next i

For i=0 To 4
  SLOVO2(i)=2
Next i

For i=0 To 4
  SLOVO3(i)=3
Next i

For i=0 To 4
  SLOVO4(i)=4
Next i

;вывод значений в отладчике:

Debug "SLOVO1"
For i=0 To 4
  Debug SLOVO1(i)
Next i

Debug "SLOVO2"
For i=0 To 4
  Debug SLOVO2(i)
Next i

Debug "SLOVO3"
For i=0 To 4
  Debug SLOVO3(i)
Next i

Debug "SLOVO4"
For i=0 To 4
  Debug SLOVO4(i)
Next i



Procedure Sklad(a,b,c,d, Array SLOVO1.l(1), Array SLOVO2.l(1), Array SLOVO3.l(1), Array SLOVO4.l(1))
  x=SLOVO1(a)
  y=SLOVO2(b)
  z=SLOVO3(c)
  k=SLOVO4(d)
  x=x+100
  y=x+1
  z=y+1
  k=z+1
  SLOVO1(a)=x
  SLOVO2(b)=y
  SLOVO3(c)=z
  SLOVO4(d)=k
EndProcedure


Debug "манипуляции с данными"
Sklad(1,2,3,4, SLOVO1(), SLOVO2(), SLOVO3(), SLOVO4())


Debug "SLOVO1 - новые значения"
For i=0 To 4
  Debug SLOVO1(i)
Next i

Debug "SLOVO2 - новые значения"
For i=0 To 4
  Debug SLOVO2(i)
Next i

Debug "SLOVO3 - новые значения"
For i=0 To 4
  Debug SLOVO3(i)
Next i

Debug "SLOVO4 - новые значения"
For i=0 To 4
  Debug SLOVO4(i)
Next i

Или через структуру.

Код:
Structure Arr
  Array SLOVO1.l(4)
  Array SLOVO2.l(4)
  Array SLOVO3.l(4)
  Array SLOVO4.l(4)
EndStructure

Debug "инициализация массивов:"

x.Arr
  
For i=0 To 4
  x\SLOVO1(i)=1
Next i

For i=0 To 4
  x\SLOVO2(i)=2
Next i

For i=0 To 4
  x\SLOVO3(i)=3
Next i

For i=0 To 4
  x\SLOVO4(i)=4
Next i

;вывод значений в отладчике:

Debug "SLOVO1"
For i=0 To 4
  Debug x\SLOVO1(i)
Next i

Debug "SLOVO2"
For i=0 To 4
  Debug x\SLOVO2(i)
Next i

Debug "SLOVO3"
For i=0 To 4
  Debug x\SLOVO3(i)
Next i

Debug "SLOVO4"
For i=0 To 4
  Debug x\SLOVO4(i)
Next i



Procedure Sklad(*y.Arr,a,b,c,d)
  x=*y\SLOVO1(a)
  y=*y\SLOVO2(b)
  z=*y\SLOVO3(c)
  k=*y\SLOVO4(d)
  x=x+100
  y=x+1
  z=y+1
  k=z+1
  *y\SLOVO1(a)=x
  *y\SLOVO2(b)=y
  *y\SLOVO3(c)=z
  *y\SLOVO4(d)=k
EndProcedure


Debug "манипуляции с данными"
Sklad(@x,1,2,3,4)


Debug "SLOVO1 - новые значения"
For i=0 To 4
  Debug x\SLOVO1(i)
Next i

Debug "SLOVO2 - новые значения"
For i=0 To 4
  Debug x\SLOVO2(i)
Next i

Debug "SLOVO3 - новые значения"
For i=0 To 4
  Debug x\SLOVO3(i)
Next i

Debug "SLOVO4 - новые значения"
For i=0 To 4
  Debug x\SLOVO4(i)
Next i

+1

3

Большое спасибо, Петр!

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Возврат процедурой любого количества значений.