VisualBasic-таки vs. GamBAS v.1.0?
VisualBasic-таки vs. GamBAS v.1.0?
Гм, буду краток до беспредела: Gambas является единственной работоспособной и в целом вполне полноценной альтернативой VBA или VisualStudio-VB.NET. Всё бы замечателно, я так и вовсе просто в восторге от Gambas'а, но... создаётся откровенно неблагоприятное с точки зрения перспектив моего освоения Linux в качестве рабочего места программиста на BASIC'е (я вообще-то программы расчёта аппаратов хим. прома и различных "деталей машин" пишу, так что использование "безграничных возможностей" таких языков, как Kylix(Pascal) или C++ для меня как-то не очень принципиально) из-за одной досадной мелочи: Gambas не умеет создавать матрицы (т.е любые массивы с кол-вом размерностей >1) с динамическими границами. Т.е нельзя, к примеру, создавать в процедуре динамический массив с кол-вом столбцов и строк, задающимися в качестве входных параметров процедуры (пример примитвный и нежизненный, но мысль позволяет передать). Может, я чего не понимаю? Подскажите, как всё-таки обстоит ситуация с поддержкой динамических массивов в Gambas'е, если вы совершенно неожиданным образом сталкивались с subject'ом данного топика
Мыслите Масштабно!
-
- Заглянувший
- Сообщения: 29
- Зарегистрирован: 20 дек 2004, 19:53
- Откуда: Минск
- Контактная информация:
ещё в MSDN написано:
есть пример
DIM Matrix[3, 3] AS FLOAT
судя по всему это и есть твоя матрица.
А на http://www.binara.com/gambas-wiki/stati ... ation.htmlMSDN писал(а): To declare a single-dimensional array variable
In your declaration, add one pair of parentheses after the variable name, as in the following example:
Dim MySingleArray() As Integer
To declare a multidimensional array variable
In your declaration, add one pair of parentheses after the variable name and place commas inside the parentheses to separate the dimensions, as in the following example:
Dim My4DArray(,,,) As Short ' Four-dimensional array.
To declare a jagged array variable
In your declaration, add as many pairs of parentheses after the variable name as there are levels of nested arrays, as in the following example:
Dim MyJaggedArray()()() As Byte ' Array of arrays of Byte arrays.
есть пример
DIM Matrix[3, 3] AS FLOAT
судя по всему это и есть твоя матрица.
В том-то и дело, что размерность матрицы можно задавать только статически, а любая универсальная процедура, работающая с данными, размер которых заранее неизвестен (обработка текстовых строк в алгоритмах поиска образца, к примеру), должна создавать массив динамически (с размерностью, заданной переменными величинами)
Мыслите Масштабно!
Ну во первых я вообще старюсь избегать применения ООП (проектирование класса отнимает порой больше времени, нежели написани основного кода), а во-вторых я в принципе не понимаю при чём тут ООП - то, что Вы предлагаете реализуется написанием подпрограммы (что-нибудь типа SUB doRetMatrixEl(Vector AS Array[]) ) Меня ведь интересует другое - можно ли всё-таки на Gambas'е создавать переменные-массивы с плавающими границами (как в QuickBASIC'е, к примеру) или нельзя. Если всё-таки нельзя, то я и мучаться, совершая всякие обходные манёвры не буду и продолжу писать код исключительно под DOS и Windows.
Мыслите Масштабно!
Короче, покопался я в этой програмке, сразу приступив к массивам, и вот что я придумал.
---------------------------------------------------
# Gambas Form File 1.0
{ Form1 Form
Move(341,114,400,400)
Text = ("")
Border = Window.Fixed
{ Button1 Button
Move(104,112,96,40)
Text = ("Button1")
}
}
---------------------------------------------------
' Gambas module file
PRIVATE matrix[5,5] AS Integer
PUBLIC SUB mass(znach AS Integer, i AS Integer, j AS Integer )
matrix[i,j]=znach
END
PUBLIC FUNCTION pechat(i AS Integer, j AS Integer) AS Integer
form1.znach=matrix[i,j]
END
---------------------------------------------------
' Gambas class file
PUBLIC znach AS Integer
PUBLIC SUB Button1_Click()
DIM I AS Integer
DIM J AS Integer
FOR I=0 TO 4
FOR J=0 TO 4
znach=Int(Rnd*10)+5
module1.mass(znach,I,J)
NEXT
NEXT
FOR I=0 TO 4
FOR J=0 TO 4
module1.pechat(I,J)
PRINT znach;
NEXT
PRINT
NEXT
END
----------------------------------------------------
Если в VB работал, то разберешся, но это не лучшый вариант, я так думаю, не могли они убрать такую нежную штуку.
пользуйся на здаровье, придумоешь иное напиши на мыло.
---------------------------------------------------
# Gambas Form File 1.0
{ Form1 Form
Move(341,114,400,400)
Text = ("")
Border = Window.Fixed
{ Button1 Button
Move(104,112,96,40)
Text = ("Button1")
}
}
---------------------------------------------------
' Gambas module file
PRIVATE matrix[5,5] AS Integer
PUBLIC SUB mass(znach AS Integer, i AS Integer, j AS Integer )
matrix[i,j]=znach
END
PUBLIC FUNCTION pechat(i AS Integer, j AS Integer) AS Integer
form1.znach=matrix[i,j]
END
---------------------------------------------------
' Gambas class file
PUBLIC znach AS Integer
PUBLIC SUB Button1_Click()
DIM I AS Integer
DIM J AS Integer
FOR I=0 TO 4
FOR J=0 TO 4
znach=Int(Rnd*10)+5
module1.mass(znach,I,J)
NEXT
NEXT
FOR I=0 TO 4
FOR J=0 TO 4
module1.pechat(I,J)
PRINT znach;
NEXT
NEXT
END
----------------------------------------------------
Если в VB работал, то разберешся, но это не лучшый вариант, я так думаю, не могли они убрать такую нежную штуку.
пользуйся на здаровье, придумоешь иное напиши на мыло.