1. 변수의 활용

변수란 저금통에 돈을 넣듯이 어떤 값을 기억시키는 기억장소(ram의 어느 한 부분)를 변수라고 한다. 변수의 값은 상수처럼 정해져 있지 않고 언제든지 변할 수 있다.  변수명은 40자를 넘지 말아야 하며 첫 자를 alphabet 문자로 시작해야 한다. 그 외의 문자들은 알파벳, 숫자, 마침표 등이 될 수 있다. 변수명안에 space는 허용되지 않는다. Qbasic의 keyword는 변수명으로 사용할 수 없다.( 3456, current_balance, Date paid, print) 상수란 프로그램에서 계산에 이용되는 자료로 그  값이 한번 정해지면 변하지 않는 자료를 뜻하며 숫자상수와 문자상수가 있다.

1)숫자상수
   베이직문에서 숫자로 나타낸 것을 말한다.
   예 4, 9, 12
    숫자상수의 사용규칙
     * 부호(+, -)를 가질 수 있으며 양수일 때는 + 를 생략할 수 있다.
     * 소숫점은 사용할 수 있으나 콤마는 사용할 수 없다. 92.5
     * 유효숫자 7자리 이내로 표현된 숫자는 그대로 출력되나 기 이상의 숫자는 지수형태로 출력된다.
 2)문자상수
    베이직문에서 따옴표("  ")안의 문자나 숫자를 문자열이라 하며 하나의 상수로 간주하는데 이를 문자상수라 한다.
    예: "406-9051", "SEOUL",
    문자상수의 사용규칙
    * 숫자도 따옴표 안에 있으면 문자상수가 된다.
    * 문자열의 사용길이는 256 자 정도이다.
    * 문자상수가 0 개 있는 상수를 Null string 이라고 한다.


 변수에 상수를 주어 상수를 출력하는 source code

1) source code

 CLS
 A=4000
 B=3000
 C=6000
 D=A+B+C
 PRINT D

연습문제: 사칙연산에 대해서도 공부해보자.

실행: 합계 상수 12000이 화면에 출력된다.

2) source code

 CLS
 INPUT "input a"; a
 INPUT "input b"; b
 INPUT "input c"; c
 d=a+50
 e=b+60
 f=c+70
 print d,e,f

참고: 또는 print a+50, b+60, c+70

 실행: input 이 화면에 출력되면 차례대로 예를 들면 상수 10, 20, 30을 입력하면 변수 d,e,f 에 계산되어 저장된 값이 출력된다.
 
프로그램에 입력을 하기 위해서는 input 명령을 사용한다. input 명령 다음에는 화면에 나타나는 명령어와 변수의 이름을 써야 한다.  입력되는 값은 변수에 저장된다.

3) source code

 CLS
 INPUT "Please type in number of cars" ; car
 PRINT "You have"; car; "cars."

 실행
 Please input number of cars. 라는 문장이 화면에 출력되면 현재 가지고 있는 차의 숫자를 입력한다.
 3 이라고 입력하면
 You have 3 cars. 가 출력된다.

4) 비디오 가게 주인이 cat이라는 제목의 비디오와 wolf라는 제목의 비디오 그리고 dog라는 제목의 비디오를 가지고 있는 경우이다. 이 경우 programming을 통해서 비디오를 어떻게 관리할 수 있는 지에 대해 알아보자
변수 cat. wolf. dog. tapes를 설정한다.

1단계: tape의 총 개수 관리

source code

CLS
INPUT "Type in number of cat"; cat
INPUT "Type in number of wolf"; wolf
INPUT "Type in number of dog"; dog
tapes=cat+wolf+dog
Print "total number of tapes"; tapes
Enter number of cat 과 같은 문자가 출력되면 현재 보유하고 있는 숫자를 입력하면 된다.  그려면 마지막에 총 tape의 개수를 출력하여 준다.  

2단계: 각  tape의 가격 및 총 가격 관리

source code

cls
input "How much is cat";
price
Input "How many cats do you have";
quantity
total.num.tapes=quantity
total.value=price*quantity
input "How much is wolf"; price
input "How many wolves do you have"; quantity
total.num.tapes=total.num.tapes+quantity
total.value=total.value+price*quantity
input "How much is dog"; price
input "How many dogs do you have"; quantity
total.num.tapes=total.num.tapes+quantity
total.value=total value+price*quantity
average.value=total.value/total.num.tapes
print "The total value of all tapes is:"
print "$", total.value
print "The average value is:"
print "$", average.value

실행 및 해설

여기에서는 변수 price/quantity/total.num.tapes/total.value 에 연이어 계산되는 새로운 상수가 계산되어지면 그 결과 상수가 저장되는 점에 유의한다.   또한 계산은 오른쪽의 값이 먼저 계산되고 왼쪽으로 진행되는 순서이다. 잘 이해가 안가면 실제 숫자를 대입해 보면 빨리 이해를 할 수 있을 것이다.

또는 다음과 같이 programing을 하여도 된다.

가정하여 cat의 개당 갸격이 1000원 wolf의 개당가격이 2000원 dog의 개당 가격이 3000원이라고 한다면

source code

CLS
INPUT "Type in number of cat"; cat
INPUT "Type in number of wolf"; wolf
INPUT "Type in number of dog"; dog
tp=cat*1000+wolf*2000+dog*3000
print "total price of video"; tp

2. for/next 구문

2.1 간단한 출력문 반복 프린트

(1)
source code

For
x=1 to 10
print  "rose"
next
x

실행

rose
rose
rose
rose
rose
rose
rose
rose
rose
rose

참고: X 는 변수이며 next 다음의 변수는 생략될 수 있다.

(2)
source code

for x=1 to 10
print "rose"; x
next x

실행

rose 1
rose 2
rose 3
rose 4
rose 5
rose 6
rose 7
rose 8
rose 9
rose 10

(3)
source code

cls
input "Please enter your name.", name$
print
for x=1 to 10
print name$
next x

실행

Please enter your name. 이 화면이 나오면 바로 이름을 입력한다. Hyon-soo, Lee 입력하면

Hyon-soo, Lee
Hyon-soo, Lee
Hyon-soo, Lee
Hyon-soo, Lee
Hyon-soo, Lee
Hyon-soo, Lee
Hyon-soo, Lee
Hyon-soo, Lee
Hyon-soo, Lee
Hyon-soo, Lee

가 출력된다.


2.2 구구단 자동실행 프로그램

source code

input "dan="; d
for x=1 to 9
print d;"*; x "="; d*x
next x

실행
키를 누르면
dan=? 이라고 몇단을 실행하느냐는 물음표가 나온다
이 때 1을 입력하면

1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9

와 같이 실행된다.

2.3 연속되는 숫자 자동합계

(1) source code

CLS
FOR x=1 to 10
sum=sum+x
if x=10 then print "total="; sum
next x

실행키를 누르면 1부터 연속되는 숫자 1+2+3+5+6+7+8+9+10 의 합계인
total=55를 화면에 출력한다.

(2) source code

cls
for x=2 to 8
sum=sum+x
if x=8 then print sum

실행키를 누르면 x=8  일 때의 합 20을 출력한다.

3. if~then의 형식

source code

cls
print "menu"
print "-----"
print "1. red "
print "2. green "
print "3. blue "
input "your selection:". choice
if choice=1 then print "You chose red."
if choice=2 then print "You chose green."
if choise=3 then print "You chose blue."

실행

menu
------

1. red
2. green
3. blue

Your seletion이 화면에 출력되면 1을 입력할 경우
You chose red 라는 글자가 출력된다.   

4. if ~ then, end if

source code 1

cls
print "menu"
print "-----"
print "1. red"
print "2. green"
print "3. blue"
input "Your selection:". choice
if choice=1 then
color 4
print "You chose red."
end if
if choice 2 then
color 2
print "You chose green."
end if
if choice =3 then
color 1
end if

실행

화면에

menu
-----
1. red
2. green
3. blue
Your selection 이라는 글자가 화면에 출력되면 1을 입력하였을 경우
빨간 색으로
You chose red 라는 글자가 화면에 출력된다.
 

source code 2

cls
input "Enter sex:", sex$
if sex$="male" then
input "enter the height:", H
if H>175 then print "ok" else print "no"
endif
if sex$="female" then
input "enter the height:", H
if H>=160 then print "ok" else print "No"
endif
end

해설: 남자는 키가 175 cm 이상되는 사람만 여자인 경우는 키가 160cm  이상되는 사람만 출력하도록 하는 프로그램
 

5. 비교형식

source code

cls
input Please enter a numrer:", number
if number <=100 then goto lessthan
print "Your number is greater than 100"
end
lessthan:
print "Your number is less than or equal 100"

실행

Please enter number 가 화면에 출력되면 예를 들어 102를 입력하면
Your number is greater than 100 이라는 화면이 출력되고
99를 입력하면
Your number is less than or equal to 100 이라는 문자가 화면에 출력된다.

6. 배열

6.1 2차원 배열

data 50, 54, 56
data   5,  9,  0
data   1,  1,  1
data   2,  2,  2
data 10, 10, 10

상기와 같은 모양으로 출력되는 프로그램을 작성해보자

source code

cls
dim z(5,3)
for y=1 to 5
for x=1 to 3
read z(y,x)
next x
next y
for y=1 to 5
for x=1 to 3
print z(y,x)
next x
print
next y
data 50, 54, 56
data 5, 9, 0
data 1, 1, 1
data 2, 2, 2
data 10, 10, 10

실행하면

50 54 56
5  9    0
1   1   1
2   2   2
10 10 10
으로 화면이 출력된다.

7. Graphic Mode

일반적으로 사용되고 있는 text mode로 화면에 표시할 수 있는 최대글자수는 가로 80 * 세로 25이다 그러나 graphic mode에서의 기본단위는 글자가 아니라 점(pixel)이며 이 점을 화면에 얼마나 최대로 찍을 수 있는 정도를 해상도라 한다. 해상도는 화면의 크기와 무관하며 그래픽 카드 종류에 따라 결정된다. graphic adapter의 해상도의 해상도와 종류는 다음과 같다.

그래픽 애덥터 종류        해상도

CGA                              320*480
Hercules                        720*348
VGA                               640*480


QBASIC에서는 화면에 그림을 그리기 전에 text mode에서 graphic mode로 전환시키기 위해 프로그램 선두에 screen mode를 선언해야 한다. 현재 일반적으로 사용하고 있는 VGA에서는
Screen Mode 12를 주면 되고 색상은 16색을 지원한다.


번호

색상

번호

색상

0
1
2
3
4
5
6
7

black
blue
green
cyan(청록색)
red
magenta(보라)
brown
light gray

8
9
10
11
12
13
14
15

dark gray
light blue
light green
light cyan
light red
light magenta
주황
white

 

실제로 색상이 적용되는 다음 프로그램을 실행해보자

source code 1

screen 12
cls
circle (320, 220), 60, 0
circle (320, 220), 70, 1 
circle (320, 220), 80, 2
circle (320, 220), 90, 3
circle (320, 220), 100, 4
circle (320, 220), 110, 5
circle (320, 220), 120, 6
circle (320, 220), 130, 7
circle (320, 220), 140, 8
circle (320, 220), 150, 9
circle (320, 220), 160, 10
circle (320, 220), 170, 11
circle (320, 220), 180, 12
circle (320, 220), 190, 13
circle (320, 220), 200, 14
circle (320, 220), 210, 15

실행

화면에 중심점 x, y 좌표(320, 220)에 최소 반지름이 60에서 10씩 증가하는 동심원이 처음색상 흑색을 초기값으로하는 16개가 화면에 아름답게 그려진다. (흑색은 바탕화면과 동일하므로 식별되지 않는다. )

상기 프로그램은 for ~ next 구문을 이용하여 다음과 같이 간단히 해결된다.

source code 2

screen 12
cls
Y=0
for x=60 to 210 step 10
circle (320, 220), x, y
y=y+1
next x

soruce code 3

cls
screen 12
for I=100 to 150 step 10
circle (300, 200), I, 4
next I

해설: 위의 source에서 4는 적색을 나타낸다. 숫자를 바꿔가며 색깔이 변하는 모습을 관찰하자

8. Sound

 play: 지정된 음악을 연주해준다.
 형식: play 문자변수 또는 "음계명"
 음의 계명 c  d  e   f   g   a   b
               도 레 미 파 솔  라  시
         +:  반음 올림 -: 반음 내림
 템포(Tn): n은 32~255까지 지정하며 숫자가 클수록 빠르며 지정하지 않으면 T120으로 연주한다.
 옥타브(On): n은 0~6까지 지정하며 숫자가 클수록 위의 옥타브이며 지정하지 않으면 o4로 간주하고 한번 지정하면 다음에 지정할 때까지 계속해서 지정한 옥타브로 연주한다.
    높이  0   1   2   3   4   5   6  
    기호 o0 o1 02 o3 o4 o5 o6
    * 다음과 같이 옥타브를 지정해주어도 된다.
      >: 한 옥타브 높인다.
     >>: 두 옥타브 높인다.
     <<: 두 옥타브 내린다.
 

 다음 음악을 연주해보자
  
 source code

 play "t120"
 play ""cdefgabo5c"

 source code

 play "t120"
 play "cdefgab>c

음표(Ln): n은 1~64까지 지정한다.
              온음표   2분음표  4분음표  8분음표  16분음표  32분음표  64분음표
               L1         L2          L4         L8          L16          L32          L64
 쉼표(Pn): n은 1~64까지 지정한다.
               온쉼표  2분쉼표   4분쉼표  8분쉼표  16분쉼표  32분쉼표  64분쉼표
               P1        P2           P4         P8          P16          P32         P64

봄바람 노래 source code

cls
rem Spring Wind
play "mn t120"
print "sol sol buneun bombaram sain nun nogigo"
play "o3L4c.e8go4co3ao4c8o3a8g2f.g9ecd2cp4"
print "jandibaten saesagi parut parut nagoyo"
play "ggffeg8e8d2ggffeg8e8d2"
print "sinaetmuleun jol jol jol noraehamyo hurune"
play "c.e8go4co3ao4c803ag2f.g8ecddcp4" 

어머님 은혜 source code

cls
rem Thanks to Mom
play "mn t80"
print "Nopgo Nopeun Haneulira Maldeul hajiman
play "o3l4ef8go4c8c8o3b8a8g.ag8g8f8e8l2d.p8l4"
print "Naegenun nopunge tohana itchi"
play "l4ef8go4c8c8o3b8a8g.ag8f8e8d8l2c.p8l4"
print "nausigo girusineun omonim eunhye"
play "dd8gf8e8d8c8d.ee8f8g8a8l2g.p8"
print "pureun hanul gubodado nopeungotgatae"
play "l4o4cc8o3ba8g8a8g8e.aa8g8a8b8o4l2c.p8"