컴퓨터로 하는 초등학교 덧셈

컴퓨터는 초등학교 때 밑도 끝도 없이 더하고 더하던 셈을 시켜도 지겨워하지 않는다는 것이 최고의 장점이다.  우선 정수(integer)를 더해보자.  여러분도 알다시피, 컴퓨터는 모든 정보를 0 과 1 로 저장한다.  이 때, 효율성을 위해 정수와 실수를 다른 방식으로 저장한다.  따라서 여러분은 1 과 1.0 을 같은 숫자라고 생각할지라도, 컴퓨터는 1 과 1.0을 대단히 다르게 취급한다.   

자 그러면 다시 한 번 묻지 마 프로그래밍을 떠나자.  프로그램 download

c
c demonstrate addition of two integers
c234567
      i=1
      j=2
      k=i+j
      print *, k
      stop
      end

이 프로그램은 초등학교 산수 수련장을 많이 닮았다.  그러나 여기서 = 부호는 등호가 아니다.  포트란에서 = 부호는 우변의 내용을 계산하여 좌변의 변수에 저장하라는 뜻이다. 

변수(variable)란 수치를 저장하기 위해 잡아놓은 컴퓨터의 메모리이다.   그런데 컴퓨터의 메모리 주소는 사람이 기억하기에 대단히 불편하므로, 그 저장장소를 사람이 부르기 편하도록 이름을 붙여놓는다.  따라서

i=1;

이라는 실행문을 뜯어보면, 우리가 i 라고 이름붙인 저장장소에 숫자 1 을 저장하라는 뜻이다.   이때, i 가 저장장소라는 것만으로는 충분하지 않다.  이것이 무슨 내용을 담고 있는 저장장소인지도 알아야 된다.  즉, 이 경우에는 i 이라는 변수가 정수를 저장하는 곳이라고 미리 컴퓨터에게 일러두어야 한다.  즉, i 라는 변수를 실제로 사용하기 전에

integer i

와 같이, 이것이 정수 변수임을 선언하여야 한다.  그런데 위의 프로그램에서는 i, j, k 가 정수라고 선언하지 않았음에도 불구하고 프로그램이 아무 탈 없이 실행된다.  어째서일까?

그 이유는 간단하다.  포트란에서 I, J, K, L, M 으로 시작하는 변수 이름은 자동적으로 정수(INTEGER, 좀 더 정확하게는 4 바이트 정수 INTEGER*4 )로 취급하기로 약속되어 있기 때문이다.  또한 포트란에서는 대문자와 소문자를 구분하지 않는다.

연습.  다음 프로그램을 실행시키면 어떠한 결과가 나오겠는가?

c
c demonstrate addition of two integers
c234567
      i=1
      j=2
      j=j+2
      k=i+j
      print *, k
      stop
      end