- •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
- •Список литературы
6.2.2. Обработка совокупности чисел с неизвестным числом элементов
Другая область использования циклов с условием – это задачи обработки совокупности чисел, в которых количество элементов заранее неизвестно. Существует два вида таких совокупностей. В первом случае ввод чисел прекращается с появлением элемента, имеющего некоторое заранее заданное значение, например, ноль. Во втором случае ограничение на значение элементов отсутствует, но после ввода каждого элемента пользователь отвечает на вопрос, хочет ли он дальше вводить элементы совокупности. Иногда этот вопрос может задаваться не после ввода очередного элемента, а перед ним. Это определяет вид используемого цикла. Если вопрос задается перед вводом элемента, применяется цикл с предусловием. Если вопрос задается после ввода элемента, применяется цикл с постусловием. Алгоритмы обработки совокупности, описанные в разделе 6.1.3, не зависят от ее вида и способа ввода. Поэтому рассмотрим два частных случая обработки совокупностей с неизвестным числом элементов.
Найти произведение всех элементов совокупности. Ввод чисел прекращается при появлении элемента, равного нулю.
Данную задачу целесообразно решать, используя цикл с предусловием. Так как совокупность заканчивается нулевым элементом, то, очевидно, что последний введенный элемент (ноль) в произведение включать не следует. Поэтому проверка введенного значения должна предшествовать его включению в общее произведение. Элементы совокупности будем вводить, используя функцию InputBox. Элементы совокупности и результаты вычислений будем выводить в окно списка с именемlstA.
Для решения задачи нам потребуются следующие переменные: a– элемент совокупности,proiz– искомое произведение,kol– количество элементов в совокупности.
Dim a, proiz, kol As Integer
Очищаем окно списка от результатов предыдущих запусков программы.
lstA.Items.Clear()
Задаем начальные значения для произведения и количества.
proiz = 1
kol = 0
Вводим первый элемент совокупности.
a = Val(InputBox("Введите элемент совокупности"))
Проверяем, равен ли введенный элемент нулю. Если да, то выполнение цикла прекращается.
Do Until a = 0
Если элемент совокупности не равен нулю, то выводим его значение в окно списка.
lstA.Items.Add(Str(a))
Увеличиваем количество элементов совокупности на единицу.
kol += 1
И включаем элемент совокупности в общее произведение.
proiz *= a
Просим пользователя ввести очередной элемент совокупности.
a = Val(InputBox("Введите элемент совокупности"))
Этот элемент будет обработан при следующем повторе тела цикла.
Loop
После завершения основного цикла, выводим в окно списка горизонтальную черту, которая позволит зрительно отделить элементы совокупности от результатов вычислений.
lstA.Items.Add("----------------------------")
Проверяем, есть ли в совокупности ненулевые элементы.
If kol = 0 Then
Если количество элементов в совокупности равно нулю, значит, первый же введенный элемент был равен нулю. В этом случае мы не можем вычислить произведение элементов. Поэтому вместо значения произведения выводим поясняющее сообщение.
lstA.Items.Add("Нет ненулевых элементов")
Else
В противном случае, выводим значение вычисленного произведения.
lstA.Items.Add("Произведение = " + Str(proiz))
End If
Полный текст программы приведен в приложении 15. Примеры работы программы представлены на рис. 29.
Рис. 29.Примеры работы программы обработки совокупности, ограниченной нулем
Найти сумму все элементов последовательности. После ввода каждого числа пользователю задается вопрос, хочет ли он продолжить ввод чисел.
Для решения этой задачи будем использовать цикл с постусловием, так как вопрос пользователю задается после ввода очередного элемента. Сам алгоритм вычисления суммы элементов совокупности ничем не отличатся от аналогичного алгоритма, разработанного для совокупности с известным числом элементов. Элементы совокупности будем вводить, используя функцию InputBox. Элементы совокупности и результаты вычислений будем выводить в окно списка с именемlstA.
Для решения задачи нам потребуются три целочисленных переменных: a– элемент совокупности,summa– искомая сумма элементов,otvet– для хранения и обработки ответа пользователя на запрос о повторном вводе.
Dim a, summa, otvet As Integer
Очищаем окно списка от результатов предыдущих запусков программы.
lstA.Items.Clear()
Задаем начальное значение суммы.
summa = 0
Организуем основной цикл.
Do
Вводим очередной элемент совокупности.
a = Val(InputBox("Введите элемент совокупности"))
Выводим его значение в окно списка.
lstA.Items.Add(Str(a))
Добавляем значение элемента совокупности к ранее накопленной сумме.
summa += a
Спрашиваем у пользователя, хочет ли он еще вводить элементы совокупности.
otvet = MsgBox("Еще вводить числа?", 32 + 4)
Анализируем ответ пользователя. Если пользователь ответил «Нет», то в переменную otvetбудет записано число 7 (см. раздел 4.10). В этом случае основной цикл завершает свою работу.
Loop Until otvet = 7
После завершения основного цикла, выводим в окно списка горизонтальную черту, которая позволит зрительно отделить элементы совокупности от результатов вычислений.
lstA.Items.Add("----------------------------")
В окно списка выводим вычисленную сумму всех элементов совокупности.
lstA.Items.Add("Сумма = " + Str(summa))
Полный текст программы представлен в приложении 16. Пример работы программы приведен на рис. 30.
Рис. 30.Пример обработки совокупности с неизвестным числом элементов