Логические операции в условном операторе if
Приоритет операций, наиболее часто используемых при вычислении значений логических выражений, в порядке убывания:
1) отрицание (not);
2) конъюнкция (and);
3) дизъюнкция (or);
4) операции отношения (=, >, <, >=, <=, <>).
Для изменения порядка вычисления значения выражения используются круглые скобки. Особенно это относится к операциям отношения, т.к. при самом низком приоритете, их чаще всего необходимо вычислить в первую очередь.
Синтаксис языка программирования Паскаль не позволяет записывать логические выражения, содержащие несколько операций отношения. Такие условия необходимо разбивать на несколько условий, содержащих только одну операцию отношения. Для формирования более сложного логического выражения элементарные условия, содержащие одну операцию отношения, заключаются в круглые скобки и соединяются между собой логической операцией and. Например, логическое выражение , запишется (x>=0)and(x<2).
Пример 4.4. Использование логических операций в условном оператореif. Дано – любое вещественное число. Вычислить значение выражения
programprog;
varx,y:real;
begin
writeln('введитех');
read(x);
if x<0 then y:=sqr(x)*cos(x);
if(x>=0)and(x<=2) then y:=sin(sqr(x));
if x>2 then y:=exp(x);
writeln('y=',y:5:2);
end.
Пример 4.5. Даныx, , – любые вещественные числа. Вычислить значение выражения
programprog;
varx,y,z,f:real;
begin
writeln('Введитеx,y,z'); read(x,y,z);
if x*y<0 then f:=sin(sqr(abs(x*y)))
else
if (x*y>=0)and(x*y<1) then f:=cos(pi)*y
else f:=sin(z)/cos(z);
writeln('f=',f);
end.
Пример 4.6. Даны x и – любые вещественные числа. Найти максимальное и минимальное из этих чисел.
programprog;
varx,y,max,min:real;
begin
writeln('введитех, y');
read(x,y);
if x>y then max:=x
else max:=y;
if x<y then min:=x
else min:=y;
writeln('max=',max:5:2, ' min=',min:5:2);
end.
Пример 4.7. Даны x, , – любые вещественные числа. Определить максимальное и минимальное из этих чисел.
programprog;
varx,y,z,max,min:real;
begin
writeln('введитех, y, z');
read(x,y,z);
if (x>=y)and(x>=z) then max:=x;
if (y>=x)and(y>=z) then max:=y;
if (z>=x)and(z>=y) then max:=z;
if (x<=y)and(x<=z) then min:=x;
if (y<=x)and(y<=z) then min:=y;
if (z<=x)and(z<=y) then min:=z;
writeln('max=',max:5:2,' min=',min:5:2)
end.
Оператор выбора caseof
Конструкция выбора caseof применяется в ситуациях, когда выражение принимает конкретные значения порядкового типа.
Синтаксис оператора caseof
сase выражение of
константа_1: оператор_1;
константа_2: оператор_2;
...
константа_n: оператор_n
else оператор;
end;
Выражение и константы в операторе caseof должны иметь совместимые порядковые типы (кроме типа LongInt) (см. раздел «Выражения, операции и функции»). При выполнении оператора caseof сначала вычисляется значение выражения, стоящего после ключевого слова case. Затем происходит сравнение полученного результата со значениями перечисленных в операторе case констант. Далее выполняется оператор, соответствующий той константе, значение которой совпало со значением выражения. После этого осуществляется выход из оператора. Если совпадения не произошло, тогда выполняется оператор, стоящий после ключевого словаelse. После этого, а также при отсутствииelse, управление передается оператору, следующему за оператором caseof. Структурная схема оператора приведена на рис. 4.1, а.
Обычно после case используется имя переменой. В качестве констант можно указывать: одну константу, несколько констант, перечисленных через запятую, определенный диапазон или их объединение. В случае диапазона указывают начальное значение и через две точки конечное значение диапазона. Повторение констант не допускается.
Если для определенного значения нужно выполнить несколько операторов используют операторные скобки beginend.
Пример. В качестве примера приведем программу, которая в зависимости от номера месяца выдает сообщение о времени года.
program prog;
var k:integer;
begin
writeln('Введитеномермесяца'); read(k);
case k of
1,2,12: writeln('зима');
3..5: writeln('весна');
6..8: writeln('лето');
9..11: writeln('осень');
end;
end.
Контрольные вопросы
1. Приведите формат записи условного оператораif в полной форме.
2. Приведите структурную схему условного оператора if в полной форме.
3. Приведите формат записи условного оператораif в неполной форме.
4. Приведите структурную схему условного оператораif в неполной форме.
5. Приведите формат записи условного оператораif,содержащего составной оператор.
6. Приведите структурную схему условного оператораif, содержащего составной оператор.
7. Перечислите логические операции в порядке убывания приоритета.
8. Влияют ли круглые скобки на порядок вычисления значений логических выражений?
9. Запишите условие на Паскале.
10. Приведите формат записи оператора caseof.
Рекомендуемая литература
1. Павловская, Т.А. Паскаль. Программирование на языке высокого уровня / Т.А. Павловская. – СПб.: Питер, 2010. – 464 с
Глава 5. Операторы циклов
При решении многих задач приходится многократно повторять однотипные действия. Такие процессы называются циклическими. Цикл – это последовательность действий, выполняемых многократно, каждый раз при новых значениях параметров.
В программахв циклах многократно выполняются операторы языка программирования. Один проход цикла называется итерацией цикла. Последовательность операторов, многократновыполняющихся в цикле, называется телом цикла.
В языках программирования для записи циклических процессов используют специальные конструкции – операторы циклов. Операторы циклов существенно сокращают текст программы. В языке программирования Паскаль используются три вида операторов цикла:
1) оператор цикла с параметром for;
2) оператор цикла с предусловием while;
3) оператор цикла с пост условием repeat.
Оператор цикла с параметром for применим, в тех случаях, когда заранее известно число повторений цикла и переменная цикла имеет порядковый тип. Оператор цикла с параметром for не применим, в следующих случаях:
1) переменная цикла имеет не порядковый тип данных, например, вещественный;
2) переменная цикла изменяется на величину отличную от единицы, например, на 0,1;
3) число повторений цикла заранее не известно.
В этих случаях для организации циклов используют операторы цикла с предусловием while и постусловием repeat.
В операторах цикла явно или не явно задается условие повторения цикла. Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение, как отдельной итерации цикла, так и цикла в целом с помощью оператора goto и процедур break и continue.
При вычислении значений переменных в циклах часто используются рекуррентные выражения. Рекуррентное выражение – это выражение, в котором новое значение переменной вычисляется с использованием ее предыдущего значения, например, n:=n+1.Рассмотрим порядок вычисления рекуррентного выражения n:=n+1. Сначала вычисляется значение выражения, стоящего справа от оператора присваивания, т.е. n+1. Затем результат заносится в ячейку памяти по адресу, который определяет имя переменной, стоящей слева от оператора присваивания, т.е. n.Рассмотрим пример. Пусть начальное значение переменной n равно 2. Это значит, что в ячейке памяти, выделенной для этой переменной, хранится число 2. При выполнении оператора присваивания сначала вычисляется значение выражения, стоящего справа от него, в нашем примере n+1. Для этого из ячейки памяти, в которой хранится значение переменной n, будет извлечено ее значение, в нашем примере 2, и к нему прибавится 1, в результате получится 3. Результат запишется в ту же самую ячейку, которая выделена для переменной n, при этом значение, которое хранилось там раньше, заменится на новый результат, в нашем примере 3.