Масивы???

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

Масивы???

Сообщение LKostyan » 28.06.2005 (Вт) 13:55

:?: Как управлять элементами масива и задавать размерность.
Например дана матрица(квадратная допустим 5Х5)
Вопрос1: Как задать масив такой размерности?
затем как забить значениями элементы масива допустим через RND
Вопрос2: Как это зделать?
дальше хочу сложить 1-ю и 2-ю строчки
Вопрос3: Как это сделать и где посмотреть результат или что написать чтоб выдовало визуальный ответ?

Напишите пожалуйста примеры (чтоб я разобрался с масивами). За ранее спасибо.

Q2W
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 745
Зарегистрирован: 31.01.2004 (Сб) 20:46
Откуда: Питер

Сообщение Q2W » 28.06.2005 (Вт) 14:15

Кинь на форму кнопку и в её код вставь это:
Код: Выделить всё

private sub Command1_click()


Dim m(5,5) as Integer 'объявляем массив 5*5
dim a as string, q as byte, w as byte

Randomize timer
For q=0 to 4
    For w=0 to 4
        m(q,w)=rnd*1000 'заполняем массив случайными чисслами
    next w
next q

For q=0 to 4
    m(q,3)=m(q,1)+m(q,2) 'складываем 1-ю и вторую строки в 3-ю.
next q

For q=0 to 4
    For w=0 to 4
        a=a & str$(m(q,w)) & ", " ' складываем результаты в строку a
    next w
    a=a & vbcrlf
next q
msgbox a' выводим a


end sub
Я знаю верный путь

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.06.2005 (Вт) 14:21

Код: Выделить всё

Dim m(5,5) as Integer 'объявляем массив 5*5


Это массив 6x6, так как по-молчанию , если не выставлен option base, бейсик начинает считать с 0.

Т.е. надо явно указывать начальный элемент:

Код: Выделить всё
Dim arr(1 To 5, 1 To 5) as Integer


Вот это будет 5x5

Q2W
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 745
Зарегистрирован: 31.01.2004 (Сб) 20:46
Откуда: Питер

Сообщение Q2W » 28.06.2005 (Вт) 15:01

Konst_One писал(а):
Код: Выделить всё
Dim m(5,5) as Integer 'объявляем массив 5*5


Это массив 6x6, так как по-молчанию , если не выставлен option base, бейсик начинает считать с 0.

Т.е. надо явно указывать начальный элемент:

Код: Выделить всё
Dim arr(1 To 5, 1 To 5) as Integer


Вот это будет 5x5


Не суть
Я знаю верный путь

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.06.2005 (Вт) 15:02

согласен, но лучше уточнить сразу, чтобы потом не было больше вопросов у спрашивающего :wink:

LKostyan
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 28.06.2005 (Вт) 13:41

Сообщение LKostyan » 28.06.2005 (Вт) 15:22

Уважаемые!!! Хотелось бы ещё узнать (допустим масив небольшой 3Х3) как забивать элементы в ручную? И как с листа эксэля считывать (если там таблица чисел)?

Благодарен за помощь в освоение VB!!!

Q2W
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 745
Зарегистрирован: 31.01.2004 (Сб) 20:46
Откуда: Питер

Сообщение Q2W » 28.06.2005 (Вт) 15:29

Ээ. а зачем тебе из екселя?

В ручную забивать этементы как?

Код: Выделить всё

'Так:
m(0,0)=4 'т.е. программно присваивать жёсткие чиса

'Или так:
m(0,0)=val(inputbox("Введи чило:"))
Я знаю верный путь

LKostyan
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 28.06.2005 (Вт) 13:41

Сообщение LKostyan » 28.06.2005 (Вт) 16:33

m(0, 0) = 1
m(0, 1) = 0
m(0, 2) = 0
m(0, 3) = 0
m(0, 4) = 0

m(1, 0) = 0
m(1, 1) = 1
m(1, 2) = 0
m(1, 3) = 0
m(1, 4) = 0

m(2, 0) = 0
m(2, 1) = 0
m(2, 2) = 0
m(2, 3) = 0
m(2, 4) = 0

m(3, 0) = 0
m(3, 1) = 0
m(3, 2) = 0
m(3, 3) = 0
m(3, 4) = 0

m(4, 0) = 0
m(4, 1) = 0
m(4, 2) = 0
m(4, 3) = 0
m(4, 4) = 0

Ну вот допустим забил в ручную а как теперь вывести это через форму через кнопку???

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.06.2005 (Вт) 16:37

что конкретно ты хочешь увидеть на форме?

LKostyan
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 28.06.2005 (Вт) 13:41

Сообщение LKostyan » 28.06.2005 (Вт) 16:45

таблицу через MsgBox

Конкретно вот это:
1 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.06.2005 (Вт) 16:49

и в чем проблема?
составь цикл, примерно так:

Код: Выделить всё
dim s as string
for i=0 to 4
   s=""
   for j=0 to 4
   'здесь выводи куда тебе надо
   'debug.print m(i,j)
   if len(s)>0 then
      s=s & " " & m(i,j)
   else
      s=m(i,j)
   end if
   next
   Form1.Text1.SelText=s & vbcrlf
next

LKostyan
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 28.06.2005 (Вт) 13:41

Сообщение LKostyan » 28.06.2005 (Вт) 17:01

Что то не что не получается? Ты если вставляеш сюда прогу ты вставля вместе с заглушкой буть политкоректин я всё таки начинающий. :wink:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.06.2005 (Вт) 17:08

что , лень подумать самому :evil:

Код: Выделить всё
Option Explicit
Dim m(4, 4) As Integer
'

Private Sub Form_Load()
Dim i As Byte
Dim j As Byte
Dim s As String

m(0, 0) = 1
m(0, 1) = 0
m(0, 2) = 0
m(0, 3) = 0
m(0, 4) = 0

m(1, 0) = 0
m(1, 1) = 1
m(1, 2) = 0
m(1, 3) = 0
m(1, 4) = 0

m(2, 0) = 0
m(2, 1) = 0
m(2, 2) = 0
m(2, 3) = 0
m(2, 4) = 0

m(3, 0) = 0
m(3, 1) = 0
m(3, 2) = 0
m(3, 3) = 0
m(3, 4) = 0

m(4, 0) = 0
m(4, 1) = 0
m(4, 2) = 0
m(4, 3) = 0
m(4, 4) = 0

Me.AutoRedraw = True

For i = 0 To 4
   s = ""
   For j = 0 To 4
   If Len(s) > 0 Then
      s = s & " " & m(i, j)
   Else
      s = m(i, j)
   End If
   Next
   Print s
Next

Me.AutoRedraw = False

End Sub

LKostyan
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 28.06.2005 (Вт) 13:41

Сообщение LKostyan » 28.06.2005 (Вт) 18:02

Private Sub CommandButton1_Click()
Dim mas(9, 9) As Integer, c%, d%, i%, j%, l%
For a = 0 To 9
For b = 0 To 9
mas(a, b) = Rnd * 100
'Next a
Next b
For a = 0 To 9
For i = 0 To 9 Step 1
c = mas(a, i) * mas(a, i)
Next i
Next a
For a = 0 To 9
For j = 0 To 8
For l = 1 To 9
d = mas(a, j) * mas(a, l)
Next l
Next j
Next a
If c = 1 And d = 0 Then MsgBox ("Матрица ортоганальна ")
Else
If c <> 1 And d <> 0 Then MsgBox ("Матрица неортагональна")
End If
End Sub

блин что тут не правильно Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 28.06.2005 (Вт) 18:04

LKostyan писал(а):Уважаемые!!! Хотелось бы ещё узнать (допустим масив небольшой 3Х3) как забивать элементы в ручную? И как с листа эксэля считывать (если там таблица чисел)?
Благодарен за помощь в освоение VB!!!

Вот как это делается из Экселя:
Код: Выделить всё
Private Sub Form_Load()
AutoRedraw = True
Dim i%, j%
On Error GoTo Error1
Set MsExcel = CreateObject("Excel.Application")
    MsExcel.Workbooks.Add "D:\1.xls"
    For i = 1 To 5
        For j = 1 To 5
            arr(i, j) = MsExcel.Sheets(1).Cells(i, j)
        Next
    Next
    MsExcel.ActiveWorkbook.Close
    If MsExcel.Workbooks.Count = 0 Then MsExcel.Quit
    Set MsExcel = Nothing
    For i = 1 To 5
        For j = 1 To 5
            Print arr(i, j),
        Next
        Print
    Next
    Exit Sub
Error1:
    MsgBox Err.Description, vbCritical
    MsExcel.Quit
    Set MsExcel = Nothing
End Sub

Данные читаются диапазона "А1:E5" первого листа книги "D:\1.xls"
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 28.06.2005 (Вт) 18:05

LKostyan писал(а):блин что тут не правильно Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!


а что хотелось получить то?
Весь мир матрица, а мы в нем потоки байтов!

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 28.06.2005 (Вт) 18:14

LKostyan писал(а): блин что тут не правильно Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!

Легче сказать, что в твоем коде правильно :) ... но попробую:
- Циклы перекрестно вложеные
- Организация If-then-else-end if - никуда не годится
- И Вообще, попробуй в постах использовать теги [Cоde] или [Syntаx]
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

vbStr
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 04.04.2005 (Пн) 20:18

Сообщение vbStr » 28.06.2005 (Вт) 18:29

LKostyan, ты говоришь о заполнении массива числами с последующим сложением/вычитанием строк. :?: Ты, случайно, не хочешь заняться матричными операциями в Vbasic? Например, решение систем систем линейных алгебраических уравнений методом Гаусса?! Если так,
то мне кажется тебе нужно найти более удобную среду. :!: MATLAB, к примеру. Говорят, еще Fortran имеет в своем арсенале некоторый матричный аппарат. Basic примитивен в этом отношении. Если, конечно, ты затеваешь что-то серьезное.

LKostyan
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 28.06.2005 (Вт) 13:41

Сообщение LKostyan » 28.06.2005 (Вт) 19:19

Не хочу я решать не какие линейные уравнея.
Просто у меня есть задачка:
Дана матририца разрядностью 10Х10 надо написать прогу которая определяла бы является матрица ортогональной или нет (ортагональная матрица это когда строчка умноженая на саму себя даёт 1 а на соседнюю даёт 0 проще говоря по диагонали единицы а все остальные элементы нули). Вот и я уже 3 сутки парюсь с этой задачай пытаюсь понять где и как??? Вот так!!! :wink:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.06.2005 (Вт) 20:16

а причем тут тогда вывод на экран :shock: :?:

CheburekV
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 14.06.2005 (Вт) 21:13

Сообщение CheburekV » 29.06.2005 (Ср) 6:40

LKostyan писал(а):Ну вот допустим забил в ручную а как теперь вывести это через форму через кнопку???

Через MsgBox можно так(код написан в Excel)
Код: Выделить всё

Sub my()
Dim bMas(1 To 3, 1 To 3) As Byte
Dim i As Byte, j As Byte
Dim strMas As String
'i-е строки
'j-е столбцы
For i = 1 To 3
    For j = 1 To 3
        bMas(i, j) = Val(InputBox("Введите элемент массива " & i & "," & j))
    Next
Next

For i = 1 To 3
    For j = 1 To 3
        strMas = strMas & " " & bMas(i, j)
    Next
    strMas = strMas & Chr(13)
Next
MsgBox strMas
End Sub

LKostyan
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 28.06.2005 (Вт) 13:41

Сообщение LKostyan » 29.06.2005 (Ср) 7:05

For i = 0 To n Step 1
c = mas(a, i) * mas(a, i) 'здесь умножаем 1-ю строчку саму на себя
А как теперь сложить элементы первой строчки?
Например mas(3,3) строка 1 (1, 0, 0, 0) типа 1+0+0+0=1 Желательно через For?
Next i


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

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

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

    TopList