Лабораторная работа № 15
ОПЕРАТОР УСЛОВНОГО ПЕРЕХОДА В VBA
Цель работы: изучить основы программирования на языке VBA, получить опыт в написании простейших программ, изучить операторы условного перехода.
Методические указания
В практических задачах часто бывает необходимо обеспечить выбор одного из альтернативных путей работы алгоритма в зависимости от результатов проверки условия. В этом случае говорят о базовой алгоритмической конструкции – ветвлении.
Оператор ветвления позволяет проверить некое условие и в зависимости от результатов проверки выполнить то или иное действие, т.е. он является средством ветвления вычислительного процесса.
Синтаксис оператора:
If <условие> Then
<инструкции_1>
Else
<инструкции_2>
End If]
Здесь If, Then, Else, End If – зарезервированные слова VBA (если, то, иначе, конец ветвления);
<условие> – произвольное выражение логического типа;
< инструкции_1>, < инструкции_2> – любые операторы языка VBA.
Условный оператор работает по следующему алгоритму. Вначале вычисляется значение условного выражения <условие>. Если результат есть True (истина), то выполняются <инструкции_1>, а <инструкции_2> пропускаются.Если результат есть False (ложь), наоборот, <инструкции_1> пропускаются, а выполняются <инструкции_2>.
Часть условного оператора, начинающаяся со слова Else, может быть опущена, в этом случае имеет место неполная форма условного оператора. При этом, если условное выражение имеет значение True, выполняются инструкции, стоящие за Then; в противном случае весь оператор пропускается.
Представим условный оператор в виде блок-схемы. В языке блок-схем приняты следующие обозначения:
| Начало или конец алгоритма | |||
Простая команда | ||||
Ввод и вывод данных | ||||
Проверка условия |
Оператор условного перехода в виде блок схемы:
Полная форма | Неполная форма |
Допустимо так же использование вложенных ветвлений. В этом случае синтаксис таков:
If <условие_1> Then
<инструкции_1>
ElseIf <условие_2> Then
<инструкции_2>
…………………………………
Else
<инструкции_n>
End If]
Пример 1
1. Даны значения двух величин. Выбрать большее из них.
Обозначим данные величины через А и В, результат – С.
Приведем блок-схему алгоритма решения этой задачи. Рассмотрим два способа: (a) с использованием полного ветвления; (б) с использованием неполного ветвления.
(а) (б)
Условием, по которому разветвляется алгоритм, является отношение неравенства – логическое выражение. Логические выражения описывают некоторые условия, которые могут выполняться или не выполняться. Логическое выражение может принимать только два значения True (истина) или False (ложь).
Если логическое условие справедливо, то результатом будет логическая величина True и выполнение алгоритма продолжится по стрелке “истина”; в противном случае логическое выражение примет значение False и выполнение алгоритма пойдет по ветви “ложь”.
Соответствующие программы на VBA имеют следующий вид.
(а)
Sub Большее_из_двух ()
Dim A As Integer, B As Integer, C As Integer
A= Val (InputBox (“Введите число”, ”Ввод числа”))
B= Val (InputBox (“Введите число”, ”Ввод числа”))
If A>=B Then
C=A
Else
C=B
End If
MsgBox “Наибольшее число ”& C, ”Вывод результата”
End Sub
Правильность алгоритма можно проверить путем заполнения трассировочной таблицы. Вот так будет выглядеть трассировка алгоритма для исходных значений A=5, B=8.
Шаг | Команда | A | B | C | Проверка условия |
A= Val (InputBox (“Введите число”, ”Ввод числа”)) | - | - | |||
B= Val (InputBox (“Введите число”, ”Ввод числа”)) | - | ||||
A>=B | - | 5>=8, False (ложь) | |||
C=B | |||||
MsgBox “Наибольшее число ”& C, ”Вывод результата” |
(б) аналогично.
Пример 2.
Найти наибольшее значение среди трех величин A, B и C.
Возникает следующая идея алгоритма решения этой задачи: сначала нужно найти большее значение среди A и B и присвоить его какой-то переменной, например, D. Затем наитии большее среди D и C. Это значение можно присвоить той же переменной D.
Решение задачи сводится к двукратному применению уже знакомого алгоритма нахождения большего из двух.
| В структуре алгоритма содержится два последовательных ветвления: первое – полное, второе – неполное. Очевидно, что эту задачу можно решить с использованием алгоритма, содержащего только неполные ветвления. В последнем случае возможны так же несколько вариантов решения в зависимости от характера условия: с простыми условиями и со сложными условиями. Заметим, что сложными условиями называют условные выражения, содержащие логические операции And (и), Or (или). Xor(исключающее или), Not (отрицание). |
Приведем фрагмент программы, реализующей этот алгоритм, с последовательными неполными ветвлениями и сложными логическими выражениями:
If (A>=B) And (A>=C) Then D=A
If (B>=A) And (B>=C) Then D=B
If (C>=A) And (C>=B) Then D=C
Эту же задачу можно решить с помощью алгоритма совсем другой структуры, которая представляет собой вложенные ветвления.
Задания для самостоятельного решения
Выполнить задачи из Заданий 1-3 согласно варианту. Привести блок-схемы решения задач из групп А и Б.
Задание 1
1. Даны три действительных числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень — отрицательные.
2. Даны две точки А(x1, y1) и В(x2, y2). Составить алгоритм, определяющий, которая из точек находится ближе к началу координат.
3. Даны два угла треугольника (в градусах). Определить, существует ли такой треугольник. Если да, то будет ли он прямоугольным.
4. Даны действительные числа x и y, не равные друг другу. Меньшее из этих двух чисел заменить половиной их суммы, а большее — их удвоенным произведением.
5. На плоскости XOY задана своими координатами точка А. Указать, где она расположена: на какой оси или в каком координатном угле.
6. Даны целые числа m, n. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями.
7. Дано трехзначное число N. Проверить, будет ли сумма его цифр четным числом.
8. Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа.
9. Определить, является ли целое число N четным двузначным числом.
10. Определить, является ли треугольник со сторонами a, b, c равносторонним.
11. Определить, является ли треугольник со сторонами a, b, c равнобедренным.
12. Определить, имеется ли среди чисел a, b, c хотя бы одна пара взаимно противоположных чисел.
13. Подсчитать количество отрицательных чисел среди чисел a, b, c.
14. Подсчитать количество положительных чисел среди чисел a, b, c.
15. Подсчитать количество целых чисел среди чисел a, b, c.
16. Определить, делителем каких из чисел a, b, c является число k.
17. Услуги телефонной сети оплачиваются по следующему правилу: за разговоры до А минут в месяц оплачиваются В р., а разговоры сверх установленной нормы оплачиваются из расчета С р. в минуту. Написать программу, вычисляющую плату за пользование телефоном для введенного времени разговоров за месяц.
18. Даны три стороны одного и три стороны другого треугольника. Определить, будут ли эти треугольники равновеликими, т.е. имеют ли они равные площади.
19. Программа-льстец. На экране появляется вопрос “Какой ты: высокий или невысокий? Введи В или Н”. В зависимости от ответа на экране должен появиться текст “Мне нравятся высокие люди!” или “Мне нравятся невысокие люди!”.
20. Грузовой автомобиль выехал из одного города в другой со скоростью v1 км/ч. Через t ч в этом же направлении выехал легковой автомобиль со скоростью v2 км/ч. Составить программу, определяющую, догонит ли легковой автомобиль грузовой через n ч после своего выезда.
21. Перераспределить значения переменных x и y так, чтобы в xоказалось большее из этих значений, а в y — меньшее.
22. Определить правильность даты, введенной с клавиатуры (число — от 1 до 31, месяц — от 1 до 12). Если введены некорректные данные, то сообщить об этом.
23. Составить программу, определяющую результат гадания на ромашке — “любит — не любит”, взяв за исходное данное количество лепестков n.
Задание 2.
1. Написать программу нахождения суммы большего и меньшего из 3 чисел.
2. Написать программу, определяющую по длинам сторон треугольника, является ли он прямоугольным. Если треугольник не прямоугольный, то вычислить косинус угла, лежащего против большей стороны.
3. Найти max{min{a, b}, min{c, d}}.
4. Даны три числа а, b, с. Определить, какое из них равно d. Если ни одно не равно d, то найти max{d-a, d-b, d-c}.
5. Даны четыре точки А1(x1, y1 ), A2(x2, y2), А3(x3, y3), А4(x4, y4). Определить, будут ли они вершинами параллелограмма.
6. Даны три точки А (x1, y1), B(x2, y2), C(x3, y3). Определить, будут ли они расположены на одной прямой. Если нет, то вычислить периметр треугольника ABC.
7. Даны действительные числа а, b, с. Удвоить эти числа, если а<b<с, и заменить их абсолютными значениями, если это не так.
8. На оси ОХ расположены три точки а, b, с. Определить, какая из точек b,c расположена ближе к а.
9. Даны три положительных числа а, b, с. Проверить, могут ли они быть длинами сторон треугольника. Если да, то вычислить площадь этого треугольника.
10. Написать программу решения уравнения ax3 + bх = 0 для произвольных а, b.
11. Дан круг радиуса R. Определить, поместится ли правильный треугольник со стороной а в этом круге.
12. Даны числа x, y, z. Найти значение выражения:
13. Дано число x. Напечатать в порядке возрастания числа: sinx, cosx. lnx. Если при каком-либо x некоторые из выражений не имеют смысла, вывести сообщение об этом и сравнивать значения только тех, которые имеют смысл.
14. Заданы размеры A, B прямоугольного отверстия и размеры X, Y, Z кирпича. Определить, пройдет ли кирпич через отверстие.
15. Составить программу, осуществляющую перевод величин из радианной меры в градусную или наоборот. Программа должна запрашивать, какой перевод нужно осуществить, и выполнять указанное действие.
16. Два прямоугольника, расположенные в первом квадранте, со сторонами, параллельными осям координат, заданы координатами своих левого верхнего и правого нижнего углов. Для первого прямоугольника это точки (x1, y1) и(x2, 0), для второго — (x3, y3), (x4, 0) Составить программу, определяющую, пересекаются ли данные прямоугольники, и вычисляющую площадь общей части, если они пересекаются.
17. В небоскребе N этажей и всего один подъезд; на каждом этаже по 3 квартиры; лифт может останавливаться только на нечетных этажах. Человек садится в лифт и набирает номер нужной ему квартиры М. На какой этаж должен доставить лифт пассажира?
18. Написать программу, которая по заданным трем числам определяет, является ли сумма каких-либо двух из них положительной.
19. Известно, что из четырех чисел a1, a2, a3 и a4 одно отлично от трех других, равных между собой; присвоить номер этого числа переменной n.
20. Составить программу, которая проверяла бы, не приводит ли суммирование двух целых чисел А и В к переполнению (т.е. к результату большему, чем 32767). Если будет переполнение, то сообщить об этом, иначе вывести сумму этих чисел.
Задание 3.
Для данного x вычислить значение функции:
1. | 2. |
2. | 4. |
5. | 6. |
7. | 8. |
9. | 10. |
11. | 12. |
Контрольные вопросы
1. Понятие массива. Как описать массив в VBA?
2. Описание условий на блок-схеме.
3. Условный оператор на языке VBA.
4. Формы условного оператора. Способы описания.