Лабораторная работа № 4. Оператор условного перехода

Теоретические сведения

Ранее были рассмотрены команды присваивания, ввода и вывода. С помощью этих команд можно записывать простейшие алгоритмы, содержащие действия, выполняемые одно за другим (линейные алгоритмы). В практических задачах часто бывает необходимо обеспечить выбор одного из альтернативных путей работы алгоритма в зависимости от результатов проверки условия. В этом случае говорят о базовой алгоритмической конструкции – ветвлении. Оператор ветвления позволяет проверить некое условие и в зависимости от результатов проверки выполнить то или иное действие, т.е. он является средством ветвления вычислительного процесса.

Синтаксис оператора:

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. Даны значения двух величин. Выбрать большее из них.

Обозначим данные величины через А и В, результат – С.

Приведем блок-схему алгоритма решения этой задачи. Рассмотрим два способа: (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

Проверка условия

1          

A= Val (InputBox (“Введите число”, ”Ввод числа”))

5

-

-

 

2          

B= Val (InputBox (“Введите число”, ”Ввод числа”))

5

8

-

 

3          

A>=B

5

8

-

5>=8, False (ложь)

4          

C=B

5

8

8

 

5          

MsgBox “Наибольшее число ”& C , ”Вывод результата”

5

8

8

 

(б) аналогично.

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

Эту же задачу можно решить с помощью алгоритма совсем другой структуры, которая представляет собой вложенные ветвления. Написать программный код для решения этой задачи попытайтесь самостоятельно.

Задачи для самостоятельного решения

Каждый студент должен решить либо по две задачи из групп A, Б и одну  – из группы В, либо одну задачу из группы В и одну задачу из группы Г. Привести блок-схемы решения задач из групп Б и Г соответственно.

А

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 км/ч. Через ч в этом же направлении выехал лег­ковой автомобиль со скоростью v2 км/ч. Составить програм­му, определяющую, догонит ли легковой автомобиль грузовой через ч после своего выезда.

21.   Перераспределить значения переменных x и y так, чтобы в x оказалось большее из этих значений, а в y меньшее.

22.   Определить правильность даты, введенной с клавиатуры (число от 1 до 31, месяц от 1 до 12). Если введены некор­ректные данные, то сообщить об этом.

23.   Составить программу, определяющую результат гадания на ромашке “любит не любит”, взяв за исходное данное ко­личество лепестков n.

Б

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). Если будет переполнение, то сообщить об этом, иначе вывести сумму этих чисел.

В

Для данного x вычислить значение функции:

 

1.       

2.       

3.       

4.       

5.       

6.       

7.       

8.       

9.       

10.    

11.    

12.    

Г

1.     Даны действительные числа a, b, c (a > 0). Полностью иссле­довать биквадратное уравнение ax4 + bх2 + с = 0, т.е. если дей­ствительных корней нет, то должно быть выдано сообщение об этом, иначе найти действительные корни, сообщив, сколь­ко из них являются различными.

2.     Дана точка А(х, у). Определить, принадлежит ли она тре­угольнику с вершинами в точках (x1, y1), (x2, y2), (x3, y3).

3.     Написать программу, определяющую, будут ли прямые А1х + В1у + С = 0 и А2х + В2у + С = 0 перпендикулярны. Если нет, то найти угол между ними.

4.     Если сумма трех попарно различных действительных чисел X, Y, Z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух других; в противном случае заме­нить меньшее из X, Y полусуммой двух оставшихся значений.

5.     Написать программу решения системы линейных уравнений
 
a1x + b1y  = c1
  
a2x + b2y = c2

6.     Даны три положительных числа. Определить, можно ли по­строить треугольник с длинами сторон, равным этим числам. Если можно, то ответить на вопрос, является ли он остро­угольным.

7.     Найти координаты точек пересечения прямой y = kx + b и ок­ружности радиуса R с центром в начале координат. В каких координатных четвертях находятся точки пересечения? Если точек пересечения нет или прямая касается окружности, вы­дать соответствующее сообщение.

8.     Заданы координаты вершин прямоугольника: (x1, y1), (x2, y2), (x3, y3), (x4, y4). Определить площадь части прямоугольника, расположенной в I-й координатной четверти.