Алгоритмизация и программирование разветвляющихся алгоритмов

Алгоритмизация и программирование разветвляющихся алгоритмов

Разветвляющимся называется алгоритм, в котором некоторые действия (в программе операторы) могут выполняться один раз или не выполняется в зависимости от заданного условия.

Для реализации разветвляющегося алгоритма в языке VBA есть два оператора:

Ifусловный оператор, Select Caseоператор выбора.

Эти операторы влияют на порядок выполнения других операторов программы.

Для записи условий в операторе if используются логические выражения.

  1. Логические выражения

Л.в. состоят из арифметических выражений, операций отношения и логических операций. Они имеют тип Boolean и могут принимать одно из двух значений: True или False.

Операции отношения (= ; <> ; < ; <= ; > ; >=) выполняют сравнение двух операндов и определяют истинно выражение (его значение true) или ложно (его значение false).

a:=5; и b:=7; a<=b – true, a a=b – false

Логические операции (not; and; or) используются для образования сложных логических выражений. Операнды логических операций должны иметь логический (булевский) тип. Приоритет логических операций ниже, чем операций отношения.

Not – логическое отрицание.

Синтаксис:

not (<логическое выражение>)

Результат операции истина, если значение операнда ложь и наоборот.

Пример: not (a

And – логическое И.

Синтаксис:

(<логическое выражение 1>) and (<логическое выражение 2>)

Результат операции истина, если оба операнда имеют значение истина, и ложь в противном случае.

Пример: (a=7) and (b>3) – false

Or – логическое ИЛИ.

Синтаксис:

<логическое выражение 1> or <логическое выражение 2>

Результат операции истина, если хотя бы один из операндов имеет значение истина, и ложь, если оба операнда имеют значение ложь.

Пример: a=7 or b>3 – true

Примеры: Записать логическое выражения, которое имеет значение true, если:

  1. значение переменной x принадлежит полуинтервалу (a;b]

x>a and x<=b

  1. значение переменной x находится вне полуинтервала [a;b)

x<=a or x>b

Точка с координатами (х; y) находится внутри квадрата со стороной 1 x>=0 and x<=1 and y>=0 and y<=1

  1. Даны два числа a и b,

  • они оба положительные

a>0 and b>0

  • хотя бы одно из них положительное

a>0 or b>0

  • нет ни одного положительного

a<=0 and b<=0

2. Условный оператор If

Имеет две формы: полную и сокращённую.

Для записи условий используются логические выражения.

Выполнение оператора:

  1. Если значение логического выражения, записанного в условии true, то выполняется блок операторов 1, если false – блок операторов 2.

  2. Если значение логического выражения true, то выполняется блок операторов 1, если false –оператор никаких действий не выполняет и происходит переход к следующему за If оператору.

При записи алгоритмов на языке VBA для каждой формы можно использовать однострочную и блочную структуры

Если каждый из блоков состоит только из одного оператора, то удобнее использовать при записи оператора if однострочную структуру.

Для полной формы:

If <условие> Then < оператор1> Else < оператор2>

Для сокращенной формы:

If <условие> Then < оператор1>

Если хотя бы один из блоков содержит более одного оператора, то необходимо использовать блочную структуру.

Для полной формы:

If <условие> Then

< Блок операторов 1>

Else

< Блок операторов 2>

End If

Для сокращенной формы:

If <условие> Then

< Блок операторов1>

End If

Пример: If (x>=10) and (x<=20) Then

MsgBox (‘Значение x в интервале [10,20] ‘)

Else

MsgBox (‘Значение x вне интервале [10,20] ‘)

End If

Операторы If могут быть вложены в другие операторы If.

If <условие 1> Then

If < условие 2> Then

<Блок операторов 1>

Else

<Блок операторов 2>

End If

Else

<Блок операторов 3>

End If

Если по ветке Else каждый раз проверяется условие, то можно использовать сжатую структуру оператора If.

If <условие 1> Then

<Блок операторов 1>

Else If < условие 2> Then

<Блок операторов 2>

Else If < условие 3> Then

<Блок операторов 3>

Else

<Блок операторов 4>

End If

Пример:

Найти максимум из чисел a, b, c.

Пример 1: Вычислить значение функции и определить номер формулы, по которой она вычислялась.

Таблица используемых переменных

Имя переменной в задаче

Имя переменной в программе

Тип переменной

Комментарий

x

x

вещественный

аргумент функции, исходное данное

y

y

вещественный

значение функции, результат

n

byte

N формулы, результат

Sub prim2 ( )

Dim x As Single, y As Single

Dim n As byte

x = InputBox ("Введи x", "Ввод исходных данных")

MsgBoxx=” & x , , “Ввод”

Cells(1, 2) = "Исходные данные"

Cells(2, 2) = "x=" & x

If x >=-5 And x < 1 Then

y = Sqr (Abs(x))

n = 1

Else

If x > 1 And x <> 10 Then

y = x ^ 3

n = 2

Else

y = 2 * x^2 + 1

n = 3

End If

End If

MsgBox “y=” & y & “ N формулы” & n , , “Вывод

Cells(3, 2) = "Результаты"

Cells(4, 2) = "y=" & y

Cells(4, 3) = "N формулы=" & n

End Sub

Тесты

Для задач с разветвляющимися алгоритмами тесты должны быть в каждом интервале вычисляемой функции и в каждой точке ветвления (значение аргумента, при котором изменяется выражение для вычисления функции)

x y N формулы

-6 73 3

-5 2,… 1

0 0 1

1 3 3

2 8 2

10 201 3

11 1331 2

Вывод тестов в ячейки рабочего листа

Для того, чтобы вывести несколько тестов в разные ячейки рабочего листа, можно ввести как исходные данные номер строки и номер столбца, в которые будут выводиться результаты, и использовать эти номера при выводе.

Пример:

k = InputBox ("Введите номер строки для вывода")

……………………..

Cells(k, 1) = "x=" & x

Cells(k, 2) = "y=" & y

Cells(k, 3) = "N формулы=" & n

Пример 2. Даны числа a, b. Если a<0, то найти min (a, b), если a=0, то найти max (a, b), в противном случае каждое число увеличить на 50%.