Загрузка данных


Dim A(1 To 10) As Integer ' Объявление массива на уровне модуля (Задание 3)
Dim isArrayFilled As Boolean

' Инициализация формы (Задание 2)
Private Sub UserForm_Initialize()
    Label2.Visible = False
    Label3.Visible = False
    isArrayFilled = False
End Sub

' 6. Ввод массива с клавиатуры
Private Sub btnInput_Click()
    Dim i As Integer
    Dim str As String
    
    For i = 1 To 10
        A(i) = CInt(InputBox("Введите " & i & "-й элемент массива", "Заполнение массива"))
    Next i
    
    ' Вывод массива в метку Label2
    str = ""
    For i = 1 To 10
        str = str & A(i) & " "
    Next i
    
    Label2.Caption = str
    Label2.Visible = True
    Label3.Visible = False
    isArrayFilled = True
    
    ' Сбрасываем переключатели при новом вводе
    Call ResetOptions
End Sub

' 9. Изменение ввода на случайные числа ("Задать массив")
Private Sub btnRandom_Click()
    Dim i As Integer
    Dim str As String
    
    Randomize ' Инициализация генератора случайных чисел
    
    For i = 1 To 10
        ' Генерируем случайные числа от -99 до 99
        A(i) = Int((199 * Rnd) - 99)
    Next i
    
    ' Вывод массива
    str = ""
    For i = 1 To 10
        str = str & A(i) & " "
    Next i
    
    Label2.Caption = str
    Label2.Visible = True
    Label3.Visible = False
    isArrayFilled = True
    
    Call ResetOptions
End Sub

' 8. Процедуры для каждого переключателя

' Переключатель: МАКСИМАЛЬНЫЙ
Private Sub optMax_Click()
    If Not isArrayFilled Then MsgBox "Сначала введите массив!", vbExclamation: Exit Sub
    Dim i As Integer, max As Integer
    max = A(1)
    For i = 2 To 10
        If A(i) > max Then max = A(i)
    Next i
    Label3.Caption = "Максимальный элемент: " & max
    Label3.Visible = True
End Sub

' Переключатель: МИНИМАЛЬНЫЙ
Private Sub optMin_Click()
    If Not isArrayFilled Then MsgBox "Сначала введите массив!", vbExclamation: Exit Sub
    Dim i As Integer, min As Integer
    min = A(1)
    For i = 2 To 10
        If A(i) < min Then min = A(i)
    Next i
    Label3.Caption = "Минимальный элемент: " & min
    Label3.Visible = True
End Sub

' Переключатель: ПОИСК ЧИСЛА (Задания 4, 5)
Private Sub optSearch_Click()
    If Not isArrayFilled Then MsgBox "Сначала введите массив!", vbExclamation: Exit Sub
    If TextBox1.Text = "" Or Not IsNumeric(TextBox1.Text) Then
        MsgBox "Введите корректное число для поиска в поле!", vbCritical
        optSearch.Value = False
        Exit Sub
    End If
    
    Dim searchNum As Integer
    Dim i As Integer, count As Integer
    
    searchNum = CInt(TextBox1.Text)
    count = 0
    
    For i = 1 To 10
        If A(i) = searchNum Then count = count + 1
    Next i
    
    If count > 0 Then
        Label3.Caption = "Число " & searchNum & " встречается " & count & " раз(а)"
    Else
        Label3.Caption = "Число " & searchNum & " не найдено в массиве"
    End If
    Label3.Visible = True
End Sub

' Переключатель: СУММА
Private Sub optSum_Click()
    If Not isArrayFilled Then MsgBox "Сначала введите массив!", vbExclamation: Exit Sub
    Dim i As Integer, sum As Long
    sum = 0
    For i = 1 To 10
        sum = sum + A(i)
    Next i
    Label3.Caption = "Сумма элементов: " & sum
    Label3.Visible = True
End Sub

' Переключатель: ПО УБЫВАНИЮ (Пузырьковая сортировка)
Private Sub optDesc_Click()
    If Not isArrayFilled Then MsgBox "Сначала введите массив!", vbExclamation: Exit Sub
    Dim i As Integer, j As Integer, temp As Integer
    Dim B(1 To 10) As Integer
    
    ' Копируем массив, чтобы не портить исходный порядок
    For i = 1 To 10: B(i) = A(i): Next i
    
    For i = 1 To 9
        For j = i + 1 To 10
            If B(i) < B(j) Then
                temp = B(i): B(i) = B(j): B(j) = temp
            End If
        Next j
    Next i
    
    Dim str As String: str = ""
    For i = 1 To 10: str = str & B(i) & " ";: Next i
    Label3.Caption = "Отсортировано (убыв.): " & str
    Label3.Visible = True
End Sub

' Переключатель: ПО ВОЗРАСТАНИЮ
Private Sub optAsc_Click()
    If Not isArrayFilled Then MsgBox "Сначала введите массив!", vbExclamation: Exit Sub
    Dim i As Integer, j As Integer, temp As Integer
    Dim B(1 To 10) As Integer
    
    For i = 1 To 10: B(i) = A(i): Next i
    
    For i = 1 To 9
        For j = i + 1 To 10
            If B(i) > B(j) Then
                temp = B(i): B(i) = B(j): B(j) = temp
            End If
        Next j
    Next i
    
    Dim str As String: str = ""
    For i = 1 To 10: str = str & B(i) & " ";: Next i
    Label3.Caption = "Отсортировано (возр.): " & str
    Label3.Visible = True
End Sub

' Кнопка ВЫХОД
Private Sub btnExit_Click()
    Unload Me
End Sub

' Вспомогательная процедура сброса переключателей
Private Sub ResetOptions()
    optMax.Value = False
    optMin.Value = False
    optSearch.Value = False
    optSum.Value = False
    optDesc.Value = False
    optAsc.Value = False
End Sub