Программирование ветвящихся процессов
Вычислительный процесс называется ветвящимся, если для его реализации предусмотрено несколько направлений (ветвей). Каждое отдельное направление процесса обработки данных является отдельной ветвью вычислений. Ветвление в программе – это выбор одной из нескольких последовательностей команд при выполнении программы. Выбор направления зависит от заранее определенного признака, который может относиться к исходным данным, к промежуточным или конечным результатам. Признак характеризует свойство данных и имеет два или более значений.
Ветвящийся процесс, включающий в себя две ветви, называется простым, более двух ветвей – сложным. Сложный ветвящийся процесс можно представить с помощью простых ветвящихся процессов.
Направление ветвления выбирается логической проверкой, в результате которой возможны два ответа: «да» — условие выполнено и «нет» — условие не выполнено.
Следует иметь в виду, что, хотя на схеме алгоритма должны быть показаны все возможные направления вычислений в зависимости от выполнения определенного условия (или условии), при однократном прохождении программы процесс реализуется только по одной ветви, а остальные исключаются. Любая ветвь, по которой осуществляются вычисления, должна приводить к завершению вычислительного процесса.
На рисунке 4.1 показан общий вид алгоритма с ветвлением.
Рисунок 4.1 – Общий вид алгоритма с ветвлением
В качестве линейного участка 1 часто выступает ввод данных, а в качестве линейного участка 2 – вывод результата.
На Паскале для реализации ветвления используется условный оператор if. Его синтаксис:
if (условие)
then оператор1
else оператор2;
На рисунке 4.2 показан общий вид алгоритма с ветвлением для случая, когда в ветвях находится более одного оператора. В этом случае ветвь в программе помещается в операторные скобки begin – end.
Рисунок 4.2 – Общий вид алгоритма с ветвлением с двумя операторами в ветвях
Фрагмент участка с ветвлением для БСА (см. рисунок 4.2) примет вид:
if (условие)
then begin { Начало ветви ДА }
оператор1;
оператор2;
end { Конец ветви ДА }
else begin { Начало ветви НЕТ }
оператор3;
оператор4;
end; { Конец ветви НЕТ }
На рисунке 4.3 показан общий вид алгоритма со сложным ветвлением.
Рисунок 4.3 – Общий вид алгоритма со сложным ветвлением
Фрагмент программы, отражающий сложное ветвление (см. рисунок 4.3) имеет вид:
if (условие1)
then оператор1;
else if (условие2)
then оператор2
else оператор3;
Задача 2. Вычислить выражение на Паскале. Построить блок-схему алгоритма и написать программу.
Решение. Блок-схема алгоритма показана на рисунке 4.4. В первом символе решения проверяется условие первой ветви системы, во втором символе решения – условие второй ветви решения, в третьем символе решении – условие третьей ветви системы. Если все проверки условия дадут ложный результат, то выведется сообщение об отсутствии решения.
Рисунок 4.4 – Блок-схема алгоритма решения задачи № 2
Текст программы, написанной по блок-схеме алгоритма (см. рисунок 4.4):
Program lab2;
uses crt;
var x,y:real;
begin
clrscr;
writeln('Vvedite x');
readln(x);
if (-1<x) and (x<=0.3)
then begin
y:=(10*cos(x/2))/(3*sin(x));
writeln('y=',y:5:4);
end
else if (0.3<x) and (x<1.1)
then begin
y:=3*x*x*x*x*x*x*x*x*x*x*x*x+7*x*x*x*x*x+6;
writeln('y=',y:5:4);
end
else if (x>=1.1)
then begin
y:=5;
writeln('y=',y:5:4);
end
else writeln('No solution')
end.
Блок-схему (см. рисунок 4.4) можно перестроить так (рисунок 4.5), чтобы можно было сократить количество операторов вывода.
Рисунок 4.5 – Блок-схема алгоритма решения задачи № 2
Текст программы, написанной по блок-схеме алгоритма (см. рисунок 4.5):
Program lab2;
uses crt;
var x,y:real;
begin
clrscr;
writeln('Vvedite x');
readln(x);
if (x<=-1)
then writeln('No solution')
else begin
if (x<=0.3)
then y:=(10*cos(x/2))/(3*sin(x));
else if (x<1.1)
then y:=3*x*x*x*x*x*x*x*x*x*x*x*x+7*x*x*x*x*x+6;
else y:=5;
writeln('y=',y:5:4);
end
end.
Результаты работы программы показаны на рисунке 4.6.
Рисунок 4.6 – Результаты работы программы для задачи № 2