パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
BASIC超基本1(30分でBASIC−−基本8語)(互換)
====================================================================================
・行番号、変数、代入
・Print / Locate / Width / Input / If then else / Goto / Inkey$
/For Next /
BASICの詳細については、お使いのBASICのマニュアルや、HELP,その他BASIC
の一般書籍でお調べいただくとして、まったくの初心者でもBASICで手っ取り早く簡単なプログラム
ができるように、超基本の8命令を厳選してまとめてみました。
なお、使うBASICはWINDOWS上のフリーソフトである、潮田氏による
N88互換BASIC for Winを念頭においてますが、他のBASICでもほぼ共通です。
====================================================================================
1 行番号、変数、代入
(1) 行番号
BASICプログラムは、先頭に行番号を記述します。行番号は1づつ増やしてもかまい
ませんが、たいていは10おきにつけます。(あとで、途中に追加しやすいようにという配慮)
実行時には、基本的に小さい行番号から実行されていきます。
(2) 変数と代入
変数は大きく分けて数値変数と文字変数があります。変数名の最後に$をつけると、
文字変数として扱われます。
A=5 Aは数値変数で Aの値は5
Q$="5" Q$は文字変数でQ$は5という文字が入っている
上記の場合の =
は等号ではなく、代入をあらわしています。すなわち、
Aに5を代入するという意味です。(BASICの場合、等号としても
= を使うので注意
等号としての使用は IF 文の個所を参照)
従って、A = A+1 というのは、(元の)Aに1加えた値を(新しい)Aに代入するということ
になります。
では
10 A=3
20 A=A+2
30 PRINT A , B
というプログラム(PRINT文は下を参照。画面への表示の命令)で、A、Bはそれぞれいくつ
でしょうか。Aは5ですね。さて、Bはどうでしょう。いちども、Bに数値が代入されていません。
N88互換BASIC for Win
では一度も数値の代入されていない変数には、初期値として0が
設定されます。(BASICの種類によって取り扱いが違うが、だいたい0が設定される)
従って、この場合
5 0 |
と画面に表示されます。
このように大方のBASICにおいては、未定義(初期値を与えてない)変数をいきなり使っても、0を初期値
として与えてくれます。これはBASICのおおらかで、プログラムしやすい点ですが、反面ルーズとも言えます。
他の言語では、未定義の変数は全てエラーとしてペケにするものが多いです。
2 PRINT
なにはともあれ、画面に表示することが、一番の感心事ですよね。
PRINT 文で画面に表示します。
PRINT 式<数値>
(例) PRINT 4+5 PRINT 変数<数値変数、文字変数> (例) PRINT A PRINT "<文字列>" (例) PRINT "HELLO" もちろん、式、変数、文字列を組み合わせて、使うことができます。 その際、複数のデータの区切りとして , (コロン) ;(セミコロン)を使います (例)PRINT "金額"; A*100; "円" |
以下の2つのサンプルプログラムがどう表示されるか、実験してみて下さい。
10 A=5 20 PRINT A |
結果画面は下図のような感じ
5 |
10 PRINT
"HELLO" 20 PRINT "HELLO" 30 PRINT "HELLO","HELLO" '区切りがコロンです(コロンの場合空白が出力されます) 40 PRINT "HELLO";"HELLO" '区切りがセミコロンです (セミコロンでは、続けて文字が出力) |
結果画面は下図のような感じ
HELLO HELLO HELLO HELLO HELLOHELLO |
3 LOCATE, WIDTH
画面上の表示する座標を指定するのが LOCATE文です。
LOCATE x座標<数値、変数、式>, y座標<数値、変数、式> |
画面は 横*縦で、40*20、40*25、80*20、80*25の4タイプがあり
これはWIDTH で指定します。 (例)WIDTH
80, 20
80*20の指定の時は、左上が(0、0)、 右下が(79、19)という座標になります。
(例)
(0、0).......................
.......(79、0) ......... ........... .....(79、19) |
SAMPLE-3は画面のど真ん中に Aという文字を表示します。
10 WIDTH 80,20 20 LOCATE 39,9 30 PRINT "A" |
これで、好きな位置に表示できるようになりました。
4 INPUT
ユーザーに何か数値を入力させたい時に使うのがINPUTです。
INPUT ["<文字列>
" {,|;}]
変数 ,[変数]
変数はいくつでもOKです。 [ ]は省略可 { | }はどちらか選択 INPUT文が実行されると、(文字列)を表示して、キーボードからの入力待ちになります。 |
SAMPLE-4は身長と体重を入力させ、そのまま画面に再度表示するプログラムです。
10 INPUT"身長と体重を入れて下さい";H,W 20 PRINT"身長";H;"体重";W |
SAMPLE-5は半径を入力し、円の面積を出すプログラム
10 INPUT "半径";R 20 MENSEKI=R*R*3.14 30 PRINT "面積";MENSEKI |
5 IF .... THEN ...... ELSE
論理式の条件判定をします。
IF 論理式 THEN 文
[ELSE 文 ] ELSEは省略可能 論理式を判定し、論理式が真なら THEN を実行 、 偽なら ELSEを 実行します。 |
SAMPLE-6は入力した歳により、出力文をかえます。
10 MYAGE=30 20 INPUT "あなたの歳を入れて下さい" ; YOUR 30 IF MYAGE>=YOUR THEN PRINT "私は同い歳か、年上" ELSE PRINT "私は年下" |
6 GOTO
指定された行番号へジャンプさせます。
(例) GOTO 200
SAMPLE-7は永遠に、0から9までの数字を画面の真ん中に表示し続けます
10 WIDTH 80,20 20 X=0 30 LOCATE 39,9 40 PRINT X 50 X=X+1 60 IF X>9 THEN X=0 70 GOTO 30 |
7 INKEY$
INPUT文は、キーボードからの入力待ちとなり、リターンキーが押されるまで、そこで
プログラムは実行待機となりましたが、これではシューティングゲームはできません。
それに対しINKEY$はキー入力待ちをせず、その時押されているキーの文字を得ます。
もし何もキーが押されていなければ、INKEY$の値はヌルストリング(空文字)となります。
SAMPLE-7は永遠に止まらないプログラムとなっていますが、これでは困ります。
1
のキーが押されたら終了するようにしたのが、SAMPLE-8です。
10 WIDTH 80,20 20 X=0 30 LOCATE 39,9 40 PRINT X 50 X=X+1 60 IF X>9 THEN X=0 70 A$=INKEY$ 'ここで押されているキーを取得しA$に代入 80 IF A$="1" THEN GOTO 90 ELSE GOTO 30 'A$の判定 1なら 90へ 90 END |
ここまで、使えれば、簡単なプログラムならいろいろ組めるようになるはずです。
8 FOR ....... NEXT
コンピューターに一番やらせたいのは、何といっても単純な繰り返し作業です。(生身の人間が一番やりたく
ないことです。)そのための命令が FOR........ NEXTです
FOR 変数=初期値<数値、変数>
TO 終値<数値、変数> 文 NEXT [変数] [ ]は省略可 変数が終値になるまでFOR
NEXTのループを繰り返します。 |
SAMPLE-9、SAMPLE-10はそれぞれ、1から入力された数までの総和(1+2+3+....)
を求めるプログラムです。SAMPLE-9はFOR NEXTを使わない場合です。
10 INPUT "総和の終値を入力"
; E 20 TOTAL=0 : X=1 30 TOTAL=TOTAL+X 40 X=X+1 50 IF X>E THEN GOTO 60 ELSE GOTO 30 60 PRINT TOTAL |
10 INPUT "総和の終値を入力"
; E 20 TOTAL=0 30 FOR X=1 TO E 40 TOTAL=TOTAL+X 50 NEXT X 60 PRINT TOTAL |
FOR ... NEXTにはその仕様をしっかり把握しておかないと、思いもかけない落とし穴にはまることが
あります。FORループの落とし穴もあわせて参照下さい。
9 補足
以上の命令でBASICのプログラムは簡単なものならそこそこ、組めるはずです。
あとは、基本命令はGOSUB、 RETURN
(サブルーチンにとばして、戻る)
CLS(画面を消去する)とかぐらいでしょうか。
そこらへんは、BASIC超基本(10語でシューティングゲームを作る)を参考にして、
研究してみて下さい。