Fortran: 두 판 사이의 차이

6번째 줄: 6번째 줄:
IBM 704는 자기 드럼, 자기 테이프, 천공 카드로부터 자료를 읽거나 저장할 수 있었고, 프린터와 CRT에 정보를 보여줄 수 있었다. 하지만 보통은 천공 카드를 주로 썼고, 실제로 입력 가능한 도구는 천공 카드밖에 없었다. 때문에 천공카드 기반의 언어가 될 수밖에 없었다.  
IBM 704는 자기 드럼, 자기 테이프, 천공 카드로부터 자료를 읽거나 저장할 수 있었고, 프린터와 CRT에 정보를 보여줄 수 있었다. 하지만 보통은 천공 카드를 주로 썼고, 실제로 입력 가능한 도구는 천공 카드밖에 없었다. 때문에 천공카드 기반의 언어가 될 수밖에 없었다.  
==== 코드 예제 ====
==== 코드 예제 ====
IBM 704에서는 [[80열 천공 카드]]를 사용한다. 즉, 포트란 코딩 시트(FORTRAN STATEMENT)에 다음과 같이 '''구멍을 내면''' 각 줄은 하나의 천공카드를 의미한다. 천공카드에 적힌 수 중에서 가장 큰 수를 찾아서 출력하여 준다.  
IBM 704에서는 80열 [[천공 카드]]를 사용한다. 즉, 포트란 코딩 시트(FORTRAN STATEMENT)에 다음과 같이 '''구멍을 내면'''<ref>[[키펀치|천공기]]라고, 이미 그 당시 펀치 카드 작성기가 있었기 때문에 손으로 뚫을 필요는 없다.</ref> 각 줄은 하나의 천공카드를 의미한다. 천공카드에 적힌 수 중에서 가장 큰 수를 찾아서 출력하여 준다.  
천공카드에 적힐 수는 A(***)이며, 각 카드마다 12개씩, 6개의 열에 숫자를 적을 수 있다. 999개 이상으로 구성된 집합에서는 찾을 수 없다. 이 코드의 경우 천공 카드가 결과지로 역할한다.  
천공카드에 적힐 수는 A(***)이며, 각 카드마다 12개씩, 6개의 열에 숫자를 적을 수 있다. 999개 이상으로 구성된 집합에서는 찾을 수 없다. 이 코드의 경우 천공 카드가 결과지로 역할한다.  
천공 카드는 총 80열로 이루어져 있다.  
천공 카드는 총 80열로 이루어져 있다.  

2016년 6월 4일 (토) 03:59 판

개요

포트란은 1954년 중반 IBM 704에서 과학적인 계산을 하기 위해 만들어지게 된 컴퓨터 프로그래밍 언어이다. 전문적인 계산문제에 한해서는 C언어보다 훨씬 직관적이며, 대부분의 경우 계산속도 또한 빠르다.

역사

FORTRAN

IBM 704는 자기 드럼, 자기 테이프, 천공 카드로부터 자료를 읽거나 저장할 수 있었고, 프린터와 CRT에 정보를 보여줄 수 있었다. 하지만 보통은 천공 카드를 주로 썼고, 실제로 입력 가능한 도구는 천공 카드밖에 없었다. 때문에 천공카드 기반의 언어가 될 수밖에 없었다.

코드 예제

IBM 704에서는 80열 천공 카드를 사용한다. 즉, 포트란 코딩 시트(FORTRAN STATEMENT)에 다음과 같이 구멍을 내면[1] 각 줄은 하나의 천공카드를 의미한다. 천공카드에 적힌 수 중에서 가장 큰 수를 찾아서 출력하여 준다. 천공카드에 적힐 수는 A(***)이며, 각 카드마다 12개씩, 6개의 열에 숫자를 적을 수 있다. 999개 이상으로 구성된 집합에서는 찾을 수 없다. 이 코드의 경우 천공 카드가 결과지로 역할한다. 천공 카드는 총 80열로 이루어져 있다.

1열부터 5열까지의 숫자는 Statement number이다. 만약 C 부분에 구멍이 뚫려 있다면 Comment card를 의미한다. 요즘 말로 하면 주석이 되겠다. 컴파일러에서 이게 뚫린 카드는 읽지 않는다. 다른 경우 이는 줄 번호를 이야기하거나 아예 쓰여있지 않다. 6열의 숫자는 Continuation. 1부터 9까지, 카드의 번호를 의미한다. 7열부터 72열까지 컴파일러에서 읽는다. 73열부터 80열까지는 컴파일러에서 읽지 않으며, 카드를 먹거나 순서가 바뀌는 경우를 방지하기 위하여 사용한다. 각 줄 앞에 있는 숫자는 두 가지 의미이다. 이 코드가 필요한 사람은 이미 천공카드 사용법을 알고 있을 것이기 때문에 그 사용법은 더 적지 않는다. [2]

C PROGRAM FOR FINDING THE LARGEST VALUE 
C         ATTAINED BY A SET OF NUMBERS
     DIMENSION A(999)
     FREQUENCY 30(2,1,10), 5(100)
     READ 1, N, (A(I), I*1, N)
  1 FORMAT (I3/(12F6.2)
    BIGA = A(1)
  5 DO 20 I = 2,N
  30 IF (BIGA-A(I)) 10,20,20
  10 BIGA = A(I)
  20 CONTINUE
    PRINT 2,N,BIGA
  2 FORMAT (22H1 THE LARGEST OF THERE I3, 12H NUMBERS IS F7.2)
    STOP 77777

FORTRAN II

포트란 2는 58년에 나왔다. 지난 버전보다 절차적 프로그래밍을 중시하기 위해 사용자-입력 서브루틴과 함수와 변수를 구현하였다.

코드 예제

다음은 위키백과에 수록된 포트란 II 예제이다. 데이터 카드(천공 카드나 천공 테이프)에서 삼각형의 세 변의 길이를 읽은 후, 헤론의 공식으로 넓이를 구하여 출력하는 예.

C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION
C INPUT - CARD READER UNIT 5, INTEGER INPUT
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING
      READ INPUT TAPE 5, 501, IA, IB, IC
  501 FORMAT (3I5)
C IA, IB, AND IC MAY NOT BE NEGATIVE
C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE
C IS GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
      IF (IA) 777, 777, 701
  701 IF (IB) 777, 777, 702
  702 IF (IC) 777, 777, 703
  703 IF (IA+IB-IC) 777,777,704
  704 IF (IA+IC-IB) 777,777,705
  705 IF (IB+IC-IA) 777,777,799
  777 STOP 1
C USING HERON'S FORMULA WE CALCULATE THE
C AREA OF THE TRIANGLE
  799 S = FLOATF (IA + IB + IC) / 2.0
      AREA = SQRT( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) *
     +     (S - FLOATF(IC)))
      WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA
  601 FORMAT (4H A= ,I5,5H  B= ,I5,5H  C= ,I5,8H  AREA= ,F10.2,
     +        13H SQUARE UNITS)
      STOP
      END

FORTRAN III

FORTRAN IV

코드 예제

FORTRAN 66

코드 예제

FORTRAN 77

가장 범용적인 포트란 메이저 리비전. 이 언어는 70년대부터 90년대 중반까지 코볼과 같이 세상을 나눠먹었다. 현재의 C언어가 갖는 위상보다 더 높을 정도. 참고로, 오 나의 여신님의 등장인물인 모리사토 케이이치가 다루는 언어는 설정상 바로 이것이다. 작품이 90년대 나온 것을 생각하면 당연한 일이지만, 지금 생각하면...

코드 예제

Fortran 90

쓰기 쉬워진 포트란 메이저 리비전. 이름이 바뀐 이유는 이 버전부터 소문자와 대문자의 구분을 지원하기 때문이다.

코드 예제

아래의 예제는 편집자가 직접 추가한 예제이다. 이를 *.f90 파일로 저장한 뒤 gfortran 등의 컴파일러로 변환하면 된다. 당장 포트란 II에서의 예제와 비교해 보자. 이 예제는 헤론의 공식이 아니라 사인-코사인을 사용하여 넓이를 구하고 있다.

    PROGRAM Triangle
     IMPLICIT NONE
     REAL :: a, b, c, area
     PRINT *, 'AREA OF A TRIANGLE WITH &
     		&Using the length of 3 sides '
     PRINT *, 'PLEASE ENTER THE LENGTHS&
     		& OF THE 3 SIDES.'
     READ *, a, b, c
     PRINT *, 'Triangle's area:  ', Area(a,b,c)
    END PROGRAM Triangle
    FUNCTION Area(x,y,z)
     IMPLICIT NONE
     REAL :: area            ! function type
     REAL, INTENT( IN ) :: x, y, z
     REAL :: theta, height
     theta = ACOS((x**2+y**2-z**2)/(2.0*x*y))
     height = x*SIN(theta); Area = 0.5*y*height
    END FUNCTION Area

Fortran 95

정립된 쉬운 포트란 마이너 리비전.

Fortran 2003

Fortran 2008

Fortran 2015

각주

  1. 천공기라고, 이미 그 당시 펀치 카드 작성기가 있었기 때문에 손으로 뚫을 필요는 없다.
  2. http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf 를 참조하시오