Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Заблокирован
1

Что такое многомерный, динамический массив

01.07.2014, 04:10. Показов 3893. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
я это понимаю так:
  • создание такого массива
  • доступ к элементам этого массива

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Option Explicit: Option Base 1
 
Dim MultiArray() As Variant
 
Private Sub Form_Activate()
    Const m = 10
    MultiArray = Array(1, 2, 3)
    MultiArray(1) = "Пример"
    MultiArray(2) = Array("Спартак", "Зенит", "Локомотив")
    Randomize Timer  'Установка генерации Rnd
    MultiArray(3) = Array(Fix(Rnd * m) & "-" & Fix(Rnd * m), Fix(Rnd * m) & "-" & Fix(Rnd * m), Fix(Rnd * m) & "-" & Fix(Rnd * m))
    cls
    Print "--------------Вывод всех элементов этого массива"
    GetArr MultiArray
End Sub
 
Sub GetArr(Arr)
    'Рекурсивный доступ ко всем элементам этого массива
    Dim Var
    Print 'Пустая строка для наглядности, ее можно не ставить
    For Each Var In Arr
        If IsArray(Var) Then GetArr Var Else Print Var
    Next
End Sub
Добавлено через 6 минут
Если у кого есть желание, можете дополнить эту тему вот чем
  • как в таком массиве реализовать сортировку элементов, и суб-элементов
  • как в таком массиве реализовать поиск минимального числового значения
  • ---///---... максимального числового значения

Добавлено через 10 минут

Не по теме:

ЗЫ..
тот кто самостоятельно смогёт все это реализовать. можете смело считать себя профи :)

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2014, 04:10
Ответы с готовыми решениями:

Что такое динамический двумерный массив?
Здравствуйте. Пытаюсь понять правильно ли вместилась эта картинка в мою голову? mass это адрес...

Многомерный динамический массив
Пользователь вводит размер массива. Массив заполняется рандомными значениями. Если рандом...

Многомерный динамический массив
Доброго времени суток! Помогите пожалуйста разобраться с такой задачкой: Необходимо объявить...

Многомерный динамический массив
В общем так: Массив, размерность которого неизвестна и зависит от чего-либо. К примеру у нас есть...

23
Заблокирован
02.07.2014, 13:48  [ТС] 21
Author24 — интернет-сервис помощи студентам
Вот я переделал, но остается непонятным
как в этом случае определять количество полей
и определять тип в таком поле, ведь там может быть не только Long

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Option Explicit: Option Base 1
Private Declare Function GetMem4 Lib "msvbvm60" (src As Any, dst As Any) As Long
Dim MultiArray() As Variant
 
Private Sub Form_Activate()
    Dim Test As TestUDT
    Const m = 10
    MultiArray = Array(1, 2, 3, Screen.ActiveForm)
    MultiArray(1) = "Пример"
    MultiArray(2) = Array("Спартак", "Зенит", "Локомотив")
    Randomize Timer
    MultiArray(3) = Test
    Cls
    Print "--------------Вывод всех элементов этого массива"
    GetArr MultiArray
End Sub
 
Sub GetArr(Arr)
    'Доступ ко всем элементам массива
    Dim Var, pvRecord As Long, f&
    Print 'Пустая строка для наглядности, ее можно не ставить
    On Error Resume Next
    For Each Var In Arr
        If IsArray(Var) Then
            GetArr Var
        ElseIf IsObject(Var) Then
            Print "Object As "; TypeName(Var)
        ElseIf VarType(Var) And vbUserDefinedType Then
            GetMem4 ByVal VarPtr(Var) + 8, pvRecord
            ReDim Fields(0 To 2) As Long
            Print TypeName(Var)
            For f = 0 To UBound(Fields)
                GetMem4 ByVal pvRecord + f * 4, Fields(f)
                Print vbTab & "Field" & f & " = " & Fields(f)
            Next
        Else: Print Var
        End If
    Next
End Sub
Миниатюры
Что такое многомерный, динамический массив  
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
02.07.2014, 14:00 22
Цитата Сообщение от Антихакер32 Посмотреть сообщение
Вот я переделал, но остается непонятным
как в этом случае определять количество полей
и определять тип в таком поле, ведь там может быть не только Long
Ты вообще читаешь ссылки которые тебе дают?
Чтобы ты мог научится читать имена полей и их тип, ты должен знать устройство типа Variant.
После того как ты изучишь строение Variant'а, тебе нужно будет изучить механизм хранения UDT в Variant'е.
После того как ты изучишь механизм хранения UDT в Variant'е, ты сможешь получить объекты, с помощью которых можно получить всю нужную информацию. Ах, да... Ты же не умеешь работать с COM. Так что тебе придется сначала изучить основы COM.
0
Заблокирован
02.07.2014, 14:57  [ТС] 23
Вот, изящная функция получения переменных
а значения полей обычно не требуется, ну можно настроить
вручную дописав пару строчек индивидуально для UDT типа

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Option Explicit: Option Base 1
Dim MultiArray() As Variant
 
Private Sub Form_Activate()
    Dim t1 As TestUDT
    Const m = 10
    MultiArray = Array(1, 2, 3, Screen.ActiveForm)
    MultiArray(1) = "Пример"
    MultiArray(2) = Array("Спартак", "Зенит", "Локомотив", t1)
    Randomize Timer
    MultiArray(3) = Array(Fix(Rnd * m) & "-" & Fix(Rnd * m), Fix(Rnd * m) & "-" & Fix(Rnd * m), Fix(Rnd * m) & "-" & Fix(Rnd * m))
    Cls
    Print "--------------Вывод всех элементов этого массива"
    GetArr MultiArray
End Sub
 
Function GetArr(Arr, Optional rec As Long)
    'Доступ ко всем элементам массива
    Dim Var
    On Error Resume Next
    GetArr = Arr: If Err.Number = 450 Then Set GetArr = Arr
    For Each Var In Arr
        If IsArray(Var) Then
            Print TypeName(Var)
            Call GetArr(Var, rec + 1)
        ElseIf IsObject(Var) Then
            Print String(rec, vbTab) & "Object" & vbTab & " As " & TypeName(Var)
            Call GetArr(Var, rec + 1)
        ElseIf VarType(Var) And vbUserDefinedType Then
            Print String(rec, vbTab) & "UserDefinedType" & vbTab & " As " & TypeName(Var)
        Else: Print String(rec, vbTab) & Var & vbTab & " As " & TypeName(Var)
        End If
    Next
End Function
....
Миниатюры
Что такое многомерный, динамический массив  
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
02.07.2014, 15:16 24
Что ты пытаешься показать этим "кодом"? Для чего это?
Цитата Сообщение от Антихакер32 Посмотреть сообщение
Вот, изящная функция получения переменных
а значения полей обычно не требуется, ну можно настроить
вручную дописав пару строчек индивидуально для UDT типа
Это неправильная, кривая, нерабочая функция, и тем более далеко не изящная. Для чего 28 строчка? Для чего обработчик ошибок, там где он не нужен, а где он нужен там его нет?
Что пользователю даст одно название типа? А если в типе поля другого типа? А если поля массивы, размерность массивов, кол-во элементов? А если неподдерживаемые типы? А методы объекта?
Ну напиши пару строчек для формирования списка полей типа и их типов.
Как значения полей обычно не требуются? А для чего тогда вообще нужны типы?
Я тебе привел пример с tlb, написанной специально для этого, а если работать с ActiveX библиотеками? Ты тоже будешь индивидуально для каждого UDT делать такой "код"?
Прежде чем что-то писать, нужно сначала знать это, а не плодить поток сознания.
0
02.07.2014, 15:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2014, 15:16
Помогаю со студенческими работами здесь

Многомерный динамический массив
Пользователь вводит размер массива Массив заполнняется рандомными (случайными) значениями 1-9 При...

Многомерный динамический массив
Правильно обьявляю динамический массив? ram: array of array of array of string; а...

Многомерный динамический массив
Как создать многомерный динамический массив? Одномерный я всегда создавал так: ArrayList m = new...

Массив фиксированного размера может быть динамическим? Что такое "динамический массив"?
есть код string line; char *dup=new char; Я так понимаю создается динамический массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru