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

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

Заранее прощу прощения, если, несмотря на то, что я пользовалась поиском и читала форум, подобный вопрос всё же встречался.
...
Рейтинг: 0 / 0
22.01.2011, 15:57
    #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
22.01.2011, 17:57
    #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
22.01.2011, 18:02
    #37073185
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
Trupy Мною были просмотрены уйма сайтов (ничего не смогла почерпнуть), опрошен где-то десяток знакомых, которые так или иначе имеют отношение к программированию, никто не знаком с бейсиком.

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

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


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

"весёлый смайлик"
...
Рейтинг: 0 / 0
22.01.2011, 18:08
    #37073187
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
michael R, знать знаю, но не использую, что-то не приходилось
...
Рейтинг: 0 / 0
22.01.2011, 18:32
    #37073207
Trupy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
michael R, ну, если вы так говорите.... Возможно, мне просто помогать никто не захотел.
Я не утверждала, что не нашла, что такое двухмерный массив. Я говорю о том, что из всего, найденного мною, я не могу вывести решения моей проблемы.
Возьмите любого студента-первокурсника с улицы, у которого даже информатики в школе не было, и попросите его с нуля написать программу - получится примерно то же что и со мной.
Мне непонятно даже, в каких случаях какие элементы управления нужно выносить на форму, и как они связаны с кодом. Поверьте, если бы для меня так безнадёжно всё не было, я бы не написала на форум...
...
Рейтинг: 0 / 0
22.01.2011, 18:36
    #37073213
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
Trupy, в каких случаях какие элементы управления нужно выносить на форму
это что вопрос?
кнопка нужна... продолжайте
...
Рейтинг: 0 / 0
22.01.2011, 18:45
    #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
22.01.2011, 18:53
    #37073232
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
Trupy

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

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

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

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

бреда никакого нету
всё это возможно
тем более код уже написан
...
Рейтинг: 0 / 0
22.01.2011, 22:02
    #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
22.01.2011, 22:24
    #37073354
Валентин67
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
Пардон, не следует особо обращать на строку комментария: "P.S. в коде для его сокращения, использовались значения переменных счетчика цикла - N и M" - осталось от прежнего "наброска" кода. Только не путайте переменные использованные в формуле с переменными счетчика и, все будет OK
...
Рейтинг: 0 / 0
22.01.2011, 22:55
    #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
23.01.2011, 21:31
    #37074127
Trupy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
Валентин67, спасибо большое, с вашими объяснениями многое стало понятней. Только вот считает совсем не так, как мне нужно)
Времени переделывать уже нет, завтра сдавать нужно(
Буду выкручиваться.
И всем спасибо, что не остались равнодушными.
...
Рейтинг: 0 / 0
24.01.2011, 01:01
    #37074327
Валентин67
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
TrupyВалентин67,
Только вот считает совсем не так, как мне нужно)
Времени переделывать уже нет, завтра сдавать нужно(

По идее должно быть в коде все правильно, единственно не делал надлежащего форматирования. Следовало Вам заглянуть в Help по функции Format, посмотреть синтаксис и написать в коде так, как хотелось бы видеть в окне TextBox. И в панели свойств, для TextBox нужно, нужно обязательно выставить Multiline=True (многострочный ввод текста в поле) - об этом забыл написать и понадеялся, что догадаетесь... А иначе будет все в одну строку "загонять" + "палочки" :)
...
Рейтинг: 0 / 0
24.01.2011, 08:52
    #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
27.01.2011, 22:46
    #37083031
Trupy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание двухмерного массива
Shamanus,
"как можно просмотреть уйму сайтов, а вторую ссылку не найти..."

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


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

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


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