PC-BASIC 간편강좌

lfs의 이미지





실용 베이직 프로그래밍


1 베이직 소개

1.1 베이직 언어 역사

 베이직을 처음 만든 사람은 독일의 다니엘(Daniel)이라는 사람이 만들었다. 독일 바다 항구가 50개인데 컴퓨터 명령어의 문제점을 해결하고자 발명되었던 것이 베이직언어이다.


 베이직이 만들어진후 이것을 미국 국방성에 매도를 하게 되었고 세상밖으로 나오게 되었던 것이다. 일부 사람은 미국 국방성에서 만들어졌다고 잘못알고 있으며 사실은 독일 항구에서 다니엘 이라는 사람이 만들었던 것이다.


 그렇게 해서 베이직이 만들어 지고 그후에 Advanced BASIC(BASICA)와 Tandy 1000 GWBASIC 그리고 PCjr Cartridge Basic이 만들어졌다. 이 세가지의 베이직은 인터프리터 형이다.


 세가지의 베이직이 만들어 지고난후 도스 운영체제가 만들어 지자 GW-BASIC이 만들어 졌다.GW-BASIC은 인터프리터 형이고 그 후에 Quick-Basic이 컴파일러 형으로 마이크로 소프트사에서 만들어 졌다. Quick-Basic은 그후에 인터프리터 형으로도 만들어 졌으나 워낙에 버그가 많이 있어서 잘 사용되지 않게 되었다. 즉 Quick-Basic은 두가지 버전(인터프리터,컴파일러)으로 만들어졌던것이다.


 인터넷이 전세계에 퍼지자 이제는 Free-Basic(컴파일러)이 만들어 졌다. Quick-Basic과는 약간의 업그레이드 버전이라 보면 알수가 있다. 또 최근에는 GWBASIC 에뮬레이터 베이직

이 만들어 졌다. 그것이 바로 Pc-Basic이다. Pc-Basic은 Advanced BASIC(BASICA)와 Tandy 1000 GWBASIC 그리고 PCjr Cartridge Basic을 모두 에뮬레이트 할수 있는 베이직

으로 최근에 나온 베이직이라 할수 있다. 참고로 Pc-Basic은 인터프리터 형이니 참고 바란다.


1.2 PC-BASIC 맛보기

 PC-BASIC을 실행하면 검정색 바탕에 흰글자가 나온다. ok라는 글자 밑에 다음과 같이 글자를 입력해 보자







PRINT "HELLO WORLD"


 그리고 엔터를 치면 다음과 같은 화면이 나온다.







HELLO WORLD


Ok


 더욱 복잡한 프로그래밍을 해보자.(입력할때는 번호까지 입력한다.)







10 PRINT "HELLO WORLD"


20 PRINT "MY NAME IS KIM"






 프로그램을 입력한후 키보드 버튼 F2키를 누르면 "RUN"예약어가 나오고 엔터를 치면 다음과 같은 화면이 나온다.







RUN


HELLO WORLD


MY NAME IS KIM


Ok



 두줄의 문자열을 나타내는 프로그램을 저장하여 보자.

 먼저 프로그램이 잘 작성되어 있는지 살펴 보자. F1키를 누르면 “LIST”예약어가 나오고 엔터를 치면 방금 입력된 두줄의 프로그램 소스가 나오게 된다.







LIST


10 PRINT "HELLO WORLD"


20 PRINT "MY NAME IS KIM"


Ok



 다음은 이 두줄짜리 프로그램을 저장하여 보자. F4키를 누르면 “SAVE”예약어가 나오고 그뒤에 파일명을 입력하자.그리고 엔터를 치면 된다.







SAVE"HELLO.BAS"


Ok


 이렇게하면 "HELLO.BAS"파일이 생성되게 된다.

 

 PC-BASIC을 종료할려면 다음과 같이 입력해 보자.







SYSTEM


 이렇게하면 PC-BASIC이 종료하게 된다.


 초보자가 하기에는 아주 쉽다. 프로그래밍이 어렵게만 느껴진다면 간단한 베이직 프로그래밍이 좋다.


2 베이직 구조


2.1 변수

2.1.1변수명

 변수는 계산을 하는데 있어서 값이 자꾸 변하는 수를 변수라 한다. 변수명(변수이름)은 문자(A-Z)로 시작해야 한다. 모든 문자가 변수명으로 쓰일수 있으며 숫자(0-9)나 점(.)도 변수명으로 쓰일수 있다.

 예약어로 변수명은 만들 수 없다. 예를 들자면 "TO!"로 변수명을 만들 수 없고 "AS!"는 가능하다.

 그리고 똑같은 변수명을 만들더라도 변수형이 다르면 다른 변수로 취급한다. 예를 들자면"A$","A%","A!","A#"은 각기 다른 변수로 다룬다. 이점 명심하기 바란다.

예제:








10 DIM A$


20 DIM A%


30 LET A$="HELLO"


40 LET A%=45


50 PRINT A$


60 PRINT A%


 예제 프로그램에서 DIM은 변수를 선언하는 명령문이다. LET은 변수의 값을 할당하는 명령문이다. PRINT는 변수값을 나타내는 명령문이다.


2.1.2 변수형

 베이직 변수형(변수의 모양)은 문자열형,정수형,단일정밀실수형,다중정밀실수형으로 나눈다.

표:


































기호





크기



범위



$



문자열



할당된 문자열공간과3바이트



0-255 문자(아스키코드)



%



정수



2바이트



-32768-32767



!



단일정밀실수



4바이트



*a(표 아래참조)



#



다중정밀실수



8바이트



*b(표 아래참조)


a*=±2.938726·10-39—±1.701412·1038

b*=±2.938735877055719·10-39—±1.701411834604692·1038


2.2 연산자

2.2.1 할당(값지정)연산자

 할당연산자는 LET명령문을 작성할 때 사용한다. 보통 변수에 값을 할당할 때 사용하는 것이다.

예제:







10 DIM A%


20 DIM B%


30 DIM C%


40 LET A%=10


50 LET B%=20


60 C%=A%+B%


70 PRINT C%


 예제에서 40줄과 50줄 그리고 60줄에서 사용하는 “=”(등호)가 할당연산자이다.


2.2.2 산술(계산)연산자

 산술연산자는 더하기,빼기,곱하기,나누기,나머지 연산을 하는 연산자이다.

예제:







10 DIM A%


20 DIM B%


30 DIM C%


40 DIM D%


50 DIM E%


60 DIM F%


70 DIM G%


80 LET A%=20


90 LET B%=10


100 C%=A%+B%


110 PRINT "HAP:"C%


120 D%=A%-B%


130 PRINT "BBAEGI:"D%


140 E%=A%*B%


150 PRINT "GOPHAGI:"E%


160 F%=A%/B%


170 PRINT "NANUGI:"F%


180 G%=A% MOD B%


190 PRINT "NAMEOGI:"G%


 예제에서 100줄,120줄,140줄,160줄,180줄 순서대로 더하기,빼기,곱하기,나누기,나머지 연산자를 사용하였다.(연산자기호는 +,-,*,/,MOD 순서대로이다.)


2.2.3 비교(관계)연산자

 비교연산자는 두 값을 비교하는 연산자이다.

예제:







10 DIM A%


20 DIM B%


30 DIM C%


40 LET A%=10


50 LET B%=20


60 C%=A%=B%


70 PRINT "EQUAL:"C%


80 C%=A%<>B%


90 PRINT "NOT EQUAL:"C%


100 C%=A%<B%


110 PRINT "LESS:"C%


120 C%=A%>B%


130 PRINT "GREATER:"C%


140 C%=A%<=B%


150 PRINT "LESS EQUAL:"C%


160 C%=A%>=B%


170 PRINT "GREATER EQUAL:"C%


 예제에서 60줄 첫 번째 “=”는 할당연산자이고 두 번째 “=”는 변수값이 똑같은지 계산하는 등호연산자이다.


 관계연산자는 문자열이나 숫자의 관계를 알아보는 연산자이며 문자열은 문자열과 비교하여야 하고 숫자는 숫자와 비교하여야 한다. 그렇지 않으면 "Type mismatch"(형 불일치)에러가 나오게 된다.

 관계연산자가 참이면 -1(TRUE)값을 가지고 거짓이면 0(FALSE)값을 가진다. 자세한 것은 표를 참고해 보자.

표:







































관계연산자



동작



결과



=



같다



피연산자가 같으면 참(-1)값, 아니면 거짓(0)값



<>



다르다



피연산자가 다르면 참(-1)값, 아니면 거짓(0)값



<



작다



피연산자가 작으면 참(-1)값, 아니면 거짓(0)값



>



크다



피연산자가 크면 참(-1)값, 아니면 거짓(0)값



<=



작거나 같다



피연산자가 작거나 같으면 참(-1)값, 아니면 거짓(0)값



>=



크거나 같다



피연산자가 크거나 같으면 참(-1)값, 아니면 거짓(0)값



2.2.4 그 밖의 연산자

 그밖의 연산자로는 비트연산자,문자열 연산자가 있으나 실용적이지 못한 관계로 건너 뛰어보자. (비트연산자,문자열은 C언어를 배울 때 배우면 실용적이다.)


2.2.5연산자 우선순위
































1



^(거듭제곱)



2



*(곱하기)



/(나누기)



3



MOD(나머지)



 



4



+(더하기)



-(빼기)



5



=(등호비교)



<>(같지않음)



<(작음)



>( 큼)



<=(작거나같음)



>=(크거나 같음)



2.3 제어문

 제어문으로는 "IF-THEN-ELSE"문이 있다.“IF”와 “THEN”문 사이에 관계연산자를 사용하고 이 관계연산자가 참이면 “THEN”과 “ELSE”문 사이의 실행문을 실행한다. 만약에  관계연산자가 거짓이면 "ELSE"문 다음의 실행문을 실행 시킨다. 그리고 제어문을 종료할려면 “END”문을 사용한다.

예제:







10 INPUT "HOW OLD ARE YOU:";AGE%


20 IF AGE%>30 THEN 100


30 IF AGE%<30 THEN 200 ELSE PRINT "YOU ARE 30 YEARS OLD."


40 END


100 PRINT "YOU ARE OVER 30."


110 END


200 PRINT "YOU ARE NOT YET 30."


210 END


 예제에서 10줄의 "INPUT"문은 키보드로부터 변수를 입력 받는 명령문이다. 그리고 세미콜론을 만나면 변수를 입력할 프롬프트가 띄워지게 된다. 이때 입력하면 된다.

 20줄,30줄의 “THEN”문 다음의 숫자는 관계연산자가 참이면 그 숫자의 줄로 이동하라는 뜻이다.


2.4 반복문

 반복문에는 “FOR-NEXT”문과 “WHILE-WEND”문이 있다.

 먼저 “FOR-NEXT”문을 공부해보자. “FOR-NEXT”문은 “FOR”문과 "TO"문 사이에 변수 초기값을 할당하고 “TO”문과 “STEP”문 사이에 제한값을 적어 놓는다. 그리고 “STEP”문은 증감하는 숫자를 적어 놓으면 된다. "NEXT"문 다음은 반복할 변수명을 적어 놓는다.

예제:







10 FOR I%=1 TO 10 STEP 2


20 PRINT "*"


30 NEXT I%


  예제에서는 별로 이야기 할것이 없다.

 다음은 “WHILE-WEND”문이다. “WHILE”문 다음은 관계연산자를 적어 놓고 그 다음줄부터 반복해서 실행할 문을 적어 놓는다. 그리고 “WEND”문은 “WHILE”문이 종료한다는 뜻이다.

예제:







10 DIM A%


20 LET A%=0


30 WHILE A%<10


40       A%=A%+1


50       PRINT A%


60 WEND


  예제에서는 별로 이야기 할것이 없다.


2.4.1 중첩 반복문(FOR-NEXT)

예제: 구구단







10 FOR I%=2 TO 9 STEP 1


20       FOR J%=1 TO 9 STEP 1


30                PRINT I% "*" J% "=" I%*J%


40       NEXT J%


50 NEXT I%


2.4.2 중첩 반복문(WHILE-WEND)

예제: 구구단







10 DIM I%


20 DIM J%


30 LET I%=2


40 LET J%=1


50 WHILE J%<=9


60       WHILE I%<=5


70                 PRINT I% "*" J% "=" I%*J%,


80                 I%=I%+1


90       WEND


100      PRINT :


110      J%=J%+1


120 WEND                    


 이 예제는 PC-BASIC 버그가 있어서 2,3,4,5단 1만 나온다.하지만 연구할만한 예제이다. 70줄의 끝부분에 쉼표(“,”)는 한줄에 계속이어서 출력하는 기능을 한다. 100줄의 콜론(“:”)은 행단위를 바꿔서 출력하는 기능을 한다. 마지막으로 버그만 없다면 나머지 6단에서 9단 까지도 출력이 되는 프로그램을 만들었으면 한다.


2.5 배열 과 DATA명령문

 배열은 여러개의 정보를 다루는데 편리한 기능을 한다. 배열을 선언할 때  예를 들자면 일요일부터 토요일까지의 일주일을 예로들 수 있다.

예제:







10 DIM MONTH$(6)


20 LET MONTH$(0)="SUN"


30 LET MONTH$(1)="MON"


40 LET MONTH$(2)="TUE"


50 LET MONTH$(3)="WED"


60 LET MONTH$(4)="THU"


70 LET MONTH$(5)="FRI"


80 LET MONTH$(6)="SAT"


90 FOR I%=0 TO 6 STEP 1


100      PRINT MONTH$(I%),"DAY"


110 NEXT I%


  예제를 보자면 10줄의 “DIM”명령문은 배열을 메모리에 할당하는 명령문이다. 즉 10줄은 배열을 선언하는 구문이다. 배열을 선언하는 방법은 “DIM”명령문을 쓰고 배열명을 적은다음 변수형을 쓰고 소괄호안에 배열크기를 적으면된다. 배열원소는 0부터 시작하고 끝은 “배열크기 ”로 끝이 난다. 20줄부터 80줄까지 배열원소에 값을 지정해주는 구문이다. 배열원소를 지정해주는 방법은 이 말고도 "FOR"문이나 “WHILE”문을 이용하기도 한다.

예제:







10 DIM NUMBER%(5)


20 FOR I%=0 TO 5


30       NUMBER%(I%)=I%


40       PRINT NUMBER%(I%)


50 NEXT I%


  예제는 FOR문을 이용하여 배열에 값을 지정해 보았다. 배열원소 개수 이상으로 값을 지정하려 든다면 범위초과(Subscript out of range)오류가 나온다.

 

 DATA명령문은 배열과 비슷하나 배열원소 개수가 없다. 오로지 값만 나열되어 있고 READ명령어로 읽기만하는 것이다. RESTORE명령어는 DATA명령어가 여러줄로 나열되었을 때 선택적으로 읽을수 있게 하는 명령어다.

예제:







10 DATA KOREAN,10


20 READ FROM$,I%


30 PRINT FROM$,I%


  예제에서는 문자열과 정수 숫자를 READ명령문을 이용하여 화면에 출력하는 소스이다. 조금 더 복잡한 프로그래밍을 해보자.

예제:







10 DATA KOREAN,10,JAPAN,20


20 FOR M%=0 TO 1


30        READ FROM$,I%


40        PRINT FROM$,I%


50 NEXT M%


 20줄에서 STEP명령문이 없으면 1씩 증가하는 것이다. 그리고 FOR-NEXT문을 실행하면 반복 횟수만큼 DATA문이 있는 자료를 읽어온다.


2.6 파일 입출력

 PC-BASIC에서 파일 입출력은 OPEN명령어를 실행하면 데이터파일 내용이 지워지는 버그가 있다. 그래서 파일 입출력을 할 수가 없다. 어쩔수 없이 파일 입출력은 이정도로 하자.


2.7 그래픽

 그래픽을 가르쳐 주면 장난을 치는 사람이 있다. 예를 들자면 바탕색과 글자색을 똑같이 만들어서 베이직을 못하게 만들 수 있기 때문이다. 그러므로 그래픽은 생략하고 곧바로 C언어를 배웠으면 한다.








Forums: 
익명 사용자의 이미지

80년대 초딩 때 베이직 공부했었는데 기억이 새록새록 하네요.

...의 이미지

10 REM binary.bas
20 DATA 324, 69, 6969, 18, 666, 99, 33, 5, 1, 3
30 MAX=10
40 DIM ARR(MAX)
50 FOR I=1 TO MAX
60    READ ARR(I)
70 NEXT
80 GOSUB 240
90 GOSUB 150
100 GOSUB 240
110 INPUT VALUE
120 GOSUB 290
130 PRINT RESULT
140 END
150 FOR I=1 TO MAX-1
160    FOR J=I+1 TO MAX
170       IF NOT ARR(J) < ARR(I) GOTO 210
180          TMP=ARR(I)
190          ARR(I)=ARR(J)
200          ARR(J)=TMP
210    NEXT
220 NEXT
230 RETURN
240 FOR I=1 TO MAX
250    PRINT ARR(I);
260 NEXT
270 PRINT
280 RETURN
290 HEAD=1: TAIL=MAX
300 WHILE HEAD<=TAIL
310    MID=INT((HEAD+TAIL)/2)
320    IF ARR(MID)=VALUE THEN RESULT=MID: GOTO 360
330    IF ARR(MID)>VALUE THEN TAIL=MID-1 ELSE HEAD=MID+1
340 WEND
350 RESULT=-1
360 RETURN

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.