Программирование разветвляющихся алгоритмов
Для организации разветвления в программе, в Паскале используются следующие операторы:
1. Условный оператор.
2. Оператор варианта.
3. Оператор перехода
Условный оператор
Условный оператор имеет вид:
If Q Then B1 [Else B2];
Блок-схема:
(Else) - +(Then)
|
|
Q - выражение, принимающее логическое значение;
B1, B2 – любые операторы, в единственном числе;
Выполняются:
1. Вычисляется выражение Q, которое имеет логическое значение.
2. Если это значение True, то выполняется оператор B1. Если же Q имеет значение False, то в случае полной формы условного оператора выполняется оператор B1 , а в случае неполной формы управление передается следующему оператору программы.
Так, как операторы B1 и B2 могут быть любыми, а значит и условными, то возникает конструкция двусмысленная:
1
If Q Then If Q1 Then B1 Else B2;
2
Для устранения двусмысленности введено правило, что часть Else относится к ближайшему слева свободному условию. И структура записи следующая:
If Q Then
If Q1 Then
B1
Else
B2;
Если по смыслу задачи необходимо, чтобы оператор понимался в смысле 1 , то его надо поставить в операторные скобки:
If Q Then
Begin
If Q1 Then
B1;
End
Else
B2;
Задача1:
Даны 2 различных числа. Найти максимальное из этих чисел.
Пример:
Исходные данные: A=10, C=15
Результат: Максимальное число =15
Решение:
Program Vet1;
Var A,C,Max:Integer;
Begin
Writeln(’Введите 2 различных числа’);
Readln(A,C);
If A>C Then
Max:=A
Else Max:=C;
Write(’Максимальное число = ’,Max);
End.
Задачи:
1. Даны 2 числа. Вывести первое число, если оно больше второго и оба числа, если это не так.
2. Даны 2 различных числа. Найти C=Max/Min.
3. Составить программу вычисления значения Y по введенному значению X.
Y= (X+2)2 , X>=0
X-2 ,X<0
4. Даны числа А, B, Х. Составить программу вычисления значения Y.
(X+2)2 , X<A
Y= X-2 ,A<=X<=B
2*X ,X>B
5. Даны 3 различных числа. Найти максимальное из этих чисел.
6. Даны 3 числа. Определить сколько среди них нулей.
7. Даны 3 числа. Определить сколько среди них отрицательных и сколько
положительных чисел.
Использование составного оператора
Если по смыслу задачи, в зависимости от условий, надо выполнять либо одну, либо другую группу операторов, то их надо их надо превратить в один составной оператор (заключить в операторные скобки):
Begin
операторы;
End;
If Q Then
Begin
A1;
A2;
:
An;
End
Else
Begin
B1;
B2;
:
Bn;
End;
Задача 2:
Даны 2 различных числа. Вычислить x=(y+z)2; - где y=max*2; z=max/min;
Решение:
Program Vet2;
Var A,C,Max,Y:Integer;
Z,X:Real;
Begin
Writeln(’Введите 2 различных числа’);
Readln(A,C);
If A>C Then
Begin
Y:=A*2;
Z:=A/C;
End
Else
Begin
Y:=C*2;
Z:=C/A;
End;
X:=SQR(Y+Z);
Write(’X = ’,X);
End.
Задача 3.
Даны числа A, C. Решить линейное уравнение A*X=C с полным анализом.
Решение:
Program Vet3;
Var A,C,X:Real;
Begin
Writeln(’Введите 2 числа’);
Readln(A,C);
If A=0 Then
If B=0 Then
Writeln(’X -любое’)
Else
Writeln(’Решений нет’)
Else
Begin
X:=C/A;
Writeln(’X=’,X);
End;
End.
Задачи:
1. Даны X,Y (Х<>Y). Меньшее из этих двух чисел заменить полусуммой, а большее их удвоенным произведением
2. Даны числа A, B, C. Решить уравнение AX2+BX+C=0 с полным анализом.
3. Даны 3 числа. Найти разность большего и меньшего из этих чисел
4. Если сумма трех различных чисел X,Y,Z меньше единицы, то меньшее из X,Y заменить полусуммой Y и Z, иначе большее из X и Y заменить произведением Х*Y.