- •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
- •Список литературы
10.6. Формирование нового массива из некоторых элементов исходного массива
В качестве примера возьмем задачу формирования массива городов, в которых дневная температура выше средней. Эта задача решается в два этапа. На первом этапе вычисляется средняя дневная температура. Для этого находится сумма всех дневных температур и делится на количество городов. На втором этапе происходит непосредственное формирование нового массива. Анализируется каждый элемент исходного массива. Если дневная температура в этом городе больше средней, то он переносится в новый массив. Рассмотрим особенности программной реализации этого алгоритма.
Начнем с описания необходимых переменных. Для решения задачи нам потребуется еще один массив. В него мы перенесем те элементы исходного массива, которые будут удовлетворять оставленному условию. Другими словами, это результирующий массив. Очевидно, что тип элементов в этом массиве должен совпадать с типом элементов в исходном массиве.
Dim b() As Gorod
В отдельной переменной будем хранить номер последнего элемента в формируемом массиве.
Dim k As Integer
Для вычисления средней дневной температуры нам необходимо вычислить сумму всех дневных температур. Значение этой суммы будем записывать в специальную переменную.
Dim Summa As Integer
Для средней дневной температуры заведем отдельную переменную. Так как средняя температура получается в результате деления, то эта переменная должна иметь рациональный тип данных.
Dim Sred As Single
Первый этап решения задачи – это вычисление средней дневной температуры. Для этого необходимо вычислить сумму всех дневных температур. Задаем начальное значение суммы.
Summa = 0
Организуем цикл для обработки всех элементов исходного массива.
For i = 0 To n
На каждом шаге цикла добавляем очередное значение дневной температуры к ранее накопленной сумме.
Summa += a(i).Den
Next
После завершения цикла можно вычислить среднее значение дневной температуры. Для этого необходимо найденную сумму разделить на количество городов. Заметим, что n– это номер последнего города. Так как нумерация городов в массиве идет с нуля, то количество городов будет на единицу больше, чем номер последнего элемента массива.
sred = Summa / (n + 1)
Выводим горизонтальную черту, чтобы зрительно отделить промежуточные результаты от исходных данных.
lstGorod.Items.Add("-------------------------------")
Выводим значение средней дневной температуры, чтобы пользователь мог проконтролировать правильность работы программы.
lstGorod.Items.Add("Средняя дневная температура:" + _
Str(Sred))
Переходим ко второму этапу – формированию нового массива. До начала формирования массив пуст. В нем не содержится ни одного элемента. Поэтому номер последнего элемента в этом массиве находится за его пределами и равен -1.
k = -1
Организуем цикл для обработки всех элементов исходного массива.
For i = 0 To n
На каждом шаге цикла анализируем очередной город.
If a(i).Den > Sred Then
Если дневная температура в этом городе больше средней, то мы должны перенести всю информацию об этом городе в новый массив. При этом номер последнего элемента в новом массиве увеличится на единицу.
k += 1
Изменяем размер результирующего массива. Использование ключевого слова Preserveпозволит нам сохранить в массиве все ранее найденные элементы.
ReDim Preserve b(k)
В новый массив на последнюю позицию записываем анализируемый элемент. Обратите внимание на то, что элемент записывается целиком, хотя сравнение проводится только по одному полю. Это делается для того, чтобы в новом массиве сохранялась вся информация о городе, а не только значение дневной температуры.
b(k) = a(i)
End If
Next
После завершения цикла выводим полученный массив. Сначала печатаем горизонтальную черту, чтобы зрительно отделить полученные результаты от исходных данных.
lstGorod.Items.Add("-------------------------------")
Затем печатаем поясняющий заголовок и еще одну горизонтальную черту.
lstGorod.Items.Add("Результирующий массив")
lstGorod.Items.Add("-------------------------------")
Анализируем номер последнего элемента в сформированном массиве.
If k < 0 Then
Если номер последнего элемента меньше нуля, значит, в новом массиве нет ни одного элемента. Поэтому вместо значений элементов массива выводим поясняющее сообщение.
lstGorod.Items.Add("Таких городов нет")
Else
В противном случае, организуем цикл для вывода полученного массива.
For i = 0 To k
На каждом шаге цикла с помощью метода Print(см. раздел 10.1) формируем строку из данных, записанных в очередном элементе массива. Эту строку выводим в окно списка.
lstGorod.Items.Add(b(i).Print)
Next
End If
Полный текст программы представлен в приложении 50. Пример работы программы приведен на рис. 68.
Рис. 68.Пример работы программы формирования нового массива структур из элементов исходного массива