QBasic 기초 시리즈

배열 (Arrays)

일반적으로 변수 하나 당 자료를 한 개씩만 저장할 수 있습니다. 하지만 한 개의 변수에 여러 개의 자료를 저장하고 싶을 때도 있습니다. 이렇게 동일한 유형의 데이터로 구성되고 정렬된 유한한(finite) 데이터 항목 모음(collection)을 배열(array)이라고 하며 개별 데이터를 요소(element) 혹은 원소라고 칭합니다.

전체 배열에 하나의 이름만 할당되며, 인덱스(index)를 지정하여 개별 요소를 참조합니다. 인덱스를 서브스크립트(subscript)라고도 합니다.

QBasic의 배열 스펙은 다음과 같습니다.

  • 인덱스 범위 :-32768 ~ + 32767
  • 최대 60개가 허용됩니다
  • 배열의 최대 크기 제한 : 64K

QBasic은 옛날 언어이기 때문에 배열의 성능이 약간 떨어집니다. 최신 언어들의 배열은 위의 스펙보다 발전된 형태를 지니고 있습니다.

사용하기 전에 배열을 선언해야 합니다. 배열 선언은 변수 선언과 비슷하며 다음과 같은 형식입니다.

DIM 배열이름(인덱스범위) AS 자료형

다음은 5칸 배열을 만드는 예제입니다.

DIM arr(5) AS INTEGER

주의할 점은 배열의 시작 인덱스값은 1이 아닌 0이라는 점입니다. QBasic뿐만 아니라 대부분의 프로그래밍 언어들이 배열 인덱스를 0부터 시작합니다.

위와 같이 선언했다면 0 ~ 4의 인덱스를 갖는 5칸 배열이 만들어집니다. 이제 배열의 각 인덱스에 값을 할당해보도록 하겠습니다. 배열의 요소에 접근하려면 배열(인덱스)를 사용하여 접근하며, 이런 배열 접근 구문은 변수처럼 취급됩니다.

DIM arr(5) AS INTEGER

arr(0) = 10
arr(1) = 15
arr(2) = 25
arr(3) = 30
arr(4) = 45

PRINT arr(0)     ' 10
PRINT arr(1)     ' 15
PRINT arr(2)     ' 25
PRINT arr(3)     ' 30
PRINT arr(4)     ' 45

배열 요소 접근시 인덱스는 숫자를 직접 타이핑하는 것 뿐만 아니라 다른 변수를  사용하는 것도 가능합니다. 위의 예에서 출력 부분을 for문으로 간략화 시켜보겠습니다.

FOR i = 0 TO 4
    PRINT arr(i)
NEXT i

arr(i)에서 i는 카운터 변수입니다. 인덱스 부분에 변수를 입력하는 것이 가능하므로 for문을 통해 간략화할 수 있게 되었습니다.

 

SUB & FUNCTION

함수(또는 서브루틴)은 소프트웨어에서 특정 동작을 수행하는 일정 코드 부분을 의미합니다. 함수는 대부분의 프로그래밍 언어에서 지원하는 기능으로, 하나의 큰 프로그램을 여러 부분으로 나누어주기 때문에 같은 함수를 여러 상황에서 여러 차례 호출할 수 있으며 일부분을 수정하기 쉽다는 장점을 가집니다.

여기서는 간단한 예제만 다뤄 보겠습니다. C언어 및 그 계열의 언어들은 함수와 서브루틴을 따로 구분하지 않고 일괄적으로 함수로 취급합니다만, QBasic에서는 반환값이 없으면 서브루틴, 반환값을 가지면 함수로 구분합니다.

반환값이란 수학의 함수에서 f(x) = y 라 할 때 y 와 비슷한 개념입니다. 함수에 x라는 값을 넣었을 때, 이 함수는 y를 반환하게 되는데, 프로그래밍에서도 어떤 함수에서 요구하는 값을 넣으면 그 값을 가공해 ‘자료’로 내보내게 됩니다. 여기서 반환된 자료는 다른 변수 또는 상수값들처럼 취급할 수 있습니다. 그리고 여기서 함수가 요구하는 x매개변수(parameter)라고 합니다.

주의사항: SUBFUNCTION의 공통점은 선언부를 반드시 실제 사용하는 위치보다 밑에 기술해야 한다는 점입니다.

먼저 SUB 의 예제입니다.

Add 15, 17
Add 22, 13

SUB Add (n1, n2)
    PRINT n1 + n2
END SUB

SUB 는 반환값을 가지지 않습니다. PRINT는 화면에 표시하는 명령일 뿐 프린트하고 나면 이 결과는 메모리에 저장되지 않으며 그러므로 값을 반환하는 것이 아닙니다. 또한 SUB는 사용시 괄호를 넣지 않아야 됩니다. 이 점은 FUNCTION과의 차이점입니다.

 

PRINT Add(15, 23)
num = Add(16, 23) * 44
PRINT num

FUNCTION Add (n1, n2)
    Add = n1 + n2
END FUNCTION

FUNCTION반환값을 가집니다. 반환값은 5라인과 같이 함수이름 = 값 으로 지정합니다. 또한 FUNCTION 은 사용시 반드시 괄호를 사용해야 합니다. 그리고 이렇게 반환된 값은 변수처럼 사용 가능하며 다른 식에도 대입하여 사용할 수 있습니다. 위의 2라인에서는 Add(16, 23)의 결과에 44를 곱해서 대입하라는 명령을 하고 있습니다.

 

EXIT 키워드

EXIT는 For 반복문, 함수 등에서 해당 명령을 종료하라는 의미입니다. 다른 언어에서 break , return과 비슷한 의미입니다. EXIT {FOR | SUB | FUNCTION | .. } 등의 형태로 사용합니다.

FOR i = 1 TO 10
    PRINT i
    IF (i = 5) THEN EXIT FOR
NEXT i

-- 출력 --
1
2
3
4
5

 

아래 예제는 거듭제곱을 구하는 함수를 만드는데, EXIT를 이용해 양수 또는 0이 아닌 값을 입력하면 계산을 중단합니다. 또한 매개변수 ex 부분에 0을 입력하면 1이 출력되도록 하였습니다.

PRINT POW(2, 8)
PRINT POW(2, 0)
PRINT POW(2, -1)


FUNCTION POW (bs, ex)

    IF (ex = 0) THEN
        POW = 1
        EXIT FUNCTION
    ELSEIF (ex < 0) THEN
        PRINT "Insert a positive number"
        EXIT FUNCTION
    END IF

    DIM sum AS LONG
    sum = 1
    FOR ix = 1 TO ex
        sum = sum * bs
    NEXT ix
    POW = sum
END FUNCTION

 

종합예제 – 학생 성적 산출 프로그램

준비중입니다. 자바로 작성된 학생 성적 산출 프로그램을 QBasic 버전으로 변환할 예정입니다.

 

QBasic 기초 시리즈

문의 | 코멘트 또는 yoonbumtae@gmail.com


카테고리: etc.


0개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다