- •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.13. Формирование нового массива из некоторых элементов исходного массива
При решении этой задачи в новый массив переносятся те элементы исходного массива, которые удовлетворяют оставленному условию. Формируемый массив описывается как массив с неизвестным числом элементов. На каждом шаге основного цикла анализируется очередной элемент исходного массива. Если он удовлетворят заданному условию, то размер формируемого массива увеличивается на единицу, и на место последнего элемента записывается проверяемый элемент исходного массива. После завершения основного цикла сформированный массив необходимо вывести, чтобы пользователь мог проконтролировать правильность работы программы. Рассмотрим особенности программной реализации данного алгоритма на примере задачи формирования нового массива из четных элементов исходного массива.
Объявляем новый массив. Так как количество элементов исходного массива, удовлетворяющих заданному условию, заранее неизвестно, то при описании нового массива его размер не указывается. Очевидно, что тип элементов нового массива всегда будет совпадать с типом элементов исходного массива.
Dim b() As Integer
Так как в новый массив переносятся только те элементы исходного массива, которые удовлетворяют заданному условию, то количество элементов в новом массиве, скорее всего, будет отличаться от количества элементов в исходном массиве. Соответственно поменяются и номера элементов. Поэтому нам потребуется переменная для хранения номера последнего элемента в новом массиве. Она будет иметь целочисленный тип.
Dim k As Integer
До начала формирования нового массива в нем не содержится ни одного элемента. Поэтому номер последнего элемента будет находиться за границами массива. Как правило, его задают равным -1.
k = -1
Организуем цикл для проверки всех элементов исходного массива.
For i = 0 To n
Анализируем очередной элемент исходного массива
If a(i) Mod 2 = 0 Then
Если он имеет четное значение, то его необходимо записать в новый массив. При этом на единицу увеличится количество элементов в новом массиве. Следовательно, на единицу увеличится и номер его последнего элемента.
k += 1
Изменяем размер нового массива с помощью оператора ReDim. Чтобы при изменении размера массива не потерялись ранее найденные элементы, необходимо использовать ключевое словоPreserve.
ReDim Preserve b(k)
В новый массив на место последнего элемента записываем анализируемый элемент исходного массива.
b(k) = a(i)
End If
Next
После завершения основного цикла в массиве b()находятся все четные элементы исходного массива. Остается распечатать все элементы нового массива в окне списка. Выводим горизонтальную черту, чтобы зрительно отделить исходные данные от результатов.
lstA.Items.Add("-------------------------------")
Анализируем номер последнего элемента в новом массиве.
If k = -1 Then
Если он остался равным -1, значит, в исходном массиве не было ни одного элемента, удовлетворяющего поставленному условию. Следовательно, в новом массиве нет ни одного элемента. Поэтому вместо элементов массива выведем поясняющее сообщение.
lstA.Items.Add("Новый массив пуст")
Else
В противном случае новый массив содержит хотя бы один элемент, и мы можем организовать вывод массива. Сначала печатаем поясняющий заголовок.
lstA.Items.Add("Новый массив")
Затем последовательно в цикле печатаем все элементы сформированного массива. Обратите внимание, что при выводе массива b()используется переменнаяk(а неn), то есть номер последнего элемента в новом массиве. КонстантаvbTabпозволяет организовать вывод в две колонки.
For i = 0 To k
lstA.Items.Add(Str(i) + vbTab + Str(b(i)))
Next
End If
Полный текст программы представлен в приложении 32. Примеры работы программы при различных исходных данных приведены на рис. 47.
Рис. 47. Примеры работы программы формирования нового массива из четных элементов исходного массива