Приложение: поиск max.rar
poick 1_ k.rar
Занятие 34. Поиск элементов по условию
Пример 1 Составить проект поиска максимального элемента линейного массива.
- Сначала будем считать, что значение первого элемента массива и является наибольшим среди всех значений элементов массива.
- После чего последовательно будем просматривать все остальные элементы массива, и если встретится значение больше того, которое мы на данный момент считаем наибольшим, то сделаем это значение наибольшим.
Интерфейс проекта
Блок - схема
Программный код
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim z(5) As Integer
Dim i, max As Integer
For i = 1 To 5
z(i) = InputBox("ввод " & Str(i) & " - го элемента массива", "ввод очередного элемента массива")
ListBox1.Items.Add("z(" & i & ") = " & vbTab & z(i))
Next
max = z(1)
ListBox2.Items.Add("max = " & vbTab & z(1))
For i = 2 To 5
If z(i) > max Then
max = z(i)
ListBox2.Items.Add("max = " & vbTab & z(i))
End If
Next
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
ListBox2.Items.Clear()
End Sub
Пример 2. Поиск 1-го элемента равного k
- Можно было бы определить,сколько элементов массива равны данному числу, и если это количество 0, то данного числа в массиве нет, а если больше 0, то есть.
- Но такой метод решения является нерациональным. Представьте себе, что данное число является значением уже первого элемента массива. Тогда все остальные элементы массива просматривать не нужно.
Для реализации рационального метода решения этой задачи используем:
- переменную логического типа f и присвоим ей начальное значение false (данное число в массиве пока еще не встретилось).
- будем сравнивать последовательно значения элементов массива с данным числом и если один из них равен данному числу, то изменим значение переменной f на true и прервем выполнение цикла командой Exit Do.
- вывод результата реализуем в зависимости от значения переменной f.
Интерфейс проекта
Блок - схема проекта
Программный код проекта
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a() As Single
Dim k, i, n As Integer
Dim f As Boolean
n = Val(InputBox("n ", "ввод размерности массива"))
ReDim a(n)
Randomize()
For i = 1 To n
a(i) = Int(15 - 20 * Rnd())
ListBox1.Items.Add("a(" & i & ")=" & a(i))
Next i
k = Val(InputBox("k ", "ввод искомого числа"))
Label1.Text = Str(k)
f = False
i = 1
Do
If a(i) = k Then
f = True
ListBox2.Items.Add("a(" & i & ")=" & a(i) & " f=" & f & " выход")
Exit Do
End If
i = i + 1
Loop Until (f = True) Or (i > n)
If f = False Then Label5.Text = "f= " & Str(f) & ", элемент массива значением " & Str(k) & " отсутствует"
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ListBox2.Items.Clear()
ListBox1.Items.Clear()
Label1.Text = ""
Label5.Text = ""
End Sub
Задание. В данном массиве из десяти разных действительных чисел определить наибольшее и наименьшее значения и поменять их местами.
Поскольку нужно поменять местами наибольшее и наименьшее значения среди значений элементов массива, то нужно определить не только сами эти значения, а еще и порядковый номер элемента массива, значение которого наибольшее, и порядковый номер элемента массива, значение которого наименьшее.
Попробуем определить все это, просматривая элементы массива только один раз.
- Сначала будем считать, что значение первого элемента массива - и наибольшее, и наименьшее, а номер наибольшего и наименьшего элемента массива 1.
- После чего последовательно будем просматривать все остальные элементы массива.
- Если значение очередного элемента массива больше, того значения, которое мы на тот момент считаем наибольшим, то заменяем наибольшее значение среди уже просмотренных элементов массива и номер наибольшего элемента.
- Если нет, то может быть это значение меньше, чем то, которое мы пока что считаем наименьшим. И если это так, то заменяем наименьшее значение среди уже просмотренных элементов массива и номер наименьшего элемента.
Интерфейс проекта (один из вариантов)
Программный код
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a() As Single 'массив переменной размерности (динамический)
Dim i, n, k, z As Short
Dim min, max As Single
Randomize()
n = Val(TextBox1.Text)
ReDim a(n) ' переопределение размерности массива
For i = 0 To n
a(i) = (10 - 20 * Rnd())
ListBox1.Items.Add("a(" & i & ") = " & vbTab & Format(a(i), "0.000 "))
Next
min = a(0) : z = 0 'значение нулевого элемента примем за минимальное и запомним его индекс
max = a(0) : k = 0 'значение нулевого элемента примем за максимальное и запомним его индекс
For i = 1 To n
If a(i) > max Then 'сравниваем очередной элемент с наибольшим на данный момент
max = a(i) 'меняем значение наибольшего элемента
k = i 'меняем индекс наибольшего элемента
ElseIf a(i) < min Then 'сравниваем очередной элемент с наименьшим на данный момент
min = a(i) 'меняем значение наименьшего элемента
z = i 'меняем индекс наименьшего элемента
End If
Next
TextBox2.Text = Format(a(k), "0.000") : TextBox3.Text = Format(a(z), "0.000")
TextBox4.Text = k : TextBox5.Text = z
a(k) = min : a(z) = max ' обмен значениями наибольшего и наименьшего элементов массива
For i = 0 To n
ListBox2.Items.Add("a(" & i & ") = " & vbTab & Format(a(i), "0.000 "))
Next
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ListBox2.Items.Clear()
ListBox1.Items.Clear()
TextBox2.Text = ""
TextBox3.Text = ""
TextBox1.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
End Sub