Загрузка данных
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