Страница 1 из 1

VisualBasic-таки vs. GamBAS v.1.0?

Добавлено: 14 янв 2005, 19:11
drvtiny
Гм, буду краток до беспредела: Gambas является единственной работоспособной и в целом вполне полноценной альтернативой VBA или VisualStudio-VB.NET. Всё бы замечателно, я так и вовсе просто в восторге от Gambas'а, но... создаётся откровенно неблагоприятное с точки зрения перспектив моего освоения Linux в качестве рабочего места программиста на BASIC'е (я вообще-то программы расчёта аппаратов хим. прома и различных "деталей машин" пишу, так что использование "безграничных возможностей" таких языков, как Kylix(Pascal) или C++ для меня как-то не очень принципиально) из-за одной досадной мелочи: Gambas не умеет создавать матрицы (т.е любые массивы с кол-вом размерностей >1) с динамическими границами. Т.е нельзя, к примеру, создавать в процедуре динамический массив с кол-вом столбцов и строк, задающимися в качестве входных параметров процедуры (пример примитвный и нежизненный, но мысль позволяет передать). Может, я чего не понимаю? Подскажите, как всё-таки обстоит ситуация с поддержкой динамических массивов в Gambas'е, если вы совершенно неожиданным образом сталкивались с subject'ом данного топика

Добавлено: 14 янв 2005, 20:05
[CWeR]
а массив указателей там тоже создавать нельзя?
Может лучше взять что-нибудь более вменяемое?
С хотябы или Перл какой.
Или надо много работать с гуи? В этом случае вроде tcl/tk советуют.

Добавлено: 14 янв 2005, 20:19
[CWeR]
ещё в MSDN написано:
MSDN писал(а): 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.
А на http://www.binara.com/gambas-wiki/stati ... ation.html
есть пример
DIM Matrix[3, 3] AS FLOAT
судя по всему это и есть твоя матрица.

Добавлено: 15 янв 2005, 13:40
drvtiny
В том-то и дело, что размерность матрицы можно задавать только статически, а любая универсальная процедура, работающая с данными, размер которых заранее неизвестен (обработка текстовых строк в алгоритмах поиска образца, к примеру), должна создавать массив динамически (с размерностью, заданной переменными величинами)

Добавлено: 17 янв 2005, 18:55
[CWeR]
drvtiny, я в общем совсем не спец в области ВБ, но могу посоветовать создать класс, который будет тебе выдавать по двум индексам элемент матрицы (ну и сохранять их). А хранить их можно в однмерном динамическом массиве. Вполне стандартная методика, думаю на ВБ она тоже реализуема.

Добавлено: 18 янв 2005, 14:56
drvtiny
Да, и если можно, подскажите, где там в Mozille FireFox настраивается кодировка отправляемых сообщений (это я из моей любимой Oper'ы пишу) Предыдущее сообщение очевидно по каким-то загадочным причинам в cp1251 ушло...

Добавлено: 18 янв 2005, 15:51
[CWeR]
понятия "класс" и "объект" используются для сокрытия реализации и объединения данных и кода, и если этим за тебя занимается язык, то это не значит что ты ими не пользуешься :)

Добавлено: 20 янв 2005, 17:05
drvtiny
Ну во первых я вообще старюсь избегать применения ООП (проектирование класса отнимает порой больше времени, нежели написани основного кода), а во-вторых я в принципе не понимаю при чём тут ООП - то, что Вы предлагаете реализуется написанием подпрограммы (что-нибудь типа SUB doRetMatrixEl(Vector AS Array[]) ) Меня ведь интересует другое - можно ли всё-таки на Gambas'е создавать переменные-массивы с плавающими границами (как в QuickBASIC'е, к примеру) или нельзя. Если всё-таки нельзя, то я и мучаться, совершая всякие обходные манёвры не буду и продолжу писать код исключительно под DOS и Windows.

Добавлено: 20 янв 2005, 18:15
[CWeR]
я не использовал gambas и мне негде проверить, но если он совместим с VB на столько, на скольок обещает - до ответ Да. Многомерные динамические массивы там создавать можно.
А наличие класса ещё не означает наличие ООП.

Добавлено: 26 фев 2005, 21:26
Anonymous
drvtiny, попробуй создать модуль, а в нем
public matrix(1 to 5,1 to 5) as integer
или
private /-/-/-/-/-/-/

кстати где можно достать gambas?

Добавлено: 27 фев 2005, 00:43
Pasha
У нас по силлабусу по компьютингу в колледже изучается VB :ass: (хотя я всё равно на С пишу... :P)

В ВижуалВасике это делается оператором ReDim - смотреть в его сторону

Добавлено: 06 мар 2005, 13:14
Anonymous
Короче, покопался я в этой програмке, сразу приступив к массивам, и вот что я придумал.
---------------------------------------------------
# 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 работал, то разберешся, но это не лучшый вариант, я так думаю, не могли они убрать такую нежную штуку.
пользуйся на здаровье, придумоешь иное напиши на мыло.

Добавлено: 08 июн 2005, 18:00
HiDDeN
Так тут тоже статичный массив. Где динамика то ?