Алгоритмическая конструкция ветвление
На практике решение большинства задач не удается описать с помощью программ линейной структуры. При этом после проверки некоторого условия выполняется та или иная последовательность операторов, однако происходит нарушение естественного порядка выполнения операторов. Условный оператор для реализации разветвлений в программе имеет следующую структуру:
If <логическое выражение> Then серия1 Else серия2;
Если логическое выражение, выступающее в качестве условия, принимает значение True (истинно), то выполняются операторы следующие за then (серия1), если False (ложь), то выполняются операторы расположенные после else (серия2).
Поскольку развилка может быть неполной, то возможна и неполная форма записи условного оператора:
If <логическое выражение> Then серия;
Когда выполняется последовательность команд (серия), необходимо использовать так называемые операторные скобки:
Begin
<Оператор 1>;
<Оператор 2>;
...
<Оператор N>
End;
! Точка с запятой после Begin не ставиться.
Вариант условного оператора в этом случае:
If<условие> Then Begin <группа операторов 1> End;
Else Begin < группа операторов 2> End;
! Знак "точка с запятой" не ставится перед служебным словом Else, но операторы в группах отделяются друг от друга этим знаком.
На языке Паскаль условия представляют собой выражения, значением которых является величина логического типа (True - истина или False - ложь). Это может быть как просто переменная указанного типа, так и сложная последовательность высказываний, связанных логическими операциями.
В простых условиях могут применяться знаки операций сравнения: >(больше), <(меньше), =(равно), <>(не равно), >=(больше или равно), <=(меньше или равно).
Пример. (C+D3)>=(D1*(45-2))
В сложных условиях логические выражения строятся с помощью логических операций: and (и), or (или), not (не).
Примеры: (a>b) and (a>c); (Х<=1) or (Y>5) and (a>2); (4*Х-1>0) and (Х+2<3); not (a=b).
!Операции сравнения имеют низший приоритет по сравнению с другими операциями, поэтому отношения в логических выражениях заключают в скобки.
Пример. Из двух чисел необходимо выбрать наибольшее.
ProgramExample;
Var A,B,C : Real; {A,B - для хранения чисел, C - результат}
Begin
Writeln('Введите два числа');
Readln(A,B); {Ввод чисел с клавиатуры}
If A>B Then C:=A Else C:=B; {Если A>B, то результат A сохраняем в С, иначе результат - B}
Writeln(‘Наибольшее число =’,C); {Выводим результат на экран}
End.
Пример.По заданным коэффициентам решить квадратное уравнение
ProgramSq1;
Var A, B, C, D, X1, X2 : Real;
Begin
Writeln ('Введите коэффициенты квадратного уравнения');
Readln (A,B,C);
D:=B*B-4*A*C; {вычисление дискриминанта}
If D<0 Then Writeln ('Корней нет! ')
Else Begin
X1:=(-B+SQRT(D))/2/A;
X2:=(-B-SQRT(D))/2/A;
Writeln ('X1=', X1:8:3, ' X2=',X2:8:3)
End
End.
Условный оператор реализует разветвление вычислительного процесса по двум направлениям, одно из которых осуществляется при выполнении условия, другое - в противном случае. Для реализации разветвлений более чем по двум направлениям необходимо использовать несколько условных операторов. В этом случае говорят о вложенности условных операторов. В случае вложенных ветвлений каждое новое ключевое слово Else относится к ближайшему If.
Пример. Дано действительное число a. Вычислить f(a), если
Program Usl1;
Var х, F : Real;
Begin
WriteLn('Введите действительное число: '); ReadLn(х);
If х <= 0 Then F: = 0 Else
If х <= 1 THEN F: = Sqr(х) - х Else F = Sqr(х) - Sin(Pi * Sqr(х));
WriteLn('Значение функции F(‘,x:5:2,’) = ', F:10:4);
End.
Кроме условного оператора в качестве управляющей структуры довольно часто используется оператор выбора CASE. Эта структура позволяет переходить на одну из ветвей в зависимости от значения заданного выражения (селектора выбора). Ее особенность состоит в том, что выбор решения здесь осуществляется не в зависимости от истинности или ложности условия, а является вычислимым. Оператор выбора позволяет заменить несколько операторов развилки (в силу этого его ещё называют оператором множественного ветвления).
В конструкции CASE вычисляется выражение K и выбирается ветвь, значение метки которой совпадает со значением K. После выполнения выбранной ветви происходит выход из конструкции CASE. Если в последовательности нет метки со значением, равным K, то управление передается внешнему оператору, следующему за конструкцией CASE (в случае отсутствия альтернативы ELSE; если она есть, то выполняется следующий за ней оператор, а уже затем управление передается внешнему оператору).
Запись оператора выбора
Case K OF
A1 : серия 1;
A2 : серия 2;
...
AN : серия N
Else серия N + 1
End;
Любая из указанных серий операторов может состоять как из единственного оператора, так и нескольких (в этом случае, как обычно, операторы, относящиеся к одной метке, должны быть заключены в операторные скобки Begin…End).
Выражение K здесь может быть любого порядкового типа (к таким типам относятся все целые типы, Boolean, Char).
Пример. Найти наибольшее из двух действительных чисел используя, оператор выбора.
Program Maximum;
Var Max, X, Y : Real;
Begin
Write('Введите два неравных числа:');
ReadLn(X, Y);
Case X > Y Of
TRUE : Max := X;
FALSE : Max := Y
End;
WriteLn('Максимальное из двух есть ', Max : 12 : 6)
End.
Задания для практической работы.
Составить программы на языке Pascal.
1. Дано число к- целое. Определить, является ли оно четным (нечетным).
2. Выяснить, имеет ли решение уравнение вида А*х+В=0 в зависимости от параметра А.
3. Вычислить значение функции: х*5 ,если х<=-1
x/5 ,если х>=-1
4. Вычислить значение функции: х*5 ,если х<=-1
x/5 ,если х>=-1
x2 ,если -1<x<1
5. Даны три числа А, В и С. Значение наибольшего из них удвоить.
6. Даны три числа А, В и С. Выяснить существует ли треугольник с длинами сторон А,В,С.
7. Дано число К- целое, трехзначное. Найти сумму цифр этого числа.
8. Даны три числа А , В и С . Выдать их в порядке возрастания.
9. Составьте алгоритм, который по номеру дня недели выдает его название.
10. Составьте алгоритм, который по номеру месяца выдает пору года.
11. Составьте алгоритм, который по кол-ву лет школьника определяет, в каком он учится классе.
Дата добавления: 2015-05-21; просмотров: 2313;