Базовые алгоритмы разветвляющихся структур и примеры их программирование
Алгоритмы разветвляющихся структур позволяют описывать широкий класс задач:
· Вычисление значений сложных функций, зависящих от условий.
· Нахождение максимума и минимума среди нескольких переменных.
· Выбора различных путей вычислительного процессаи т.д.
В примерах 4.4.3-1 – 4.4.3-6 описаны алгоритмы и процедуры наиболее часто встречающихся задач, включающие базовые алгоритмы разветвляющих структур.
Ввиду сложности понимания и оформления процедур-Sub и процедур-Function необходимо сделать несколько замечаний.
Если процедура не содержит ни входных, ни выходных параметров (является автономной функционально полной функцией), то она может быть оформлена как процедура-Sub и как процедура-Function.
Если процедура содержит несколько входных параметров (с атрибутом ByVal) и несколько выходных параметров (с атрибутом ByRef), два и более, то эту процедуру следует оформлять как процедуру-Sub.
Если процедура содержит несколько входных параметров (с атрибутом ByVal) и один выходной параметр (с атрибутом ByRef), то она может быть оформлена и как процедура-Sub, и как процедура-Function.
Этими замечаниями воспользуемся при написании процедур следующих примеров.
Пример 4.4.3-1.Написать процедуру вычисления значения функции:
1, если x = 0;
y(x)=
Sin(x), если х > 0 или х < 0, где x – вводимое значение.
Схема алгоритма и программный код процедуры приведены на рис. 4.4.3-1. Процедуры vvodDbl2() и vivodDbl2() взяты из 4.3.4-2.
Function Pr431() As Double Dim x As Double Dim y As Double x = vvodDbl2("Ввод x = ",TextBox1) If x = 0 Then y = 1 Else y = Sin(x) vivodDbl2(у, " у= ",TextBox2) Return y End Function |
Рис.4.4.3-1. Схема алгоритма и программный код процедуры Pr431()
проекта Пример 4.3-1
Процедура-Function Pr431()может быть вызвана, как на рис. 4.4.3-2.
Dim YY As Double YY=Pr431() |
Рис.4.4.3-2. Пример вызова процедуры Pr431()
проектаПример 4.3-1
Function Pr433(ByVal x As Double) As Double Dim y As Double If x = 0 Then y = 1 Else y = Sin(x) Return y End Function |
Рис.4.4.3-3. Схема алгоритма и программный код процедуры Pr433()
проектаПример 4.3-1
Если процедура-Functionне будет содержать ввода и вывода данных, то она будет выглядеть, как на рис. 4.4.3-3. В этом случае необходимо использование параметра функции для передачи значения x в вызываемую процедуру-Function Pr433().
Процедура-Function Pr433() может быть вызвана из любой другой процедуры или из модуля формы, например, как на рис. 4.4.3-4.
Dim YY, x As Double x = vvodDbl2("Ввод x=", TextBox1) YY = Pr433( x ) vivodDbl2(YY," YY", TextBox2) |
Рис.4.4.3-4. Пример вызова процедуры Pr433()
проектаПример 4.3-1
Оформим решение примера как процедуру-Sub. Программный код процедуры-Subи соответствующее обращение к ней приведены на рис. 4.4.3-5 и рис. 4.4.3-6 соответственно. При создании процедуры типа Sub необходимо ввести еще один параметр yy, который передает в процедуру значение параметра по ссылке (ByRef), так как именно через этот параметр происходит возврат результата работы процедуры-Sub в вызывающую процедуру. Здесь xx и yy – фактические параметры, на которые заменяются формальные параметры x и y при работе (вызове) процедуры Pr435( ).
Sub Pr435(ByVal x As Double, ByRef y As Double) If x = 0 Then y = 1 Else y = Sin(x) End Sub |
Рис.4.4.3-5. Схема алгоритма и программный код процедуры Pr435()
проектаПримера 4.3-1
Dim XX, YY As Double XX=vvodDbl2("Ввод x=", TextBox1) Pr435( XX, YY) vivodDbl2(YY,"Значение функции YY", TextBox2) |
Рис. 4.4.3-6. Схема алгоритма и программный код процедуры Pr435()
проектаПример 4.3-1