Автор работы: Пользователь скрыл имя, 30 Октября 2013 в 23:53, лабораторная работа
В языке Паскаль алгоритмическая базовая конструкция выбора может быть реализована с помощью двух структурных операторов – IF и CASE, называемых операторами выбора. С их помощью можно выбрать для выполнения один из составных операторов (или ни одного оператора).
В языке Паскаль алгоритмическая базовая конструкция выбора может быть реализована с помощью двух структурных операторов – IF и CASE, называемых операторами выбора. С их помощью можно выбрать для выполнения один из составных операторов (или ни одного оператора).
Оператор IF можно представить в общей форме записи как
IF <Условие> THEN <Оператор 1> ELSE <Оператор 2>,
где конструкция «Условие» есть логическое выражение, которое принимает два значения типа BOOLEAN: TRUE, FALSE (истинно или ложно).
Само логическое выражение складывается из операций сравнения: >, >=, <, <=, =, <>. Результат сравнения может быть TRUE или FALSE.
Логические выражения могут формироваться также и с помощью трех логических операций: NOT, AND, OR. Приоритеты всех используемых в Паскале операций таковы:
Высший: ( )
NOT *, /, DIV, MOD
AND
OR +, -
Низший: >, =, < , >=, <>, <=
В качестве условия может быть использована и логическая переменная, например:
I and J or K ---> (I and J) or K;
not X and Y ---> (not X) and Y, где I, J, K, X, Y – переменные типа BOOLEAN;
(A < B) or (B = 0), где A, B – переменные простого типа.
В операторе IF всегда за словами THEN и ELSE должен следовать один оператор. Этим оператором может быть не только оператор присваивания, но и любой другой. Если хотя бы один из них является снова оператором IF, то полученную конструкцию называют вложением.
П р и м е р :
IF <условие1> THEN <ветвь 1>
ELSE IF <условие2> THEN <ветвь 2>
ELSE <ветвь 3>;
Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, чем составное условие, однако одновременно он уменьшает надежность программы. Не рекомендуется использовать более двух-трех уровней вложения IF. Вложения могут идти и после слова THEN.
Первый способ предпочтительнее, чем второй, так как конструкция THEN-IF менее удобна, чем ELSE-IF. С помощью конструкции ELSE-IF чаще всего осуществляется выбор одного из нескольких альтернативных вариантов. Заметим, однако, что иногда такое вложение можно заменить на последовательность операторов короткой формы IF-THEN. Это видно на следующем примере:
program QUARD;
var A, B, C : real; D : real;
begin
read (A, B, C); D := sqr (B) – 4 * A - C;
1-й вариант |
2-й вариант | |
if D < 0 then write ('Не имеет корней'); |
if D < 0 then write ('Нет корней') else if D = 0 then write ('Один корень') | |
if D = 0 then write ('Один корень'); if D > 0 then write ('Два корня'); |
else write ('Два корня'); | |
|
end.
Рис. 2. Пример программы двух разных вложений
Однако в данном примере 2-й вариант более эффективен, так как имеет на одно сравнение меньше, и в случае D < 0 сразу же дает ответ, не делая последующих проверок.
В Паскале существует специальный оператор, позволяющий сделать выбор из нескольких альтернатив – множественное ветвление, или оператор варианта.
Оператор варианта состоит из выражения и списка операторов, каждому из которых предшествует одна или более констант, называемых константами выбора.
Общая форма записи
CASE <выражение> OF
константы: оператор;
....................
константы: оператор
ELSE <оператор>
END;
Выражение, стоящее между CASE и OF, называется селектором. Константы (значения выражения), предшествующие двоеточию, называются метками случаев. Порядок работы оператора: сначала вычисляется значение селектора, затем выполняется оператор, одна из меток которого совпадает со значением селектора. Все остальные операторы не выполняются, и управление передается следующему после END оператору. В случае короткой формы оператора CASE при несовпадении значения селектора (ключа) ни с одной из констант из списка никакой оператор не подлежит исполнению. Если же в операторе есть строка ELSE, то при несовпадении значения селектора ни с одной константой выполняется оператор, следующий за ELSE.
Выражение «селектор» может относиться к любому скалярному типу, кроме REAL. Метки случаев должны принадлежать тому же типу, что и селектор. Нежелательно, чтобы одна и та же метка появлялась более одного раза в операторе CASE. Если же это произойдет (компилятор не проверяет повторяемость меток), то выполнится тот оператор, который соответствует первому вхождению метки в список констант.
Оператор CASE особенно удобно использовать, во-первых, когда характер действий определяется значениями, которые не попадают в последовательно расположенные интервалы, во-вторых, когда нескольким дискретным значениям селектора соответствует одно и то же действие.
П р и м е р 1. Печать названия десятичных цифр.
program DICITS;
var DIGIT: integer;
begin
writeln ('Введите цифру');
readln (DIGIT);
case DIGIT of
0: writeln ('нуль');
1: writeln ('один');
..................
9: writeln ('девять');
else writeln ('это не цифра');
end;
end.
П р и м е р 2. Печать номера квартала года.
program NUMKVART;
var MESIATZ: 1..12;
begin
write ('Введите номер месяца года – ');
read (MESIATZ);
case MESIATZ of
1, 2, 3: writeln ('Первый квартал');
4, 5, 6: writeln ('Второй квартал');
7, 8, 9: writeln ('Третий квартал');
10, 11, 12: writeln ('Четвертый квартал');
end;
end.
Примечание. В операторе CASE формально нет условий как таковых, однако проверка условий осуществляется в неявном виде на предмет совпадения константы со значением селектора.
Цель работы: научиться решать задачи на разветвляющиеся алгоритмы; научиться использовать в программах условный оператор if и оператор выбора case.
Общие сведения
Алгоритм называется разветвляющимся, если он содержит несколько ветвей, отличающихся друг от друга содержанием вычислений. Выход вычислительного процесса на ту или иную ветвь алгоритма определяется исходными данными задачи.
Перед выполнением работы необходимо ознакомиться с правилами записи логических выражений, операций сравнения, операторов if, case.
Пример. Дано действительное x. Для функции f, график которой представлен на рисунке, вычислить f(x).
Решение задачи.
Математическая модель: функция вычисляется по следующей формуле:
Составим схему алгоритма, детализировав все блоки (рис. 2).
Дальнейшая детализация не требуется. Переводим алгоритм на язык Паскаль.
Program example1;
var x, f:Real;
begin
Write('Введите x: '); Readln(x);
if x<-1 then f:= -x-1 else
if (x>=-1) and (x<0) then f:= x-1 else
if (x>=0) and (x<1) then f:= -x+1 else f:= x+1;
Writeln('F= ',f:6:2);
Readln;
end.
Рис. 3. Блок-схема ветвления в 4-х направлениях
Варианты заданий
Задание 1. Используя оператор if, вычислить заданное выражение для данных типа Integer:
а) b)
c) d)
Задание 2. Найти алгоритм решения задачи и реализовать его с помощью оператора (операторов) if-then-else:
Задание 3. Используя оператор выбора, составить программы решения следующих задач.