Вторник, 12.11.2019, 15:57
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Тестування онлайн
тестування онлайн 


Социальные закладк

Приложение: поиск 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

  1. Можно было бы определить,сколько элементов массива равны данному числу, и если это количество 0, то данного числа в массиве нет, а если больше 0, то есть.
  2. Но такой метод решения является нерациональным. Представьте себе, что данное число является значением уже первого элемента массива. Тогда все остальные элементы массива просматривать не нужно.

Для реализации рационального метода решения этой задачи используем:

  • переменную логического типа 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. Сначала будем считать, что значение первого элемента массива - и наибольшее, и наименьшее, а номер наибольшего и наименьшего элемента массива 1.
  2. После чего последовательно будем просматривать все остальные элементы массива.
  • Если значение очередного элемента массива больше, того значения, которое мы на тот момент считаем наибольшим, то заменяем наибольшее значение среди уже просмотренных элементов массива и номер наибольшего элемента.
  • Если нет, то может быть это значение меньше, чем то, которое мы пока что считаем наименьшим. И если это так, то заменяем наименьшее значение среди уже просмотренных элементов массива и номер наименьшего элемента.

Интерфейс проекта  (один из вариантов)

 

Программный код

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

продолжение
 

Форма входа
Поиск
Календарь
«  Ноябрь 2019  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2019
    Конструктор сайтов - uCoz