정보처리기능사 실기 시험 및 알고리즘 입문 시 가장 먼저 통과해야 하는 필수 관문임. 변수에 숫자를 1씩 누적하여 더하는 반복 구조를 포트란 77만의 강력하고 간결한 DO 루프 문법으로 구현해 본다.
🟪 1. 데이터 영역 및 변수 선언 (Specification)
1부터 100까지 증가할 카운터 인덱스 변수와, 값이 차곡차곡 누적되어 저장될 합계 변수를 선언함. 7번째 칸 규칙을 엄수하여 정수형(INTEGER) 타입으로 정의해야 한다.
fortran code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
C ====== 1번째 칸에 'C' 또는 '*'를 적으면 이 줄 전체는 주석이 됨 ======
PROGRAM SUM_1_TO_100
IMPLICIT NONE
* [7칸 시작] 카운터용 인덱스(CNT)와 누적 합계용 변수(SUM) 선언
INTEGER CNTIDX, SUMTTL
🟩 2. DO 루프를 이용한 누적 연산 실행 (Execution)
포트란의 핵심 명령어인 DO 구문을 활용하여 인덱스를 1부터 100까지 자동으로 스위칭하며 합산을 수행하는 영역임.
fortran code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
* [초기화] 누적 연산을 위해 합계 변수를 깨끗하게 0으로 리셋해 줌
SUMTTL = 0
* -------------------------------------------------------------
* [반복 실행] DO 10 루프: 10번 라인까지 CNTIDX를 1부터 100까지 1씩 증가함
* -------------------------------------------------------------
DO 10 CNTIDX = 1, 100, 1
* 기존 합계 금액에 현재 카운터 숫자를 누적하여 더해 나감
SUMTTL = SUMTTL + CNTIDX
10 CONTINUE
* -> 1~5칸 레이블 구역에 정확하게 번호 '10'을 적어 루프의 종료 지점을 명시함
* -------------------------------------------------------------
* [결과 출력] WRITE문과 FORMAT 연동을 통해 전설의 숫자 5050을 표출함
* -------------------------------------------------------------
WRITE(*, 600) SUMTTL
600 FORMAT(1X, '1 FROM 100 TOTAL SUM RESULT : ', I4)
* -> 캐리지 컨트롤 1X로 첫 칸 보호 후 정수 4자리(I4) 포맷으로 결과 출력
STOP
END
💡 [실무 팁] 코볼 누적문과 포트란 반복문의 결정적 성능 차이점
코볼 12편(알고리즘 1편)에서 작성했던 누적 소스코드 구조와 이번 포트란 소스코드를 비교 분석해 보면 시스템 공학적 차이가 명확하게 드러남.
- 수동 연산과 자동 레지스터 증감의 차이
- 코볼의 PERFORM UNTIL 구조는 루프 바디 블록 내부에서 개발자가 직접 ADD 1 TO CNT-IDX 구문을 물리적으로 한 줄 작성해 주어야 인덱스가 올라갔음.
- 반면 포트란 77의 DO 10 CNTIDX = 1, 100, 1 구문은 [시작값, 종료값, 증감폭]이 컴파일러 레벨에서 한 번에 CPU 레지스터로 넘어가 자동 스위칭되므로, 코드가 한 줄 줄어들 뿐만 아니라 대량 배치 처리 시 연산 효율성과 속도 면에서 과학 연산 언어다운 압도적인 우위를 점하게 된다.
- 곱셈 연산 시 초기화의 변수 매커니즘
- 이번 예제처럼 더하기 누적을 할 때는 무조건 SUMTTL = 0으로 초기화를 해주어야 이전 쓰레기 데이터로 인한 SOC7(데이터 예외 오류)을 방지할 수 있음.
- 단, 다음 편에서 연재할 팩토리얼처럼 곱셈을 누적하는 변수는 절대로 0으로 초기화하면 안 되며, 무조건 초기값을 1로 세팅해야 연산이 파괴되지 않고 정상 작동한다.
'프로그래밍 > Fortran 77' 카테고리의 다른 글
| [FORTRAN 기초] 알고리즘 3편: 소수 판별 및 약수 구하기 fortran code (0) | 2026.06.22 |
|---|---|
| [FORTRAN 기초] 알고리즘 2편: 피보나치 수열과 팩토리얼 계산 fortran code (0) | 2026.06.22 |
| [FORTRAN 기초] 6편: 반복문(DO ~ CONTINUE)으로 대량 데이터 루프 제어하기 fortran code (0) | 2026.06.22 |
| [FORTRAN 기초] 5편: 조건문(IF ~ THEN ~ ENDIF)으로 합격/불합격 판별하기 fortran code (0) | 2026.06.22 |
| [FORTRAN 기초] 4편: 사칙연산과 출력 포맷(FORMAT) 정의 실전 fortran code (0) | 2026.06.22 |