- •7. Одномерные массивы 114
- •8. Обработка двумерных массивов (матриц) 162
- •9. Обработка строк 183
- •10. Тип данных, определенный пользователем. Структуры 214
- •11. Использование подпрограмм 228
- •Приложение 52 310 Список литературы 313 Введение
- •1. Этапы создания Windows-приложения
- •2. Среда Visual Basic 2005
- •2.1. Структура среды Visual Basic 2005
- •2.2. Создание нового проекта
- •2.3. Сохранение проекта
- •2.4. Выполнение приложения
- •2.5. Основные команды среды Visual Basic 2005
- •2.6. Методы тестирования
- •2.7. Отладка приложений в среде vb
- •3. Разработка интерфейса в среде vb. Основные элементы управления
- •3.1. Метка
- •3.2. Текстовое поле
- •3.3. Кнопка
- •3.4. Окно списка
- •3.5. Выравнивание положения элементов управления
- •4. Программа линейной структуры
- •4.1. Понятие переменной
- •4.2. Типы данных
- •4.3. Объявление переменных
- •4.4. Оператор присваивания
- •Оператор присваивания работает справа налево.
- •4.5. Константы
- •4.6. Арифметические операции
- •4.7. Математические функции
- •4.8. Арифметическое выражение
- •4.9. Окно ввода (InputBox)
- •4.10. Окно вывода сообщения (MsgBox)
- •4.11. Пример. Вычисление площади треугольника
- •4.12. Пример. Нахождение цифр числа
- •5. Организация ветвлений
- •5.1. Логические константы и переменные
- •5.2. Операции сравнения
- •5.3. Логические операции
- •5.4. Логическое выражение
- •5.5. Условный оператор
- •5.6. Функция iIf
- •5.7. Оператор множественного ветвления ElseIf
- •5.8. Оператор выбора Select Case
- •5.9. Оператор безусловного перехода GoTo
- •5.10. Пример. Решение линейного уравнения
- •5.11. Пример. Программа-калькулятор
- •6. Программирование повторений
- •6.1. Цикл со счетчиком
- •6.1.1. Табуляция функции
- •6.1.2. Вычисление факториала
- •6.1.3. Обработка совокупности чисел с известным числом элементов
- •6.2. Цикл с условием
- •6.2.1. Ввод с проверкой
- •6.2.2. Обработка совокупности чисел с неизвестным числом элементов
- •6.2.3. Вычисление суммы ряда по общей формуле
- •Вычисление суммы ряда с использованием рекуррентного соотношения
- •6.2.5. Вычисление произведения ряда
- •Решение нелинейных уравнений методом простой итерации
- •7. Одномерные массивы
- •Массивы всегда обрабатываются в цикле.
- •7.1. Ввод массива
- •Вывод массива в окно списка и в текстовое поле
- •7.3. Вычисление суммы и произведения элементов массива
- •7.4. Определение количества элементов массива, удовлетворяющих некоторому условию
- •7.5. Вычисление среднего арифметического и среднего геометрического элементов массива, удовлетворяющих некоторому условию
- •7.6. Нахождение максимального элемента массива
- •7.7. Нахождение минимального элемента массива, удовлетворяющего некоторому условию
- •7.8. Поиск первого элемента массива, удовлетворяющего некоторому условию
- •7.9. Поиск последнего элемента массива, удовлетворяющего некоторому условию
- •7.10. Замена одного элемента массива
- •7.11. Замена всех элементов массива, удовлетворяющих некоторому условию
- •7.12. Перестановка местами двух элементов массива
- •7.13. Формирование нового массива из некоторых элементов исходного массива
- •7.14. Проверка совпадения всех элементов массива
- •7.15. Проверка упорядоченности всех элементов массива
- •7.16. Сортировка массива методом пузырька
- •7.17. Линейная сортировка массива (методом поиска минимума)
- •Никогда нельзя использовать одновременно оба способа перестановки элементов массива.
- •8. Обработка двумерных массивов (матриц)
- •8.1. Ввод прямоугольной матрицы
- •8.2. Вывод прямоугольной матрицы в окно списка и в текстовое поле
- •8.3. Поиск максимального элемента матрицы
- •8.4. Обработка матрицы по строкам
- •8.5. Обработка матрицы по столбцам
- •8.6. Обработка квадратных матриц
- •Для обработки элементов, стоящих на любой диагонали, достаточно одного цикла. Для обработки элементов, принадлежащих к одному из треугольников, необходимо использовать вложенные циклы.
- •9. Обработка строк
- •9.1. Основные функции обработки строк
- •9.2. Посимвольная обработка строки
- •9.3. Формирование массива слов строки
- •9.4. Формирование строки из массива слов
- •9.5. Слова-палиндромы
- •9.6. Выделение чисел из строки
- •9.7. Сравнение строк
- •9.8. Обработка многострочного текста
- •10. Тип данных, определенный пользователем. Структуры
- •10.1. Описание структуры. Область видимости. Понятие метода
- •10.2. Оператор With
- •10.3. Ввод массива структур
- •10.4. Вывод массива структур
- •10.5. Поиск в массиве структур
- •10.6. Формирование нового массива из некоторых элементов исходного массива
- •10.7. Сортировка массива структур
- •11. Использование подпрограмм
- •11.1. Определение процедуры и функции. Описание процедуры и функции
- •11.2. Передача параметров по ссылке и по значению
- •11.3. Формальные параметры и фактические переменные
- •11.4. Локальные и глобальные переменные
- •11.5. Static-переменные
- •Приложение 1
- •Приложение 2
- •Приложение 3
- •Приложение 4
- •Приложение 5
- •Приложение 6
- •Приложение 7
- •Приложение 8
- •Приложение 9
- •Приложение 10
- •Приложение 11
- •Приложение 12
- •Приложение 13
- •Приложение 14
- •Приложение 15
- •Приложение 16
- •Приложение 17
- •Приложение 18
- •Приложение 19
- •Приложение 20
- •Приложение 21
- •Приложение 22
- •Приложение 23
- •Приложение 24
- •Приложение 25
- •Приложение 26
- •Приложение 27
- •Приложение 28
- •Приложение 29
- •Приложение 30
- •Приложение 31
- •Приложение 32
- •Приложение 33
- •Приложение 34
- •Приложение 35
- •Приложение 36
- •Приложение 37
- •Приложение 38
- •Приложение 39
- •Приложение 40
- •Приложение 41
- •Приложение 42
- •Приложение 43
- •Приложение 44
- •Приложение 45
- •Приложение 46
- •Приложение 47
- •Приложение 48
- •Приложение 49
- •Приложение 50
- •Приложение 51
- •Приложение 52
- •Список литературы
7.8. Поиск первого элемента массива, удовлетворяющего некоторому условию
При решении задача поиска первого элемента массива, удовлетворяющего некоторому условию, предполагается, что таких элементов в массиве несколько. Найти первый из подходящих элементов, значит, найти его номер. Считается, что поиск идет слева направо, от нулевого элемента к последнему элементу. Но при этом нельзя исключать ситуацию, когда в массиве вообще нет искомых элементов.
Сначала предполагают, что в массиве нет искомого элемента. Поэтому его номер задается равным -1. Затем последовательно проверяются все элементы массива. Если какой-нибудь элемент удовлетворяет поставленному условию, его номер запоминается в специальной переменной, а сам цикл немедленно прерывается. Так как по условию задачи требуется найти только первый элемент, удовлетворяющий условию, то после его обнаружения анализ других элементов массива является бессмысленным. Рассмотрим особенности реализации данного алгоритма на примере задачи поиска номера первого элемента массива, равного нулю.
Объявляем переменную, в которой будет храниться номер искомого элемента. Очевидно, что эта переменная всегда будет иметь целочисленный тип данных.
Dim perv As Integer
Задаем начальное значение этой переменной. Так как мы предполагаем, что нужных элементов в массиве нет, то начальное значение возьмем равным -1.
perv = -1
Организуем цикл для анализа всех элементов массива, от нулевого до последнего, который имеет номер n.
For i = 0 To n
Анализируем очередной элемент массива.
If a(i) = 0 Then
Если он равен нулю, значит, мы нашли первый из подходящих элементов. Запоминаем его номер в специальной переменной.
perv = i
И прерываем цикл, так как продолжать поиск не требуется.
Exit For
End If
Next
После завершения цикла выводим полученные результаты в окно списка. Сначала выводим горизонтальную черту, чтобы зрительно отделить ответы от исходных данных.
lstA.Items.Add("-------------------------------")
Затем анализируем полученный результат.
If perv = -1 Then
Если номер первого искомого элемента равен -1, значит, в массиве не было ни одного элемента, удовлетворяющего поставленному условию. В этом случае вместо ответа надо вывести поясняющий текст.
lstA.Items.Add("В массиве нет нулей")
Else
В противном случае мы выводим найденное значение.
lstA.Items.Add("Первый нулевой элемент: " + _
Str(perv))
End If
Полный текст программы представлен в приложении 27. Примеры работы программы при различных исходных данных приведены на рис. 42.
Рис. 42. Пример работы программы поиска первого нулевого элемента
7.9. Поиск последнего элемента массива, удовлетворяющего некоторому условию
Задача поиска последнего элемента, удовлетворяющего некоторому условию, имеет два разных решения.
Первый способ предлагает анализировать массив от нулевого элемента к последнему. Как только в нем встречается очередной элемент, удовлетворяющий поставленному условию, его номер запоминается в специальной переменной. Но в отличие от предыдущей задачи цикл не прерывается, а продолжается дальше. Так как все номера последовательно записываются в одну и ту же переменную, то после завершения цикла в ней будет храниться номер последнего элемента, удовлетворяющего заданному условию.
Второй способ позволяет свести данную задачу к предыдущей. Очевидно, если анализировать массив в обратном направлении, то есть от последнего элемента к нулевому (от конца к началу), то первый же элемент, удовлетворяющий поставленному условию, и будет искомым элементом. Достаточно запомнить его номер и прервать цикл.
Рассмотрим особенности реализации обоих алгоритмов на примере решения задачи поиска последнего элемента массива, равного нулю.
Первый способ.
Объявляем переменную, в которой будет храниться номер искомого элемента. Очевидно, что эта переменная всегда будет иметь целочисленный тип данных.
Dim posled As Integer
Задаем начальное значение этой переменной. Так как мы предполагаем, что нужных элементов в массиве нет, то начальное значение возьмем равным -1.
posled = -1
Организуем цикл для анализа всех элементов массива, от нулевого до последнего, который имеет номер n.
For i = 0 To n
Анализируем текущий элемент массива.
If a(i) = 0 Then
Если он равен нулю, значит, мы нашли очередной подходящий элемент. Запоминаем его номер в специальной переменной.
posled = i
End If
Next
После завершения цикла выводим полученные результаты в окно списка. Сначала выводим горизонтальную черту, чтобы зрительно отделить ответы от исходных данных.
lstA.Items.Add("-------------------------------")
Затем анализируем полученный результат.
If posled = -1 Then
Если номер искомого элемента равен -1, значит, в массиве не было ни одного элемента, удовлетворяющего поставленному условию. В этом случае вместо ответа надо вывести поясняющий текст.
lstA.Items.Add("В массиве нет нулей")
Else
В противном случае мы выводим найденное значение.
lstA.Items.Add("Последний нулевой элемент: " + _
Str(posled))
End If
Второй способ.
Объявляем переменную, в которой будет храниться номер искомого элемента. Очевидно, что эта переменная всегда будет иметь целочисленный тип данных.
Dim posled As Integer
Задаем начальное значение этой переменной. Так как мы предполагаем, что нужных элементов в массиве нет, то начальное значение возьмем равным -1.
posled = -1
Организуем цикл для анализа всех элементов массива, от последнего, имеющего номер n, до нулевого. Так как движение по массиву идет в обратную сторону, то мы должны задать шаг изменения счетчика. На каждом шаге цикла номер очередного элемента массива будет уменьшаться на единицу. Поэтому шаг цикла надо задать равным -1. Для этого используется ключевое словоStep.
For i = n To 0 Step -1
Анализируем очередной элемент массива.
If a(i) = 0 Then
Если он равен нулю, значит, мы нашли подходящий элемент. Запоминаем его номер в специальной переменной.
posled = i
И прерываем цикл, так как продолжать поиск не требуется.
Exit For
End If
Next
После завершения цикла выводим полученные результаты в окно списка. Сначала выводим горизонтальную черту, чтобы зрительно отделить ответы от исходных данных.
lstA.Items.Add("-------------------------------")
Затем анализируем полученный результат.
If posled = -1 Then
Если номер искомого элемента равен -1, значит, в массиве не было ни одного элемента, удовлетворяющего поставленному условию. В этом случае вместо ответа надо вывести поясняющий текст.
lstA.Items.Add("В массиве нет нулей")
Else
В противном случае мы выводим найденное значение.
lstA.Items.Add("Последний нулевой элемент: " + _
Str(posled))
End If
Полный текст программы представлен в приложении 28. Примеры работы программы при различных исходных данных приведены на рис. 43.
Рис. 43. Примеры работы программы поиска последнего нулевого элемента