powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создание двухмерного массива
19 сообщений из 19, страница 1 из 1
Создание двухмерного массива
    #37073072
Trupy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Нам в институте на заочном отделении (т.е. всё изучаешь самостоятельно) по информатике дали задание.
Мною были просмотрены уйма сайтов (ничего не смогла почерпнуть), опрошен где-то десяток знакомых, которые так или иначе имеют отношение к программированию, никто не знаком с бейсиком. А я очень далека от программирования, учусь вообще на экономиста. Помогите пожалуйста, с решением, а то я смогла додуматься только до того, как объявить этот самый массив =(
Вот, собственно, задание:

"Создать двумерный массив (M x N). Заполнить его случайными числами. Транспонировать его."

Заранее прощу прощения, если, несмотря на то, что я пользовалась поиском и читала форум, подобный вопрос всё же встречался.
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073080
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trupy,
Массив может быть не только одномерным, но и многомерным.
Предельная размерность массива равна 60. Строка с объявлением
многомерного массива может иметь следующий вид:
Код: plaintext
1.
2.
3.
4.
5.
Dim ИмяМас ( 0  To  20 ,  0  To  70 ) As Integer
Sub TestSub ()
Dim ИмяМас ( 0  To  20 ,  0  To  70 ) As Integer
ИмяМас ( 1 , 1 ) = 23  'Элементу многомерного массива присваивается числовое значение
…
End Sub
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073183
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю, прошлый раз лишку написал
Код: plaintext
1.
2.
3.
Dim ИмяМас( 0  To  20 ,  0  To  70 ) As Integer
ИмяМас( 1 ,  1 ) =  23  'элементу многомерного массива присваивается числовое значение
Считываем_с_массива_ИмяМас = ИмяМас( 1 ,  1 )
Считываем_с_массива_ИмяМас1 = ИмяМас( 4 ,  7 ) 'если не присвоено значение, тогда в переменной будет  0 
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073185
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trupy Мною были просмотрены уйма сайтов (ничего не смогла почерпнуть), опрошен где-то десяток знакомых, которые так или иначе имеют отношение к программированию, никто не знаком с бейсиком.

Ужас
до чего дошёл прогресс
неужели все знакомые которые имеют отношение к программированию не знаю что такое двухмерный массив?
вне зависимости от языка программирования
насколько я знаю в экономике понятие матрица тоже очень активно используется

насчёт Транспонировать матрицу - возможно это знают далеко не все
но опять люди связанные с программированием это должны знать


Trupy
милая вы моя
я не верю что вы не нашли что такое двухмерный массив
это даже Эндрю знает

"весёлый смайлик"
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073187
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael R, знать знаю, но не использую, что-то не приходилось
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073207
Trupy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
michael R, ну, если вы так говорите.... Возможно, мне просто помогать никто не захотел.
Я не утверждала, что не нашла, что такое двухмерный массив. Я говорю о том, что из всего, найденного мною, я не могу вывести решения моей проблемы.
Возьмите любого студента-первокурсника с улицы, у которого даже информатики в школе не было, и попросите его с нуля написать программу - получится примерно то же что и со мной.
Мне непонятно даже, в каких случаях какие элементы управления нужно выносить на форму, и как они связаны с кодом. Поверьте, если бы для меня так безнадёжно всё не было, я бы не написала на форум...
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073213
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trupy, в каких случаях какие элементы управления нужно выносить на форму
это что вопрос?
кнопка нужна... продолжайте
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073220
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Trupy,
Код: plaintext
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
Option Base  0 

' ***************************************************
' создание двумерного массива (M x N), заполнение его
' случайными целыми числами в диапазоне 0 - 1000,
' транспонирование исходного массива
'
' размерности массива вводятся в диалоге, вывод исходного
' и транспонированного массивов - в окно отладки
Sub TwoDimArray()
Dim arrBase%(), arrTrans%()
Dim s$, i%, ii%
Dim M%, N%

' ввод размерностей исходного массива
Do
    s = InputBox("Введите размерности массива M,N." _
            & vbCrLf & "Вводить через запятую.")
    If s = "" Then Exit Sub
    i = InStr( 1 , s, ",")
    If i =  0  Then
        s = "Неверно введены размерности массива." & vbCrLf _
            & "Следует вводить через запятую."
    Else
        On Error Resume Next
        M = CInt(Left(s, i -  1 )) -  1 
        If Err.Number =  0  And M >=  0  Then
            N = CInt(Mid(s, i +  1 )) -  1 
            If Err.Number =  0  And N >=  0  Then Exit Do Else s = "N."
        Else:   s = "M."
        End If
        
        Err.Clear
        On Error GoTo  0 
        s = "Неверно указана размерность " & s
    End If
    s = s & vbCrLf & "Повтроить ввод?"
    If MsgBox(s, vbExclamation + vbYesNo) <> vbYes Then Exit Sub
Loop

' реинициализация исходного массива
ReDim arrBase(M, N)

' заполнение исходного массива
Randomize (Time)
For i =  0  To M
    For ii =  0  To N
        arrBase(i, ii) = Int( 1001  * Rnd)
    Next ii
Next i

' вывод исходного массива
Call PrintTwoDimArray("Исходный массив", arrBase)

' транспонирование исходного массива
Call TwoDimArrayTranspose(arrBase, arrTrans)
Debug.Print ""

' вывод транспонированного массива
Call PrintTwoDimArray("Транспонированный массив", arrTrans)

' освобождение памяти
Erase arrBase, arrTrans
End Sub

' ***************************************************
' транспонирование двумерного массива
' параметры:
'    arrIN  - исходный массив
'    arrOUT - транспонированный массив
Sub TwoDimArrayTranspose(arrIN, arrOUT)
Dim i%, ii%

ReDim arrOUT(LBound(arrIN,  2 ) To UBound(arrIN,  2 ), _
             LBound(arrIN) To UBound(arrIN))

For i = LBound(arrIN) To UBound(arrIN)
    For ii = LBound(arrIN,  2 ) To UBound(arrIN,  2 )
        arrOUT(ii, i) = arrIN(i, ii)
    Next ii
Next i
End Sub

' ***************************************************
' вывод двумерного массива в окно отладки
' параметры:
'    sTitle - "заголовок"
'    arr - массив
Sub PrintTwoDimArray(sTitle$, arr)
Dim i%, ii%

Debug.Print sTitle
For i = LBound(arr) To UBound(arr)
    For ii = LBound(arr,  2 ) To UBound(arr,  2 )
        Debug.Print arr(i, ii); Tab;
    Next ii
    Debug.Print ""
Next i
End Sub
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073232
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trupy

хорошо
давайте по порядку
пока без кода а только о логике

1 какие именно случайные числа нужно ? целые или вещественные ?какие границы чисел ?
2 о какой форме идёт речь?
3 нужно ли показывать исходную и конечную матрицу?

про транспонирование матрицы
это для элемента А(х,y) ставится значение А(y,х)
и это производится для половины матрицы в цикле
иначе матрица вернётся в исходное состояние

опять же примеры для транспонирования есть на всех языках программирования
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073251
Trupy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В задании не сказано ничего, кроме того, что я написала выше. Но, если я правильно поняла, нужен массив, состоящий из случайных целых чисел от 1 до 99. Сам массив должен выводиться в ListBox с помощью CommandButton - "Решение". + должна быть кнопка "Выход".
Про конечную матрицу... Даже не знаю, возможно, нужно сделать ещё ListBox для неё? И чтобы при нажатии "Решение" пересчитывались числа в обоих массивах?
Такое возможно вообще, или я бред несу?)
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073265
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trupy

бреда никакого нету
всё это возможно
тем более код уже написан
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073348
Валентин67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trupy"Создать двумерный массив (M x N). Заполнить его случайными числами. Транспонировать его."
В задании не сказано ничего, кроме того, что я написала выше.
Область описания модуля (General Declarations):
Код: plaintext
1.
2.
3.
4.
' Индексы массива (матрица) будут нумероваться с единицы
Option Base  1 
' Объявляем двухмерный массив 9x9 (матрица), состоящий из целых чисел
Dim Matrix ( 9 ,  9 ) As Integer
код (вставить в нужное место):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Randomize
    For M =  1  To  9 
        For N =  1  To  9 
            ' прим.: Формула получения случайного числа из отрезка [N, M]: Z=N+Fix(Rnd*(M-N+1))
            ' Заполнить массив (матрица) случайными числами из отрезка [1, 9]
            ' P.S. в коде для его сокращения, использовались значения переменных счетчика цикла - N и M
            Matrix (M, N) =  1  + Fix (Rnd * ( 9  -  1  +  1 ))
            ...
        Next N
    Next M

не совсем понял о какой транспортировке шла речь, случайно не имелось ввиду присвоение содержания массива массиву?
Присвоение одного массива другому поэлементно в операторе цикла. Например:
Код: plaintext
1.
2.
3.
4.
5.
    For M =  1  To  9 
        For N =  1  To  9 
            MatrixB (M, N) = Matrix (M, N)
        Next N
    Next M
P.S. В этом примере попрежнему - Option Base 1
но, не забудьте объявить еще один массив (к примеру) - MatrixB (9, 9)
P.P.S Это только мой коротенький пример для Вас, как такое решается :),
конкретно, нетрудно будет додумать самой, при желании
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073354
Валентин67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, не следует особо обращать на строку комментария: "P.S. в коде для его сокращения, использовались значения переменных счетчика цикла - N и M" - осталось от прежнего "наброска" кода. Только не путайте переменные использованные в формуле с переменными счетчика и, все будет OK
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37073378
Валентин67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К примеру, можете вывести матрицу в TextBox для визуализации:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    Text1.Text = ""
    For M =  1  To  9 
        For N =  1  To  9 
            Matrix(M, N) =  1  + Fix(Rnd * ( 9  -  1  +  1 ))
            Text1.Text = Text1.Text & Format(Matrix(M, N), "0") & " "
        Next N
        Text1.Text = Text1.Text & vbCrLf
    Next M

Trupy , основное, вроде, Вам подсказал :)
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37074127
Trupy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Валентин67, спасибо большое, с вашими объяснениями многое стало понятней. Только вот считает совсем не так, как мне нужно)
Времени переделывать уже нет, завтра сдавать нужно(
Буду выкручиваться.
И всем спасибо, что не остались равнодушными.
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37074327
Валентин67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrupyВалентин67,
Только вот считает совсем не так, как мне нужно)
Времени переделывать уже нет, завтра сдавать нужно(

По идее должно быть в коде все правильно, единственно не делал надлежащего форматирования. Следовало Вам заглянуть в Help по функции Format, посмотреть синтаксис и написать в коде так, как хотелось бы видеть в окне TextBox. И в панели свойств, для TextBox нужно, нужно обязательно выставить Multiline=True (многострочный ввод текста в поле) - об этом забыл написать и понадеялся, что догадаетесь... А иначе будет все в одну строку "загонять" + "палочки" :)
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37074463
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин67,

транспонирование массива это поворот его на 90 градусов, а ТС врет
вторая ссылка в яндексе на поиск фразы двухмерный массив ведет на MSDN

где есть пример
MSDNСохранение значений в массиве

К любому местоположению в массиве можно получить доступ, используя индекс типа Integer. Можно сохранять и извлекать значения массива, ссылаясь на местоположение в массиве с помощью индекса места, приведенного в скобках. Индексы для многомерных массивов разделяются запятыми (,). Для каждого измерения массива требуется отдельный индекс. В следующем примере показаны некоторые операторы, которые сохраняют значения в массивах.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim i =  4 
Dim j =  2 

Dim numbers( 10 ) As Integer
Dim matrix( 5 ,  5 ) As Double

numbers(i +  1 ) =  0 
matrix( 3 , j *  2 ) = j

и вот
MSDN Размер массива

Размер массива является произведением длин всех его измерений. Он представляет собой общее число элементов, в данный момент содержащихся в массиве.

В следующем примере показано объявление трехмерного массива:

Код: plaintext
Dim prices( 3 ,  4 ,  5 ) As Long


как можно просмотреть уйму сайтов, а вторую ссылку не найти...

по сути эти два примера и есть решение задачи
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37083031
Trupy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shamanus,
"как можно просмотреть уйму сайтов, а вторую ссылку не найти..."

)))))
На этом сайте я тоже была. Повторюсь... От программирования я далека настолько, что смогла бы сделать задание, только если бы был пример решения ИДЕНТИЧНОГО задания, и то, что даётся на этой странице, да, объясняет, как объявить массив, да, говорит о размерности и т.д., но никак бы мне не помогло с конкретно моей проблемой.
Один из участников форума был очень любезен и помог мне с задачей по скайпу, без него бы не справилась.
Спасибо =)
...
Рейтинг: 0 / 0
Создание двухмерного массива
    #37083632
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Trupy
> Один из участников форума был очень любезен и помог мне с задачей по скайпу, без него бы не справилась.


Страна должна знать своих героев
Имя сестра! Имя!

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создание двухмерного массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]