Помогите сделать двумерный массив

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
R@MS
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.09.2007 (Пт) 18:57

Помогите сделать двумерный массив

Сообщение R@MS » 28.09.2007 (Пт) 19:05

Проблема в следующем: есть массив написаный на паскале:
Код: Выделить всё
BTabD : array [1..16,1..4] of real =
              ((1.5, 1.7, 2,   2.2),     (1.2, 1.4, 1.6, 1.8),
               (0.8, 1,   1.2, 1.4),     (1.1, 1.3, 1.5, 1.7),
               (1.5, 1.7, 1.9, 2.1),     (1.8, 2,   2.2, 2.4),
               (2.1, 2.3, 2.5, 2.7),     (2.5, 2.7, 2.9, 3.1),
               (2.8, 3,   3.2, 3.4),     (3.1, 3.3, 3.5, 3.7),
               (3.4, 3.6, 3.8, 4),       (3.5, 3.9, 4.2, 4.5),
               (3.6, 4,   4.2, 4.5),     (4.2, 4.5, 4.8, 5),
               (4.5, 5,   5.2, 5.5),     (5,   6,   6.5, 7));

Подскажите, пожалуйста как этот масив реализовать на VB 6.0. Заранее благодарен.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 28.09.2007 (Пт) 20:18

Код: Выделить всё
Dim BTabD (1 to 16, 1 to 4) as single



Public Sub InitBTabDArray()
       BTabD(1,1) = 1.5
       BTabD(1,2) = 1.7
       BTabD(1,3) = 2
       BTabD(1,4) = 2.2

       BTabD(2,1) = 0.8
       BTabD(2,2) = 1
       BTabD(2,3) = 1.2
       BTabD(2,4) = 1.4

       BTabD(3,1) = 1.5
       BTabD(3,2) = 1.7
       BTabD(3,3) = 2
       BTabD(3,4) = 2.2

       '     .... принцип понятен?
       ' мне лень за тебя делать всё остальное....

       BTabD(16,1) = 5
       BTabD(16,2) = 6
       BTabD(16,3) = 6.5
       BTabD(16,4) = 7     
End SUb
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

R@MS
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.09.2007 (Пт) 18:57

Сообщение R@MS » 28.09.2007 (Пт) 20:29

Этот вариант мне известен, но он очень громоздок. У меня таких масивов более 10 штук. Нельзя ли сделать это как то компактнее? Например что то типа как в VB.net
Код: Выделить всё
Dim b(,) As String = {{"аа", "аб"}, {"ба", "бб"}}
[/code]

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 28.09.2007 (Пт) 20:30

R@MS
В VB6 - нельзя.

Добавлено:
Нет, ну можно конечно использовать Variant-массивы, и сделать это так:


Код: Выделить всё
    Dim e()
    e = Array(Array(1, 2, 3), Array(4, 5, 6))
    MsgBox e(1)(1)
    MsgBox e(1)(2)


Но:
1) Это будет медленнее и ресурсоёмко.
2) Это будет неприемлемо, если планировались какие-то работы с памятью напрямую.
3) Обращаться к элементу массива надо будет не как el(x,y,z) а как el(x)(y)(z). Т.е по сути это будет не двухмерный массив, а массив массивов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

R@MS
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.09.2007 (Пт) 18:57

Сообщение R@MS » 28.09.2007 (Пт) 20:42

Тогда немного офтопа: На сколько VB.net сильно отличаеться от VB6? Если я куплю себе VB.net я легко смогу в нём разобраться или прийдёться ещё один учебник покупать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 28.09.2007 (Пт) 20:46

R@MS
Правильнее спросить: насколько VB.NET похож на VB6 ?

В техническом плане между ними нет вообще ничего общего.
В синтаксическом плане: общее есть.
В плане внутренней объектной модели и логики построения приложения на базе каждого из языков - отличия огромные.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 29.09.2007 (Сб) 10:50

А если использовать следующий принцип:

Код: Выделить всё
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Dim M(1 To 4, 1 To 3) As Single

Public Sub InitBTabDArray()

    Dim N(1 To 12) As Single

    Dim i As Single
   
    For i = 1 To 12
        N(i) = Choose(i, 1.5, 1.7, 2, 2.2, _
                         0.8, 1, 1.2, 1.4, _
                         1.5, 1.7, 2, 2.2)
    Next i
   
    Call CopyMemory(M(1, 1), N(1), Len(N(1)) * 12)
     
    MsgBox M(1, 1)
    MsgBox M(1, 2)
   
   
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 29.09.2007 (Сб) 11:44

t116
Ну и чем он лучше моего способа? Тем, что тратится лишнее время на вызов Choose ? Тем, что тратится лишнее время на вызов CopyMemory ?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 29.09.2007 (Сб) 12:00

ну если массив всегда один и тот же можно его из файла доставать :wink:

R@MS
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.09.2007 (Пт) 18:57

Сообщение R@MS » 29.09.2007 (Сб) 13:24

Bonesnapper писал(а):ну если массив всегда один и тот же можно его из файла доставать :wink:

В принципе можно. Не подскажешь как именно :roll:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 29.09.2007 (Сб) 13:30

R@MS
Ну, э..мм... - что "как именно"? Как именно читать из файла?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

R@MS
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.09.2007 (Пт) 18:57

Сообщение R@MS » 29.09.2007 (Сб) 14:17

Да как именно считать из файла элементы в двумерный массив.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 51

    TopList