Главная |
страница 1
Логические выражение и ветвления в Паскале Логические выражения и логические переменныеЛогическими константами Паскаля являются true (истина) и false (ложь). Для записи логических выражений используются операции сравнения
Значение логического выражения может быть присвоено переменной логического типа Boolean. Например, Program Example; Var f : Boolean; x : Integer; Begin Write('x='); Read(x); f := x > 3; WriteLn(f) End. В результате работы этой программы на экран будет выведено значение TRUE, если введённое значение x больше 3, или FALSE в противном случае. Для построения сложных логических выражений используются логические операции not, and, or, xor. Not — это логическое отрицание (инверсия). Изменяет значение логического выражения на противоположное: not true равносильно false, not false равносильно true. And — логическое умножение (логическое и, конъюнкция). Пусть A и B — логические выражения. Тогда выражение A and B истинно тогда и только тогда, когда истинны оба операнда: и A, и B. Например, выражение (x>3) and (x<10) истинно при x=5, ложно при x=2 и x=11. Or — логическое сложение (логическое или, дизъюнкция). A or B истинно в случае, когда является истинным хотя бы один из операндов. Например, выражение (x>3) or (x=1) истинно при x=5, x=1 и ложно при x=0. Xor — исключающее или. A xor B является истинным, если только один из операндов: или только A, или только B — является истинным. Например, выражение (x>3) xor (x<10) истинно при x=20, x=0 и ложно при x=5. Наивысшим приоритетом среди логических операций обладает not, после неё следует and, наименьший приоритет у or и xor. Следует отметить, что в Паскале приоритет операций сравнения ниже приоритета логических операций, поэтому при построении логических выражений с несколькими сравнениями используют скобки. Например, (x>=5) and (x<10) Смотрите также примеры выше. В Delphi и FreePascal есть типы данных ByteBool, WordBool и LongBool, переменные которых могут принимать как целочисленные, так и логические значения. Однако предпочтительным для логических переменных является использование типа Boolean. Условный операторУсловный оператор применяется для разветвления процесса вычислений на два направления. Различают ветвление в полной и неполной форме. Ветвление в неполной формеБлок-схема Паскаль да нет логическое выражение оператор1 If логическое выражение Then оператор1 Ветвление в полной формеБлок-схема Паскаль нет да логическое выражение оператор1 оператор2 If логическое выражение Then оператор1 Else оператор2 Внимание! Перед else точка с запятой не ставится. Она является разделителем между двумя операторами. Однако else — это часть условного оператора. Во всех приведённых случаях под «оператор1» и «оператор2» понимается единственный оператор. Если же в какой-либо ветви алгоритма требуется использование нескольких операторов, то применяют конструкцию под названием составной оператор.
Вместо логического выражения можно использовать логическую переменную. Обратите также внимание, что перед end точка с запятой не ставится. Её можно было и поставить, но трактовалась бы она как пустой (т.е. ничего не выполняющий) оператор. При использовании вложенных ветвлений следует помнить, что else относится к ближайшему if. Рассмотрим пример.
Здесь ветвь Else относится к сравнению x и 200. Оператор выбораОператор выбора предназначен для разветвления процесса вычислений на несколько направлений. Этот оператор организует переход на одну из нескольких ветвей в зависимости от значения заданного выражения (селектора выбора). Формат оператора: Case K Of A1: оператор1; A2: оператор2; … AN: операторN Else оператор End Здесь K — выражение-селектор, которое может быть типа перечисления или простого порядкового типа (целого, символьного1), исключая логический. A1, …, AN — константы того же типа, что и K. Они выполняют роль меток. Исполнение оператора выбора начинается с вычисления значения K. Полученное значение сравнивается с константами (метками) и выполняется лишь тот оператор, простой или составной, для которого метка совпадает со значением выражения K. После этого управление передаётся оператору, следующему после End. Если значение K не соответствует ни одной из меток, то выполняется оператор, соответствующий ветви else. Эта ветвь в операторе выбора не является обязательной. Если она опущена и K не совпадает ни с одной из меток, то в операторе выбора не выполняются никакие действия. Одному оператору из состава оператора выбора может соответствовать несколько меток. В этом случае они указываются через запятую или задаётся диапазон в формате минимальное_значение .. максимальное_значение Запрещается дублирование меток, т.е. не может быть двух операторов с одинаковой меткой. Пример использования оператора выбора. Program select; Var x : Integer; Begin WriteLn('Задайте натуральное число'); Read(x); Case x Of 1..3 : WriteLn('от 1 до 3'); 4,5 : WriteLn('4 или 5'); 10 : WriteLn(x) else WriteLn('другое') End End. Примеры решения задачЗадача 1.Даны два угла треугольника в градусах. Определить, существует ли такой треугольник. Если да, то будет ли он прямоугольным. Решение. Сумма углов треугольника равна 180 градусов. Обозначим заданные углы через A и B, вычислим угол C=180–A–B. Он должен быть положительным. Если это не так, то треугольник не существует. Прямоугольным треугольник будет, если один из его углов равен 90 градусов. Углы прямоугольника будем считать целыми числами. Program Triangle; Var A,B,C : SmallInt; Begin WriteLn('Введите известные углы треугольника'); Read(A,B); C := 180–A–B; If C<0 Then WriteLn('Треугольник не существует') Else Begin Write('Существует. '); If (A=90) or (B=90) or (C=90) Then WriteLn('Прямоугольный.') Else WriteLn('Не прямоугольный.') End End. Задача 2Из трёх данных вещественных чисел x, y, z выбрать наибольшее. Решение 1. Используем алгоритм с вложенными полными ветвлениями. Program max3_1; Var x,y,z,max : Real; Begin WriteLn('Введите 3 числа'); Read(x,y,z); If x>=y Then If x>=z Then max:=x Else max:=z Else If y>=z Then max:=y Else max:=z; WriteLn('Максимальное число ', max) End. Решение 2. Используем алгоритм с неполными ветвлениями и сложными логическими выражениями. Program Max3_2; Var x,y,z,max : Real; Begin WriteLn('Введите 3 числа'); 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; WriteLn('Максимальное число ', max) End. Задачи для самостоятельного решения
1 Типы-перечисления и символьный тип нами пока не обсуждались Смотрите также:
Логические выражения и логические переменные
65.06kb.
1. Обьекты, переменные и типы в языках Java и Ruby. Общие черты и отличия. Примеры
99.2kb.
Логические учения Т. Гоббса и Д. Локка
3573.68kb.
Принцесса или тигр? В статье табличным способом и с помощью алгебры высказываний решаются логические задачи «Принцесса или тигр?»
168.83kb.
Средства выражения оценки в текстах газетно-публицистического стиля Актуальность
70.92kb.
Ii. Способы выражения отрицания в древнеанглийском, среднеанглийском и ранненовоанглийском языке
126.73kb.
В первую очередь презенс служит для выражения события в настоящем времени. Но он может служить и для выражения остальных двух временных ступеней
32.22kb.
Приветствия, общие выражения
39.15kb.
Odv программа Windows95/nt для исслдований и графического анализа океанографических батометрических, ctd, и xbt данных
36.78kb.
Флаги и переменные
168.94kb.
«Целое выражение. Преобразование целого выражения в многочлен.»
148.24kb.
Новый подход к построению методов межпроцедурного анализа программ
117.26kb.
|