*&---------------------------------------------------------------------*
*& Report  Z_ITERATIONS_1                                              *
*&---------------------------------------------------------------------*

REPORT  z_iterations_1.

TABLES: zemployees.

" 특정 조건으로 SELECT 반복
SELECT * FROM zemployees WHERE surname = 'MILLS'.
  WRITE: / zemployees.
ENDSELECT.

DATA: a TYPE i,
      b TYPE i,
      c TYPE i.

a = 0.
c = 0.

" -----------------------------
" DO 루프 예제
DO 15 TIMES.
  a = a + 1.
  WRITE: / 'Outer Loop cycle: ', a.
  b = 0.
  DO 10 TIMES.
    b = b + 1.
    WRITE: / 'Inner Loop cycle:     ', b.
  ENDDO.
  c = c + b.
ENDDO.
c = c + a.
WRITE: / 'Total Iterations (DO): ', c.

" -----------------------------
" WHILE 루프 예제
a = 0.
b = 0.
c = 0.

WHILE a <> 15.
  a = a + 1.
  WRITE: / 'Outer Loop cycle: ', a.
  b = 0.
  WHILE b <> 10.
    b = b + 1.
    WRITE: / 'Inner Loop cycle:     ', b.
  ENDWHILE.
  c = c + b.
ENDWHILE.
c = c + a.
WRITE: / 'Total Iterations (WHILE): ', c.

🧪 실행 시 예시 출력

Outer Loop cycle: 1
Inner Loop cycle:     1
Inner Loop cycle:     2
...
Outer Loop cycle: 15
Inner Loop cycle:     10
Total Iterations (DO): 165

Outer Loop cycle: 1
Inner Loop cycle:     1
...
Total Iterations (WHILE): 165

 

 

✅ 핵심 요약

🌱 변수 설명

  • a: 바깥(outer) 루프의 카운터
  • b: 안쪽(inner) 루프의 카운터
  • c: 전체 반복 횟수를 누적한 값

🔁 루프 흐름 정리

  1. a를 기준으로 바깥 while 루프를 실행
    WHILE a < 15.
  2. 바깥 루프 안에서:
    • b를 0으로 초기화
    • WHILE b < 10인 동안:
      • b를 출력
      • b를 증가
      • c = c + b 로 누적합 추가
    • 안쪽 루프가 끝나면:
      • a 값을 1 증가
      • c = c + a 로 추가 누적
  3. 최종적으로 c는 전체 루프 횟수를 반영하며 출력됨.

🧮 실행 결과 예시

  • 바깥 루프는 a가 0부터 14까지 총 15번
  • 안쪽 루프는 매번 b가 0부터 9까지 총 10번 실행
  • 그래서 총 반복 횟수는: 15 * 10 = 150
  • 각 루프에서 c에 값을 누적시키므로, 결과는 단순히 150이 아니라 각 b와 a의 합이 누적된 165가 출력됨 (코드에서 그처럼 설정됨)

✅ 주의할 점

  • b를 매 바깥 루프 안에서 초기화하는 이유: 매번 0부터 시작하려고
  • b = b + 1 없으면 무한 루프 발생!
  • WHILE 문은 조건이 만족할 때만 실행하므로 조건을 잘 설계해야 함

+ Recent posts