Логические выражения. Программирование ветвлений
Результатом логического выражения является логическое значение: .TRUE. или .FALSE. Простейшей формой логического выражения является отношение. Отношение производит сравнение значений двух арифметических или символьных выражений. Отношения являются аналогами математических неравенств, например: x>0, y<10 и т.п. Знаки операций отношения в Фортране могут быть записаны в двух формах: мнемонической и символьной. меньше: .LT. или < меньше или равно: .LE. или <= больше: .GT. или > больше или равно: .GE. или >= равно: .EQ. или = = не равно: .NE. или /= Если в выражении отношения один операнд имеет вещественный, а другой целый тип, то перед выполнением операции целочисленный операнд приводится к вещественному типу. При сравнении комплексных величин можно применять только две операции отношения: .NE. (/=) и .EQ. (= =). Пример 1: real ::x=1.3, y= -4.6 logical flag flag = x > y ! .TRUE. flag = x > abs(y) ! .FALSE. Приоритет операций отношения ниже, чем арифметических операций. Например, в выражении X+Y>2*Y можно арифметические выражения в скобки не заключать, так как они сосчитаются до выполнения операции отношения. Логическое выражение состоит из операндов логического типа, связанных логическими операциями и круглыми скобками. Результатом его вычисления является логическое значение .TRUE. или .FALSE. Операндами могут быть логические константы, переменные, функции, выражения отношения. Логические операции: .NOT. логическое НЕ (отрицание); .AND. логическое И; .OR. логическое ИЛИ; .XOR. логическое исключающее ИЛИ; .EQV. эквивалентность; .NEQV. неэквивалентность. Все логические операции, кроме отрицания, являются бинарными. Логическая операция .NOT. является унарной и располагается перед операндом. В таблице приведены результаты логических операций над логическими переменными х и у, принимающими значения "истина" (И) и "ложь" (Л). Таблица истинности
Приоритет логических операций ниже, чем операций отношений. В свою очередь у логических операций имеется своя иерархия рангов. Стоящие подряд в выражении операции отношения и логические операции одинакового старшинства выполняются слева направо. Пример 2. Математическому неравенству 1≤ x ≤ 7 соответствует следующее логическое выражение: (1<= x).and.(x<=7). Пример 3. Записать условие принадлежности точки с координатами (x, y) области, лежащей внутри кольца с внешним радиусом R1и внутренним радиусом R2 с центром в начале координат real x, y, R1, R2 logical g g=(x*x+y*y<R1*R1).and.(x*x+y*y>R2*R2) Значение переменной g будет .true., если точка принадлежит заданной области. Ветвление Ветвление – алгоритмическая структура, осуществляющая выбор одного из возможных направлений выполнения алгоритма в зависимости от значения некоторых условий с последующим выходом на общее продолжение. В Фортране существуют четыре вида программных конструкций, реализующих ветвления. Их будем называть так: • если - то; • если - то - иначе; • если - то - иначе - если; • выбор по ключу. Ветвление «если - то» реализует неполное ветвление и записывается на Фортране с помощью конструкции IF THEN ENDIF: [имя:] IF(логическое_выражение) THEN БОК END IF [имя] Ветвление "если - то" работает так: • вычисляется значениелогического выражения; • если оно истинно, то выполняется БОК (Блок Операторов и Конструкций) затем происходит выход из ветвления; • если оно ложно, то управление передается на следующий оператор, стоящий после ветвления. Конструкция может иметь имя, отделяемое от IF двоеточием. В таком случае это же имя должно быть повторено в конце конструкции. Например: swap: if(a < b) then c=a; a=b; b=c !в a – максимальное значение a и b endifswap Оператор END IF можно писать как с пробелом, так и слитно: ENDIF. Если в БОК входит один оператор, то ветвление "если - то" может быть записано более компактно с помощью условного логического оператора IF: IF (логическое_выражение) оператор Например: If(x<0) x=-x ! получение абсолютной величины x Ветвление "если - то - иначе" на Фортране записывается с помощью конструкции IF THEN ELSE ENDIF: [имя:]IF(логическое_выражение) THEN БОК1 ELSE [имя] БОК2 ENDIF [имя] Имя конструкции, если оно задано, должно обязательно присутствовать и перед IF, и после ENDIF. Ветвление "если - то - иначе" работает так: • вычисляется значение логического выражения; • если оно истинно, то выполняется БОК1; • если оно ложно, то выполняется БОК2; • далее управление передается следующему после ветвления оператору. Пример 4: if(b*b-4*a*c>=0) then print *,'Уравнение имеет вещественные корни' Else print *, 'Нет вещественных корней' Endif Структура «если-то-иначе-если» реализует вложенные ветвления, когда вложенность имеется на отрицательной ветви развилки. КонструкцияIF THEN ELSE IF имеет следующий вид: [имя:] IF(логическое_выражение_1) THEN БОК1 ELSE IF(логическое_выражение_2) THEN [имя] БОК2 … [ELSE[имя] БОКn END IF [имя] Такая запись более компактна, поскольку END IF пишется только один раз. Пример 5. Времена года. Здесь month – целое положительное число – номер месяца. if (month==12.or.month==1.or.month==2) then print*,′Зима′ else if (month==3.or.month==4.or.month==5) then print*,′Весна′ else if (month==6.or.month==7.or.month==8) then print*,′Лето′ else if (month==9.or.month==10.or.month==11) then print*,′Осень′ else print*,′Месяц указан неверно′ Endif Структура выбора по ключуреализуется с помощью конструкции SELECT CASE: [имя:] SELECT CASE (ключ_выбора) CASE(СП1) [имя] [БОК1] [CASE(СП2) [имя] [БОК2]] … [CASE DEFAULT [имя] [БОКn]] END SELECT [имя]
Ключ_выбора – это выражение целого типа или логическое выражение или символьная переменная типа CHARACTER(l). СП – список констант, тип которых должен совпадать с типом ключа_выбора. Исполнение конструкции происходит следующим образом. Сначала вычисляется ключ выбора. Полученное значение сравнивается с элементами списков СП1, СП2… Если в каком-то из списков обнаружено искомое значение, то выполняется БОК соответствующей CASE-секции (ветви), после чего происходит выход на оператор, стоящий следующим после END SELECT. Если ни в одном из СПi значения ключа не обнаружено, то выполняется БОК, расположенный после CASE DEFAULT и затем происходит выход из конструкции. Пример. Времена года. select case (month) case(12,1,2) print*,′Зима′ case(3:5) print*,′Весна′ case(6:8) print*,′Лето′ case(9:11) print*,′Осень′ case default print*,′Месяц указан неверно′ End select Если сравнить этот пример с предыдущим, то видно, что использование оператора SELECT CASE в данном случае упрощает запись алгоритма. Из приведенного примера видно, что СП может быть представлен в как в виде последовательности значений, разделенных запятыми, так и в интервальной форме через двоеточие - (A:B). Значение А должно быть не больше В. Запись вида ( :В) означает любые значения, не большие В. Запись вида (А:) означает любые значения, не меньшие А
Каждое значение, даже если оно задано в диапазоне значений, может появляться только в одном СП. Нельзя переходить посредством оператора GOTO или в результате альтернативного возврата из подпрограммы внутрь конструкции SELECT CASE или из одной CASE-секции в другую. Такая ошибка будет обнаружена компилятором. Упражнения 1. Вычислить значения логических выражений: а) x * y <> 0 .and. y > x при x = 2, y = 1; б) a .or. .not. b при a = .false., b = .true. 2. Если a = .true. и x = 1, то какое значение получит логическая переменная d после выполнения оператора присваивания: а) d := x < 2; б) d := .not. a .and. x==1 ? 3. Написать оператор присваивания, в результате выполнения которого логическая переменная t получит значение .true., если высказывание истинно, и значение .false. в противном случае: а) из чисел x, y, z только два равны между собой; б) x – положительное число; в) каждое из чисел x, y, z положительно; г) только одно из чисел x, y, z положительно; д) p делится нацело на q; е) цифра 5 входит в десятичную запись трехзначного целого числа k. 4. Составить программу полного решения квадратного уравнения (алгоритм см. в разделе 1.3).
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (959)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |