К разветвляющимся программным структурам относятся оператор if и операторы множественного выбора select.
Условный оператор if…end в общем виде имеет следующую структуру:
i f ЛогическоеВыражение1 then
Операторы1
e lseif ЛогическоеВыражение2 then
Операторы2
…
Else
Операторыn
end
Правила записи логических выражений описаны в п. 1.2.3.
Следует отметить, что во всех операторах разветвлений ключевое слово then может быть опущено.
Эта структура допускает несколько частных вариантов. Простейший – усеченное разветвление, имеет следующий вид:
I f ЛогическоеВыражение
Операторы
End
Напомним, что если ЛогическоеВыражение принимает значение %T
(«Истина»), то выполняются Операторы, составляющие тело структуры if...end. Оператор end указывает на конец перечня Операторов. Операторы в списке разделяются запятой или точкой с запятой. Если ЛогическоеВыражение – %F («Ложь»), то Операторы не выполняются. Эта конструкция может быть записана как в одну строку (однострочный if ), так и в несколько, что соответствует приведенному выше формату оператора.
Ниже приведен пример использования простейшего усеченного разветвления (рис. 1.5.4-7.).
--> // Пример усеченного разветвления --> -->a = 4; -->ifa> 0 r = sqrt(a); end // Одно строковый if , усеченное разв етвление --> r r = 2. |
Рис. 1.5.4-7 Пример усеченного разветвления
Эта конструкция оператора if довольно часто используется при написании программ, однако не всегда удобна, поскольку имеет только одну выполняемую ветвь разветвления. Так, в примере, показанном на рис.1.5.4-7, выполняется следующее: если значение aположительно, то корень вычисляется, а если значение aне положительно, то вычисление корня не происходит, но программа не выдает сообщения об этой ситуации. Для того, чтобы отслеживать ситуации по обеим ветвям разветвления, нежно использовать другую конструкцию оператора if.
Вторая частная конструкция оператора if называется стандартным разветвлением:
I f ЛогическоеВыражение
Операторы1
else
Операторы2
End
Здесь, если ЛогическоеВыражение истинно выполняются Операторы1, в противном случае выполняются Операторы2.
Пример, в котором выполняется стандартное разветвление, приведен на рис.1.5.4-8. Здесь использованы две функции raz1 и raz2, первая из которых реализует стандартное разветвление, выполненное в одну строку, а вторая – в несколько строк и при этом реализуют одинаковые действия. При а=4 выводится значение х=2, а при x=-4 – сообщение: «Подкоренное выражение < 0».
-->// Загрузка сценария РИС15408 выполнение функций raz 1 и raz 2 --> -->clear --> exec('РИС15408.sce'); --> a = 4; x = raz1(a) x = 2. --> -->a = -4; x = raz2(a) Подкоренное выражение < 0 |
Рис. 1.5.4-8 Примеры стандартных разветвлений
Рассмотрим вложенное разветвление на примере программной реализации следующего разветвления:
Для того, чтобы полностью отразить структуру сложного разветвления, была разработана функция с именем raz, а для того чтобы проверить правильность работы функции, организующей разветвления. В примере произведено трехкратное обращение к функции с исходными данными, соответствующими доступу к каждой ветви разветвления.
На рис.1.5.4-9 приведен текст функции raz, реализующей вложенное разветвление, трехкратное обращение к функции raz и результаты.
--> // Загрузка сценария РИС15409 выполнение функции raz --> --> exec('РИС15409.sce'); -->p =raz(-2, 1) // Проверка 1-й ветви разветвления p = 1. --> -->p = raz(3, 1) // Проверка 2-й ветви разветвления -->p=9 p = 9. --> -->p = raz(1, 1)// Проверка 3-й ветви разветвления p = 1. |
Рис.1.5.4-9 Примеры, реализующие вложенное разветвление
Оператор множественного выбора – select используется для осуществления множественного выбора:
select Переменная
caseЗначение1 then Операторы1
caseЗначение2 then операторы2
…
elseОператоры
End
Если Переменная заголовка select имеет значение какого-либо Значение.. ., то выполняется соответствующий ему блок операторов case, в противном случае – список операторов, записанных после else. То есть при выполнении блока case исполняются те Операторы…, для которых Значение совпадает со значением Переменной.
Поясним использование оператора select следующим примером вычисления значения t:
На рис. 1.5.4-10приведена функция multifunc, реализующая множественное разветвление с использованием оператора select, и обращение к ней при исходных данных, позволяющих проверить каждую ветвь разветвления.
--> // Загрузка сценария РИС15410 и выполнение функции multifunc, --> // реализующей множественное разветвление --> -->clear --> exec('РИС15410.sce'); --> r = multifunc(5, 1) // Проверка 1-ой ветви разветвления r = 5. --> r = multifunc(5, 2) // Проверка 2-ой ветви разветвления r = 25. --> r = multifunc(5, -1) // Проверка 3-ей ветви разветвления r = 0.0384615 --> r = multifunc(5, 6) //Проверка 4-ой ветви разветвления r = 0.027027 |
Рис. 1.5.4-10 Обращения к функции multifunc
Базовые разветвляющиеся программные структуры Scilabпозволяют описывать широкий класс задач: нахождение максимального и минимального значения двух переменных; нахождение максимального и минимального значений нескольких переменных; вычисление значений сложных функций, зависящих от сложных условий; выбора различных путей вычислительного процесса и другие.
Рассмотрим несколько простых примеров, реализующие базовые разветвляющие программные структуры.
Реализовать функции, которые присваивают переменной f наибольшее из значений двух переменных x, y (1.5.4-11).
При реализации функции fmax _ a используется стандартное разветвление, а при реализации функции fmax _ b –усеченное.
--> // Загрузка сценария РИС15411 и выполнение функций fmax _ a и fmax _ b --> // реализующих нахождение max из 2-х переменных --> -->clear --> exec('РИС15411.sce', 0); --> r = fmax_a(10, 3) r = 10. --> r=fmax_b(10,3) r = 10. |
Рис. 1.5.4-11 Нахождение максимума двух переменных, реализованное с
помощью стандартной и усеченной разветвляющихся структур
Обратите внимание, что:
Ifx > ythenf = xelsef = y соответствует функции f = max ( x , y ),
Ifx < ythenf = xelsef = y соответствует функции f = min ( x , y ),
Дата: 2019-11-01, просмотров: 299.