논리식 (logical expression)
단순 논리식(simple logical expression)
형식
1. 논리상수 (.TRUE. 또는 .FALSE.)
2. 논리변수
3. 아래 관계식 형태
expr1 관계연산자 expr2 (expr는 수치 또는 문자식)
관계 연산자
기호 | 의미 | |
< > <= >= == /= |
.LT. .GT. .LE. .GE. .EQ. .NE. |
~보다 작은 ~보다 큰 ~보다 작거나 같은 ~보다 크거나 같은 ~와 같은 ~와 같지 않은 |
주의!
- == 는 같음을 표시하는 관계 연산자
- = 은 대입 연산자
수치형 데이터
x < 7 에서 x 가 5 이면 참, 8이면 거짓이다.
a ** 3 >= 3.0 * b * c 의 경우, 수치연산이 논리식보다 우선 실행되므로, (a ** 3) >= (3.0 * b * c ) 와 같다.
문자형 데이터
문자 데이터는 각 문자마다 할당된 ASCII코드 값으로 프로그램 내부에서 사용된다.
A, B, ..., Z를 각각 65,66,..., 90
a, b, ..., z 를 97,98, ... 122
"A" < "F" => 참
"dog" > "cat" => 참 ("d" > "c" 이므로)
길이가 다른 두 문자열은 공백을 추가하여 큰 길이 문자열과 동일하게 만들어 비교한다.
"treat" < "treatment" 은 참이고 "treat฿฿฿฿" < "treatment" 로 해석된다. 왜냐하면 공백은 모든 문자에 선행하기 때문이다.
복합 논리식 (compound logical expression)
논리 연산자
논리연산자 | 의미 | 우선순위 |
.NOT. .AND. .OR. .EQV. .NEQV. |
(부정) (논리곱) (논리합) (논리등가) (논리비등가) |
1 2 3 4 4 |
진리표
p | q | p .AND. q | p .OR. q | p .EQV. q | p .NEQV. q |
.TRUE. .TRUE. .FALSE. .FALSE. |
.TRUE. .FALSE. .TRUE. .FALSE. |
.TRUE. .FALSE. .FALSE. .FALSE. |
.TRUE. .TRUE. .TRUE. .FALSE. |
.TRUE. .FALSE. .FALSE. .TRUE. |
.FALSE. .TRUE. .TRUE. .FALSE. |
만약 논리식이 수치연산자, 관계연산자, 논리연산자가 섞여있다면, 실행 순서는 아래와 같다.
1. 수치(함수)연산
2. 관계연산
3. 논리연산
예)
a ** 2 + 1 > 10 .and. .not. a < 3 은 참이고, ( a ** 2 + 1 > 10 ) .and. .not. (a < 3 )으로 해석된다.
b == 1 .or. 2 은 (b == 1) .or. 2 와 같으나 유효하지 않다. 왜냐하면 2가 논리식이 아니기 때문이다.
예문 (복합논리식)
program logical_appl
implicit none
real :: X=-3.56, Y=0.0, Z=44.7
integer :: M=-5, N=8
print*, "1)"
if (M <= N) print*, "M 은 N 보다 작거나 같다."
print*, "2)"
if (2 * abs(M) <=8) then
print*, "절대값 M의 두배는 8보다 작거나 같다."
else
print*, "절대값 M의 두배는 8보다 크거나 같다."
endif
print*, "3)"
if ( nint(z) == (6 * N - 3) ) print*, "Z에 가장 가까운 정수는 N의 6배에서 3을 뺀 것과 같다."
print*, "4)"
if (.not. (X < Y)) then
print*, "X가 Y보다 작지 않다."
else
print*, "X가 Y보다 작지 않은 것이 아니다."
endif
print*, "5)"
if (.not. ((M > N) .and. (X < Z)) .neqv. ((M <= N) .and. (X >= Z))) then
print*, "'M이 N보다 크고 동시에 X가 Z보다 작은것'과 'M이 N보다 작거나 같고 동시에 X가 Z보다 크거나 &
같다는 것'이 논리적으로 서로 같지 않다는 것이 아니다."
endif
end program logical_appl
연습문제
1. 다음의 표현식을 써라.
- x 는 3보다 크다.
- y 는 2 와 5 사이의 값이다.
- r 은 음이고 z 는 양이다.
X > 3
Y > 2.and. Y<5
R < 0.and. Z > 0
2. 다음의 표현식을 써라.
- alpha 와 beta 는 둘 다 양이다.
- alpha 와 beta 는 같은 부호를 가진다.
- –5 < x < 5
- A는 6보다 작거나 혹은 10보다 크다
Alpha > 0 .and. beta >0
(Alpha > 0 .and. beta > 0).or.
(Alpha < 0 .and. beta < 0)
X> -5.and.X<5
A <= 6.or. A > 10