Задачи на массивы в Vb

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Хм, если там нет Min, Max, тогда можно попробывать циклом (перебором), сравнивая каждый элемент массива с другим и таким методом найти Min и Max.

Может кто что подскажет нам ?

Вот посмотрите пример нахождение мин. значения в массиве
http://personnel.uapa.ru/print.asp?id=8 ... 2%E3..html
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Исходя из той логике, я думаю, вашу задачу можно решить так

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

Dim iArray() As Single
Dim i%, n%, Min!, Max!
Private Sub CommandButton1_Click()
    Me.Hide
    n = Me.TextBox1.Text 'Колличество элементов в массиве
    ReDim iArray(1 To n)
    For i = 1 To n
        iArray(i) = InputBox("Введите " & i & "-е значение для массива", "Заполнение массива")
        If iArray(i) = 0 Then i = i - 1 'защита от ввода нуля и нажатия кнопки Отмена
    Next
    n = UBound(iArray())
    'Находим Min
    Min = 10000
    For i = 1 To n
        If iArray(i) < Min Then
            Min = iArray(i)
        End If
    Next
    'Находим Max
    Max = 0
    For i = 1 To n
        If iArray(i) > Max Then
            Max = iArray(i)
        End If
    Next
    Me.TextBox1.Text = Min + Max
    Me.Show
End Sub
Хотя может кто-то предложит что-то проще
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

&quot писал(а):может кто-то предложит что-то проще
Я бы циклы объединил в один. Зачем проходить по массиву дважды ?
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

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

Dim iArray() As Single
Dim i%, n%, Min!, Max!
Private Sub CommandButton1_Click()
    Me.Hide
    On Error Resume Next
    n = Me.TextBox1.Text 'Колличество элементов в будущем массиве
    If n = 0 Then
        MsgBox "Укажите размерность массива"
        Me.Show
    End If
    ReDim iArray(1 To n)
    For i = 1 To n
        iArray(i) = InputBox("Введите " & i & "-е значение для массива", "Заполнение массива")
        If iArray(i) = 0 Then i = i - 1 'защита от ввода нуля и нажатия кнопки Отмена
    Next
    Min = 10000
    For i = 1 To n
        If iArray(i) < Min Then Min = iArray(i)
        If iArray(i) > Max Then Max = iArray(i)
    Next
    Me.TextBox1.Text = Min + Max
    Me.Show
End Sub
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Min = 10000
Обычно за начальный Min и Max берется 1-ый элемент массива, а поиск начинается со второго.
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Кто ещё что интересного подскажет ?

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

Option Explicit
Dim iArray() As Single
Dim i%, n%, Min!, Max!
Private Sub CommandButton1_Click()
    Me.Hide
    On Error Resume Next
    n = Me.TextBox1.Text 'Колличество элементов в будущем массиве
    If n = 0 Then
        MsgBox "Укажите размерность массива"
        Me.Show
    End If
    ReDim iArray(1 To n)
    For i = 1 To n
        iArray(i) = InputBox("Введите " & i & "-е значение для массива", "Заполнение массива")
        If iArray(i) = 0 Then i = i - 1 'защита от ввода нуля и нажатия кнопки Отмена
    Next
    Min = iArray(1) 
    Max = iArray(1)
    For i = 2 To n
        If iArray(i) < Min Then Min = iArray(i)
        If iArray(i) > Max Then Max = iArray(i)
    Next
    Me.TextBox1.Text = Min + Max
    Me.Show
End Sub
Firefly
Сообщения: 11
Зарегистрирован: 10 апр 2007, 08:21

Ух ты... спасибо =)) щас проверю все версии =)))
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

))) а зачем все ? Это же одна и та же версия (логика), только последния версия более оптимизирована.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Можно соптимизировать код

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

Dim t as single
...................
'В цикле
t = iArray(i)
If t < Min Then 
      Min = t
ElseIf t > Max Then 
      Max = t
end if
Firefly
Сообщения: 11
Зарегистрирован: 10 апр 2007, 08:21

Pavel55, все работает!
спасибо=)))))))))))))))))))

а вторую задачку в простом варианте, типа для на смертных мона? )))
Ответить