본문 바로가기
학부 강의 노트/포트란 프로그래밍 (보충예제)

포트란 강좌 :: 논리식

by Dr. STEAM 2022. 6. 16.
반응형

논리식 (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
 
728x90
반응형