본문 바로가기
프로그래밍/Fortran 77

[FORTRAN 기초] 알고리즘 1편: 1에서 100까지 합 구하기 기본 fortran code

by 오!쎈세! 2026. 6. 22.
정보처리기능사 실기 시험 및 알고리즘 입문 시 가장 먼저 통과해야 하는 필수 관문임. 변수에 숫자를 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로 세팅해야 연산이 파괴되지 않고 정상 작동한다.