
- •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.11. Замена всех элементов массива, удовлетворяющих некоторому условию
Эта задача во многом похожа на предыдущую. Сначала необходимо вычислить нужное значение, а затем заменить на него все элементы массива, удовлетворяющие поставленному условию. Единственное отличие заключается в том, что замена происходит в цикле, так как в массиве может быть несколько элементов, подлежащих замене. При этом на каждом шаге анализируется очередной элемент массива. Если он удовлетворяет заданному условию, то происходит его замена. Очевидно, что массив необходимо выводить дважды. До и после преобразования, чтобы пользователь мог проконтролировать правильность работы программы.
Рассмотрим особенности программой реализации этого алгоритма на примере задачи замены всех элементов, равных нулю, на -1.
Начнем с объявления необходимых переменных. Так как в массиве может не быть ни одного элемента, равного нулю, то нам потребуется переменная, в которой будет храниться количество выполненных замен. Очевидно, что эта переменная будет иметь целочисленный тип данных.
Dim kol As Integer
До начала преобразования количество выполненных замен полагаем равным нулю, так как еще не было выполнено ни одной замены.
kol = 0
Организуем цикл для обработки всех элементов исходного массива.
For i = 0 To n
На каждом шаге цикла анализируем очередной элемент массива.
If a(i) = 0 Then
Если этот элемент равен нулю, значит, его необходимо заменить на -1.
a(i) = -1
Соответственно количество выполненных замен увеличивается на единицу.
kol += 1
End If
Next
После завершения цикла выводим полученные результаты в окно списка. Сначала выводим горизонтальную черту, чтобы зрительно отделить исходные данные от результатов.
lstA.Items.Add("-------------------------------")
Затем анализируем количество выполненных замен.
If kol = 0 Then
Ели это количество равно нулю, значит, в массиве не было ни одного элемента, равного нулю. Следовательно, исходный массив не изменился, и выводить его не надо. Поэтому вместо преобразованного массива мы выводим поясняющий текст.
lstA.Items.Add("В массиве нет нулей")
Else
В противном случае, если замены были, выводим поясняющий заголовок.
lstA.Items.Add("Измененный массив")
Затем последовательно в цикле печатаем все элементы измененного массива. Использование константы vbTabпозволяет организовать вывод в две колонки.
For i = 0 To n
lstA.Items.Add(Str(i) + vbTab + Str(a(i)))
Next
End If
Полный текст программы представлен в приложении 30. Примеры работы программы при различных исходных данных приведены на рис. 45.
Рис. 45. Примеры работы программы заменяющей все нулевые элементы массива на -1
7.12. Перестановка местами двух элементов массива
Задача перестановки местами двух элементов массива решается тем же способом, что и задача обмена значений двух переменных, рассмотренная в разделе 4.4. Для перестановки местами двух элементов массива нам необходимо знать номера этих элементов. Перед перестановкой необходимо проверить, существуют ли в массиве элементы с такими номерами, не выходят ли эти номера за границы массива. Если перестановка возможна, то для ее проведения нам потребуется дополнительная переменная, в которой временно будет храниться значение одного из переставляемых элементов. Очевидно, что массив надо будет выводить дважды: до и после перестановки элементов, чтобы пользователь мог проконтролировать правильность работы программы.
Рассмотрим особенности реализации этого алгоритма. Номера переставляемых элементов будем вводить с клавиатуры, используя функцию InputBox.
Начинаем с объявления переменных. Номера переставляемых элементов будем хранить в переменных k и p, которые будут иметь целочисленный тип данных.
Dim k, p As Integer
Для перестановки элементов массива нам потребуется дополнительная переменная, в которой будет храниться значение одного из переставляемых элементов. Тип этой переменной всегда будет совпадать с типом элементов массива.
Dim z As Integer
Вводим номер первого переставляемого элемента. При вводе нам необходимо организовать проверку, чтобы пользователь не мог ввести номер, находящиеся за пределами массива. Для этого достаточно потребовать, чтобы вводимое значение находилось в диапазоне от 0 до nвключительно, гдеn– номер последнего элемента массива.
Do
k = Val(InputBox("Введите номер элемента <=" + _
Str(n)))
Loop Until k >= 0 And k <= n
Аналогичным образом вводим номер второго переставляемого элемента.
Do
p = Val(InputBox("Введите номер элемента <=" + _
Str(n)))
Loop Until p >= 0 And p <= n
В дополнительной переменной сохраняем значение первого из переставляемых элементов.
z = a(k)
На место этого элемента записываем значение второго переставляемого элемента массива.
a(k) = a(p)
А на место второго элемента записываем старое значение первого элемента, сохраненное в дополнительной переменной.
a(p) = z
В результате элементы массива поменялись местами. Теперь измененный массив необходимо вывести в окно списка. Сначала выводим горизонтальную черту, чтобы зрительно отделить исходные данные от результатов.
lstA.Items.Add("-------------------------------")
Печатаем поясняющий заголовок.
lstA.Items.Add("Измененный массив")
Затем последовательно в цикле печатаем все элементы измененного массива. Использование константы vbTabпозволяет организовать вывод в две колонки.
For i = 0 To n
lstA.Items.Add(Str(i) + vbTab + Str(a(i)))
Next
Полный текст программы представлен в приложении 31. Пример работы программы приведен на рис. 46.
Рис. 46. Пример работы программы, переставляющей местами два элемента массива