목록으로

연산자, 조건문, 반복문 이해하기

PML Beginner 4

연산자와, 조건문, 반복문

이번엔 연산자, 조건문, 반복문 에 대해 설명해보도록 하겠습니다.

1. 연산자

1. 산술 연산자

기본적인 수학 연산을 수행할 때 사용되는 연산자들입니다.

  • 더하기 (Addition): +
  • 빼기 (Subtraction): -
  • 곱하기 (Multiplication): *
  • 나누기 (Division): /

예시:

!A = 10
!B = 5
!addition = !A + !B  $* 더하기
!subtraction = !A - !B  $* 빼기
!multiplication = !A * !B  $* 곱하기
!division = !A / !B  $* 나누기

q var !addition !subtraction !multiplication !division

결과:

<Real> 15
<Real> 5
<Real> 50
<Real> 2

2. 비교 연산자

두 값을 비교할 때 사용되는 연산자들입니다.

  • 작다 (Less than): LT
  • 크다 (Greater than): GT
  • 같다 (Equal to): EQ
  • 다르다 (Not equal to): NEQ
  • 작거나 같다 (Less than or equal to): LE
  • 크거나 같다 (Greater than or equal to): GE

예시:

!X = 10
!Y = 20

IF (!X LT !Y) THEN
    $P 'X는 Y보다 작다'
ENDIF

IF (!X GE !Y) THEN
    $P 'X는 Y보다 크거나 같다'
ENDIF

이 예시에서:

  • 첫 번째 조건문은 !X!Y보다 작으면 "X는 Y보다 작다" 메시지를 출력합니다.
  • 두 번째 조건문은 !X!Y보다 크거나 같으면 "X는 Y보다 크거나 같다" 메시지를 출력합니다.

3. 논리 연산자

여러 조건을 기반으로 결정을 내릴 때 사용되는 연산자들입니다.

AND 연산자: AND

OR 연산자: OR

NOT 연산자: NOT

여러 조건을 결합하여 보다 복잡한 조건 판단을 할 수 있습니다.

예시:

!X = 10
!Y = 20

IF (!X LT 15 AND !Y GT 15) THEN
    $P '두 조건이 모두 참이다'
ENDI

이 예시에서:

IF 조건문은 !X가 15보다 작고 !Y가 15보다 큰 경우에만

"두 조건이 모두 참이다"라는 메시지를 출력합니다.

4. 문자형 결합 연산자:

문자형을 결합할 때 사용되는 연산자입니다.

숫자를 합할때도 사용하지만 문자형일경우 문자형을 합하는데 사용됩니다.

결합 연산자: +

예시:

!FirstName = 'John'
!LastName = 'Doe'
!FullName = !FirstName + ' ' + !LastName

q var !FullName

결과:

<string> 'John Doe'

2. 조건문

1. IF 문 기본 구조

기본구조:

IF (조건) THEN -- 조건이 참일 때 실행할 코드 ENDIF

  • 조건: 참(true) 또는 거짓(false)으로 평가되는 논리식입니다.
  • THEN: 조건이 참일 때 실행할 코드 블록을 의미합니다.
  • ENDIF: 조건문이 끝났음을 나타냅니다.

예시:

!X = 10
IF (!X GT 5) THEN
    $P 'X는 5보다 큽니다.'
ENDIF

이 예시에서는 !X가 5보다 크기 때문에 "X는 5보다 큽니다."라는 메시지가 출력됩니다.

2. IF...ELSE 구조

ELSE 구문을 사용하면 조건이 거짓일 때 실행할 코드 블록을 정의할 수 있습니다.

기본구조:

IF (조건) THEN -- 조건이 참일 때 실행할 코드 ELSE -- 조건이 거짓일 때 실행할 코드 ENDIF

예시:

!X = 10
!Y = 20

IF (!X LT !Y) THEN
    $P 'X는 Y보다 작습니다.'
ELSE
    $P 'X는 Y보다 작지 않습니다.'
ENDIF

이 예시에서는:

  • !X!Y보다 작으면 "X는 Y보다 작습니다." 메시지가 출력됩니다.
  • 그렇지 않으면 "X는 Y보다 작지 않습니다." 메시지가 출력됩니다.

3. IF...ELSE IF...ELSE 구조

PML에서는 여러 조건을 순차적으로 평가하기 위해 ELSE IF 구문을 사용할 수 있습니다. 이는 여러 조건을 처리할 때 유용하며, 첫 번째 참 조건에 해당하는 코드 블록만 실행됩니다.

기본 구조:

IF (조건1) THEN -- 조건1이 참일 때 실행할 코드 ELSE IF (조건2) THEN -- 조건1이 거짓이고 조건2가 참일 때 실행할 코드 ELSE -- 모든 조건이 거짓일 때 실행할 코드 ENDIF

예시:

!X = 10
!Y = 20

IF (!X GT !Y) THEN
    $P 'X는 Y보다 큽니다.'
ELSE IF (!X EQ !Y) THEN
    $P 'X는 Y와 같습니다.'
ELSE
    $P 'X는 Y보다 작습니다.'
ENDIF

이 예시에서:

  • !X!Y보다 크면 "X는 Y보다 큽니다." 메시지가 출력됩니다.
  • 그렇지 않고 !X!Y와 같으면 "X는 Y와 같습니다." 메시지가 출력됩니다.
  • 두 조건 모두 거짓이면 "X는 Y보다 작습니다." 메시지가 출력됩니다.

4. 중첩된 IF 문

복잡한 조건을 처리하기 위해 IF 문을 중첩하여 사용할 수 있습니다. 중첩된 IF 문은 여러 단계의 조건을 처리할 때 유용합니다.

예시:

!X = 10
!Y = 20

IF (!X LT !Y) THEN
    IF (!X EQ 10) THEN
        $P 'X는 Y보다 작고 10입니다.'
    ELSE
        $P 'X는 Y보다 작지만 10은 아닙니다.'
    ENDIF
ELSE
    $P 'X는 Y보다 크거나 같습니다.'
ENDIF

이 예시에서:

  • 첫 번째 조건에서 !X!Y보다 작으면 내부 IF 문이 실행됩니다.
  • 내부 IF 문은 !X가 10과 같은지 확인하고, 그에 따라 다른 메시지를 출력합니다.

5. 논리 연산자와 함께 사용하는 IF 문

PML에서 IF 문은 논리 연산자(AND, OR, NOT)를 사용하여 복합 조건을 평가할 수 있습니다.

예시:

!A = 10
!B = 20

IF (!A GT 5 AND !B LT 30) THEN
    $P 'A는 5보다 크고 B는 30보다 작습니다.'
ENDIF

이 예시에서는:

!A가 5보다 크고 !B가 30보다 작으면

"A는 5보다 크고 B는 30보다 작습니다." 메시지가 출력됩니다.

6. IFTRUE

IFTRUE는 삼향 연산자로 주어진 조건이 참이면 특정 값을 반환하고, 거짓이면 다른값을 반환합니다.

기본구문:

!변수 = IFTRUE(조건, 참일 때 반환 값, 거짓일 때 반환 값)

  • 조건: 참 또는 거짓으로 평가되는 논리식 (예: !X LT 10).
  • 참일 때 반환 값: 조건이 참일 경우 할당되는 값.
  • 거짓일 때 반환 값: 조건이 거짓일 경우 할당되는 값.

예시:

!X = 10
!Result = IFTRUE(!X LT 20, 'X는 20보다 작다', 'X는 20보다 크거나 같다')
q var !Result

결과:

<string> 'X는 20보다 작다'

3. 반복문

PML을 사용하려는 가장큰 이유중 하나가 반복 작업을 단순화하는것인만큼 DO 반복문은 특정 값들이나, 범위를 순차적으로 반복하여 처리해줍니다.

1. DO 반복문 (FROM과 TO 사용)

  • *FROM ... TO** 구조는 주어진 범위 내에서 변수를 반복시키는 방식입니다. 일반적으로 숫자 범위에서 값을 증가시키며, 각 반복마다 변수가 새로운 값을 가집니다.

기본구조:

DO !변수 FROM 시작값 TO 종료값 -- 반복 작업을 수행할 코드 ENDDO

예시:

DO !I FROM 1 TO 5
    Q VAR !I
ENDDO

결과:

<string> 1
<string> 2
<string> 3
<string> 4
<string> 5

설명:

이 구조에서는 !I가 1에서 5까지 1씩 증가하면서 반복됩니다.

각 반복마다 !I의 값이 출력됩니다.

2. DO 반복문 (INDEX 사용)

INDEX사용시 특정 Array를 순차적으로 반복하며 !변수에 INDEX값을 할당합니다.

기본구조:

DO !변수 INDEX !배열 -- 배열의 각 요소에 대해 반복 작업을 수행할 코드 ENDDO

예시:

!Array = object array()
!Array.append(10)
!Array.append(20)
!Array.append(30)
!Array.append(40)

DO !I INDEX !Array
  q var !I
ENDDO
$P ----------
DO !I INDEX !Array
  q var !Array[$!I]
ENDDO

결과:

<Real> 1
<Real> 2
<Real> 3
<Real> 4
----------
<Real> 10
<Real> 20
<Real> 30
<Real> 40

설명:

!Array에는 10,20,30,40이 들어있으며 !I에는 1,2,3,4, 가 반복됩니다

그렇기에 !Array[1] 과같이 반복할떄마다 !Array[$!I] 와 같이 사용햐어

!Array의 배열의 각 요소에 접근 할 수 있습니다.

3. DO 반복문 (VALUES 사용)

VALUESINDEX 와는 다르게 변수에 값이 할당됩니다.

기본구조:

DO !변수 VALUES !배열 -- 각 값에 대해 반복 작업을 수행할 코드 ENDDO

예시:

!Array = object array()
!Array.append(5)
!Array.append(10)
!Array.append(15)
!Array.append(20)

DO !value VALUES !Array
    q var !value
ENDD

결과:

<string> 5
<string> 10
<string> 15
<string> 20

설명:

  • 이 구조에서는 !Array 배열에 미리 정의된 값들을 순차적으로 !Value 변수에 할당합니다.
  • 각 반복마다 지정된 값이 출력됩니다.

4. BREAK와 SKIP을 사용한 반복문 제어

PML의 DO 반복문은 중간에 반복을 중단하거나 특정 조건에 따라 반복을 건너뛸 수 있는 제어 기능도 제공합니다.

  • BREAK: 특정 조건이 만족되면 반복문을 중단하고 빠져나옵니다.
  • SKIP: 특정 조건이 만족되면 현재 반복을 건너뛰고, 다음 반복을 계속 진행합니다.

예시: BREAK

DO !I FROM 1 TO 5
    IF (!I EQ 3) THEN
        BREAK  $* !I가 3일 때 반복문을 종료합니다.
    ENDIF
    q var !I
ENDDO

결과:

<string>: 1
<string>: 2

예시: SKIP

DO !I FROM 1 TO 5
    SKIP IF (!I EQ 3)  $* !I가 3일 때 해당 반복을 건너뜁니다.
    q var !I
ENDDO

결과:

<string>: 1
<string>: 2
<string>: 4
<string>: 5