「BASIC」の版間の差分
=== 点のプロット === 命令「PSET」を使うと、指定した位置に、点をひとつ追加します。 書式は PSET(x座標,y座標),色番号 です。 PSETの活用方法は通常、次のように、FOR文などの繰り返し文と |
→繰り返し FOR NEXT: IをNに置き換え。数字の1と紛らわしい。 |
||
364 行 | 364 行 | ||
10 J=0 |
10 J=0 |
||
20 '''FOR''' |
20 '''FOR''' N=1 TO 5 |
||
30 J=J+ |
30 J=J+N |
||
40 PRINT " |
40 PRINT "N=";N;" J=";J |
||
50 '''NEXT''' |
50 '''NEXT''' N |
||
60 END |
60 END |
||
373 行 | 373 行 | ||
この例は、FORからNEXTの間を繰り返します。回数は、1から5までの5回。もしSTEPを指定してあれば、増量値の設定ができます。 |
この例は、FORからNEXTの間を繰り返します。回数は、1から5までの5回。もしSTEPを指定してあれば、増量値の設定ができます。 |
||
これを実行すると以下の様に表示されます。 |
これを実行すると以下の様に表示されます。 |
||
FORの直後の変数(上記の場合はN)と、NEXTの直後の変数は、同じ変数でなければなりません。 |
|||
<pre> |
<pre> |
||
N= 1 J= 1 |
|||
N= 2 J= 3 |
|||
N= 3 J= 6 |
|||
N= 4 J= 10 |
|||
N= 5 J= 15 |
|||
</pre> |
</pre> |
||
2017年8月10日 (木) 06:01時点における版
プログラミング言語BASICの使用法
はじめに
まず、使用するBASICを起動して下さい。
BASICには大きくわけて、
- MS-DOS時代までの「古いBASIC」 (N88-BASICやF-BASIC、MSX-BASICなどを想定)
- 「JIS規格BASIC」やQuickBASIC以降の、「新しいBASIC」
- Microsoft Visual Basic以降の、GUIに特化したBASIC
の三種類があります。ここでは最初の二種類のBASICを対象にしますが、ほとんどの構文については三つ目の種類のBASICにも「新しいBASIC」と同じことが通用します。違いについてはその都度、注記します。
古いBASICでのプログラムの入力
BASICで画面に文字を表示するためには PRINT 文を使います。ただし、新しいBASICを使っている方は、この節は読み飛ばしてもらっても構いません。
BASICが起動すると、「Ok」「Ready」など(BASICや機種によって異なる)の文字の下に「■」(カーソル)が出ます。カーソルはカーソルキーの上下左右で移動できます。このカーソルが出ているときに、BASICのプログラムを編集できます。
では最初に、PRINT文を使って、画面に文字を表示させてみましょう。
PRINT "Hello BASIC"
の様に入力すると、画面に Hello BASIC と表示されます。画面の左端にカーソルがある状態で、
PRINT 2+3
の様に入力すると(最後にEnterキーを入力して改行します。機種によってはRETURNキー、CRキーとも言います。以下、同じなので省略します)、5 と計算の結果が表示されます。
行番号
古いBASICでは、プログラムは「行番号+命令」の形でかかれます。行番号をつけないで入力すると、前述のように「命令を即実行して、終了」します。先頭に行番号をつけることで初めて、命令を組み合わせた「プログラム」として実行できるようになります。0未満の数や小数、分数は行番号にできません。
簡単なプログラムの例
5 cls 10 PRINT "3+5="; 20 PRINT 3+5 30 END
各行の最初についている数字が行番号です。10からはじめて10ずつ増やしていくのが一般的です。こうすれば、後から簡単に行を挿入することができます(ただし9行まで)。PRINT は前節で説明した通り画面に文字を出力する命令です。最後の END はプログラムの終了を表す命令で、省略可能なBASICも多いですが、そうでなければ必ず入れるようにします。
入力したら
RUN
と(行番号なしで)入力すると実行します。 このプログラムを実行させると、画面に「3+5= 8」と表示されます。
10行の最後についている ; は、「改行しない」ことをコンピューターに通知します。これを取り除くと、実行したときに「3+5=」と「8」が別の行に表示されてしまいます。これを利用して、一行分空白にすることができます。
なお古いBASICでは「:」を用いると次のようにも書けますが、現在では推奨されません。
5 cls 10 PRINT "3+5=";:PRINT 3+5 20 END
現在、一部の(再現)BASICでは、
5 cls 10 PRINT "3+5=";3+5 20 END
のように記述することができます。
なお、ENDはプログラムの終了を表す命令でしたので、たとえば、
5 END 10 PRINT "3+5=";3+5 20 END
のようなプログラムだと、「3+5=」を表示する前に、いきなり終了します。
プログラムの編集
エディタのない古いBASICでは、
LIST
と入力すると、プログラム(プログラムリスト)を先頭の行からから表示します。
LIST 10
と入力すると10行目だけを、
LIST 20-
と入力すると20行目以降すべてを、
LIST -20
と入力すると先頭の行から20行目までを、
LIST 20-30
と入力すると20行目から30行目を表示します。
また、
AUTO
と入力すると、改行するたびに行番号を10ずつ増やして自動的に表示します。自動表示を停止させるのはBREAKキーをおします。(機種によってはSTOPキーや、CTRL+STOPキーを同時押しなど、操作が多少異なります。)
新しいBASICでのプログラムの入力
新しいBASICでは、プログラムを編集するためのエディタを持っており、これを入力に使います。エディタの概要や使い方自体は省略します。また、次のように「行番号を省略」できます。
PRINT "3+5="; PRINT 3+5 END
プログラムの実行は、RUNではなく、エディタのメニューから「実行」を選択します。
古いBASICのように「命令を実行して、即終了」するには、中には「直接入力」(例: イミディエイト ウィンドウ )が簡単にできる新しいBASICもありますが、ほとんどの新しいBASICではエディタのメニューから対応した項目を選ぶ必要があります。
ここでは行番号付きの古いBASICの書式で説明します。
以下は基本的に古い形式で説明します
- ここで 古い形式を N-BASIC, MSX-BASIC とします。それ以降のBASICで働くように考慮します。
- 説明はストレート一本道で わかりやすくします。具体例を多く入れる。
- 出来るだけ専門用語を使わない。使うときは説明を入れる。
最初に
- BASICのプログラムは行単位で実行されます。
- 行の上から下に向かって実行されます。(分岐などもあり)
- STOP命令, END命令で実行が終了します。
- 空白に意味があります、注意しましょう。
注釈(コメント) REM
注釈をつけるにはREMを使います。注釈とは「何も実行しない」という命令で、プログラムの説明を書いたり、デバッグなどで一時的に命令を実行させないようにするとき、などに使います。
10 REM PRINT "1" 20 PRINT "2" 30 END
このプログラムを実行すると、10行目は何も実行せず、20行目が実行されて、画面に「2」とだけ表示します。 30行はEND命令です、この命令で実行を終了します。
コラム
マイクロソフト系のBASICでは、アポストロフィーを代わりに使えます。
表示 PRINT
画面に表示させるには PRINT文を使います。
10 PRINT "これが表示されます。" 20 PRINT 123 30 END
PRINTの後に続くものを画面に表示します。文字列、数値、変数など
コラム
PRINTに続く定数、変数を画面に表示します。どのような型であっても表示されます。数値、文字など。 また、;セミコロンを変数末尾に置く事によって文末の改行が行われません。つまり二つのPRINT文をひとつとして 連続に表示する事が出来ます。 一般的な注意として、PRINT文は高度な内部処理を行う為に処理が遅くなります。
変数
変数は、数値や文字などのデータを入れておく箱のようなものです。
変数の名前には、以下のような規則があります。
- アルファベットから始まる。
- 1ABC などは不可
- アルファベットと数字で構成される。(記号と空白は不可)
- A:B PI3.14 などは不可
- BASIC内で使用されている命令名と重複しない。
- PRINT などは不可
- 変数名の大文字と小文字は区別されない。
- ABCとaBcは同じ変数と解釈される。
また、古いBASICや簡易なBASICでは、機種によって変数名の長さに「2文字以下」「8文字以下」という制限があります。
入力 INPUT
キーボードから入力するには、INPUT文を使います。
5 REM これは 数値をキー入力して、変数Aに代入、そして変数Aを表示する。 10 INPUT A 20 PRINT A 30 END
10 INPUT A では、数値変数Aに キーボードから入力した数値を代入します。
このような書き方も出来ます。
10 INPUT "数値を入力して下さい ",A 20 PRINT A 30 END
入力を促す文字列を表示してから、入力に入ります。
代入と計算
変数は、数値や文字などのデータを入れておく箱のようなものです。
10 A=12 20 B=3 30 PRINT A+B 40 PRINT A-B 50 PRINT A*B 60 PRINT A/B 70 END
このプログラムは、変数 A に 12、変数 B に 3 を代入し、足し算・引き算・掛け算・割り算の結果を表示する物です(順に、15 9 36 4 と表示されます)。
変数への代入は = を使用します。上のプログラムでは直接数字を代入しましたが、計算式(変数を使用するものも含む)を代入することができます。A=A+1 の様に、自分自身を用いた式を代入することもできます。 INPUT命令を使って数値または文字列(変数名$)を入力させる場合、
- 例
INPUT "ここに文字を表示させることも可能";変数名 PRINT "入力した数値(文字列)は";変数名;"です"
とします。
なお、変数への代入は「LET」命令で、
A=12
は
LET A=12
なのですが、JIS規格BASICを除いて、ほとんどの新旧のBASICを問わず、LETは省略可能です。
計算の記号は、足し算には+、引き算には-、掛け算には*、割り算には,/ の記号が割り当てられています。余りは「MOD」(モジェロ)です。
括弧()を使う事が出来ます。計算の順序に迷ったら括弧を使うようにしましょう。
100 A=(10+2)/4
将来的に、LET文のある他のプログラミング言語の学習のことを考えて、LET文をつかって上記のプログラムを書いてみましょう。
10 LET A=12 20 LET B=3 30 PRINT A+B 40 PRINT A-B 50 PRINT A*B 60 PRINT A/B 70 END
変数の初期化
命令 NEW で、変数を初期化します。
たとえば、上のプログラムを実行したあとに、
PRINT A
を実行すると、
12
と表示される場合があります。
この理由は、メモリ内に、以前に使用した変数が、そのまま残っているからです。
つまり、プログラムを終了しても、それだけでは変数の内容は消去されません。
まったく別のプログラムでも、同じ変数名「A」や「B」を、まったく別の内容で使うこともありますので、必要に応じて NEW 命令を使いましょう。
10 NEW 20 LET A=7 30 PRINT A+9 40 END
と書いて実行すれば、このプログラムの実行前にどんなプログラムで変数「A」を用いていようが、それを初期化できます。
条件分岐 IF THEN ELSE
「もし、明日 晴れだったなら、遠足。そうでなく、雨だったらなら、教室で自習。」のような場合わけを条件分岐(じょうけん ぶんき)といいます。
プログラム中である条件に当てはまるかで実行する内容を変えるときには IF~THEN~ELSE文 を使用します。
10 A=0 20 B=3 30 '''IF''' A > B '''THEN''' PRINT "A is bigger than B" '''ELSE''' PRINT "B is bigger than A"
ここで使っているA > Bの > は比較演算子といい、数値の比較に使います。
演算子 | 意味 | 数学の記号 |
---|---|---|
A = B | AとBは等しい | A=B |
A > B | AはBより大きい | A>B |
A < B | AはBより小さい | A<B |
A >= B | AはB以上 | A≧B |
A <= B | AはB以下 | A≦B |
A <> B | AとBは等しくない | A≠B |
IF文は、IFとTHENの間に条件式を書き、THENから条件式が成立するときの命令を書きます。そして成立しなかったときのことはその後ろにELSEに続けて書きます。
例の30行目は、もし A > Bが成立すればPRINT "A is bigger than B"を実行し、もし成立しなければPRINT "B is bigger than A"を実行するという意味であります。文字列の場合は、
IF 変数名$="" THEN 真の場合の行番号または命令 ELSE 偽の場合の行番号または命令
PRINT命令の場合、PRINTを省略(THEN "内容"のように)できます。
なお、ELSEは省略できます。
複数行にわたってしか書けないものを実行させたい場合、GOTO命令(後述)を使い行を飛ばす必要があります(この場合、GOTOと書くのを省略して、行番号だけでも書けます)。
分岐 GOTO
無条件でジャンプします。
条件分岐ではない、強制の分岐にはGOTO命令を使います。GOTOの後に行番号を入れると、対応する行の命令を実行します。
10 GOTO 30 20 PRINT "1" 30 PRINT "2" 40 END
このプログラムを実行すると20行目がスキップされ、30行目が実行されて、画面に「2」とだけ表示します。
10 GOTO 40 20 PRINT "1" 30 GOTO 60 40 PRINT "2" 50 GOTO 20 60 END
このプログラムを実行すると、画面に「2」「1」と表示します。が、このようにGOTOの飛び先が入り組んだプログラムは「スパゲティ・プログラム」と呼ばれて、「他の人が見てもプログラムの構造を一目では把握しづらい」ために、禁じ手とされています。
10 PRINT "1" 20 PRINT "2" 30 GOTO 10 40 END
このプログラムを実行すると、画面に「1」「2」を表示し続けます。このように「終了せずに、実行し続ける」プログラムを「無限ループ」と呼びます。表示を止めるには、古いBASICではAUTO命令を止めるときと同様に「BREAK」などのキーを押してください。新しいBASICではメニューから「停止」を選択します。(Visual Basicなどでは無限ループを書くとそのまま問答無用で応答不能になってしまうものもありますので、アプリケーションを強制終了させるか、CTRL+ALT+DELするなどしてOSから強制終了させてください。)
新しいBASICでもGOTO命令は使用できますが、推奨はされません。
繰り返し FOR NEXT
プログラム中で同じ処理を繰り返す場合には、FOR~NEXT 文を使用します。
10 J=0 20 FOR N=1 TO 5 30 J=J+N 40 PRINT "N=";N;" J=";J 50 NEXT N 60 END
この例は、FORからNEXTの間を繰り返します。回数は、1から5までの5回。もしSTEPを指定してあれば、増量値の設定ができます。
これを実行すると以下の様に表示されます。
FORの直後の変数(上記の場合はN)と、NEXTの直後の変数は、同じ変数でなければなりません。
N= 1 J= 1 N= 2 J= 3 N= 3 J= 6 N= 4 J= 10 N= 5 J= 15
FOR 文の構文は以下の様になります。
FOR 変数=初期値 TO 最終値 STEP 変更量
上の文のうち、「STEP 変更量」は省略できます。省略されたときには変数は1づつ変化します。
変数が初期値から最終値まで変化し、その各値ごとに NEXT までの文が実行されます。
DATA文
INPUT文で毎回データ入力するのは大変です。
プログラムの中に記録することが出来ます。 DATA文、READ文、RESTORE文 です。
20 READ A 30 PRINT A 40 DATA 1,2,3
20行でDATA文から1個読み込んで変数Aに代入します。30行で表示します、この例では「1」が表示されます。もし次に読み込んだなら「2」が読み込まれます。
10 RESTORE 50 20 READ A 30 PRINT A 40 DATA 1,2,3 50 DATA 4,5,6
10行のRESTOREでDATA文の読み込み先を指定します、ここでは50行から読み込みます。20行で読んで、30行で表示。この例では「4」が表示されます。普通は FOR NEXT文などを使って 連続して読み込みます。
DATA文の考え方は、ファイル操作のシーケンシャルファイルと似ています。
サブルーチン GOSUB
同じ内容のプログラムは、まとめてサブルーチンにする事ができます、GOSUBです。
110 INPUT A 120 GOSUB 200 130 PRINT A 150 END 200 REM サブルーチン 210 A=A*2 220 RETURN
プログラムの動きを行番号で書きます。 110 120 200 210 220 130 150 。順番に注目。 RETURNを使うとGOSUBの次に戻ります
関数 ()
関数はサブルーチンに似ています。組み込まれたサブルーチンのように思ってください。
10 INPUT A 20 B=ABS(A) 30 PRINT B 50 END
ABS()は絶対値を返す関数です。
他にも色々な関数があります。
- ABS(x)
- ATN(x)
- SGN(x)
- SIN(x)
- COS(x)
- EXP(x)
- INT(x)
- LOG(x)
- SQR(x)
- RND(1)
文字列操作 $
ここまでの説明で、数値のみを扱いました。ここでは、文字の入力、表示、操作を説明します。
文字定数と文字変数
文字を表す時は""で囲みます。
"これは文字です"
文字を表す文字列変数では、変数名の末尾に$を付けます。
A$="文字列"
文字列の結合
文の足し算が出来ます。
10 A$="今日は" 20 B$="晴れ。" 30 C$=A$+B$ 40 PRINT C$ 50 END
文字の入力と表示
10 INPUT A$ 20 PRINT A$ 30 END
文字列の関数と変換
BASICでは文字列の便利な関数があります。
ASC(x$) RIGHT$(x$,y) LEFT$(x$,y) MID$(x$,y,z) LEN(x$) STR$(x) VAL(x$) CHR$(x) TAB(x)
浮動小数点 #
ここまでは数値の整数で行いました。
割り算で割り切れないときに扱う小数点の処理、浮動小数点の定数、変数について説明します。誤差についても
BASICでは小数点を付けると、小数点付きの実数として扱われます。
100 PI=3.14
100 A=3.14 200 PRINT A 400 END
- 誤差
コンピューターの計算では誤差が発生します。 誤差の程度は機種によって異なります。
10 A=10.0/7.0 20 B=A*7.0 30 PRINT A 40 PRINT B 50 END
配列 DIM
住所録のようなものを作るときに使います。 同じような変数をたくさん作るときに、変数が多くて大変です。 そこで配列変数を使います。
使い方は、最初に配列変数を宣言します。例えば DIM a(3)と書いたなら、変数a(1) a(2) a(3)の3個の配列変数が使えるようになります(BASICの種類によってはa(0)も使えるものがあります)。 括弧の部分を添え字と言います。
配列変数の便利な所は、数値で書いた部分に数値変数を使って、例えば、a(i)のように使う事ができ、ループなどと組合わせれば多数の変数を一度に扱う事が出来ます。
10 DIM A(10) 20 FOR I=1 to 10 30 A(I)=I*2 40 NEXT I 50 FOR J=1 TO 10 60 PRINT A(I) 70 NEXT J 90 END
これは、一次元配列の例です。
10 DIM NAMAE$(3) 20 DIM NO(3) 30 FOR I=1 TO 3 40 INPUT "NAMAE";NAMAE$(I) 50 INPUT "BANGO";NO(I) 60 NEXT I 70 FOR I=1 TO 3 80 PRINT NAMAE$(I),NO(I) 90 NEXT I 100 END
これは、3人の名前と番号を入力して、表示するプログラムコードです。 配列を使う事により、簡潔に書く事が出来ます。 容易に人数を多くする事が出来ます。 改良して住所録の様に作り変える事も容易です。
配列には、このような一次元配列の他に二次元、3次元配列もあります。
あとがき
ここでは、始めての人が雰囲気をつかめるように基本の中の初歩を最低限に書きました。 そして、初級と応用は別の本につづきます。
補足
複数行のIF文
現在では構造化BASICもあります。 これは条件文が成立すればTHENからENDIFあるいはELSEまでの部分を実行して、成立しなければELSEからENDIFまでを実行するもので、例のプログラムは
10 A=0 20 B=3 30 IF A > B THEN 40 PRINT "A is bigger than B" 50 ELSE 60 PRINT "B is bigger than A" 70 ENDIF 80 END
と書けて、非常に見やすくなります。ただし、必ずしも使えるものではありません。古いBASICでは1行で書く方法しか使えません。
マルチステートメント
(:)で区切って、一行に多くのコマンドを書く事が出来る。 ただし、これは古いBASICの文法なのであまり使わない方が良い。
グラフィック関連
直線
- ※ BASICの書籍が入手できないので、記憶とネット上の情報に頼って記述しております。
N88BASIC互換のBASICならば、画像をつくるときは、
LINE (100,130)-(200,230),1
のように記述することで、画像で直線を引けます。
内容は、
LINE(始点のx座標、始点のy座標)-(終点のx座標、終点のy座標)、色番号
です。 気をつけることとして、画面の左上が座標(0,0)です。右下に行くにつれて、座標の値が大きくなります。
色番号は、一般に、
- 0 黒
- 1 青
- 2 赤
- 3 紫
- 4 緑
- 5 水色
- 6 黄色
- 7 白
です。色番号のことを「パレット番号」ともいいます。
背景色が標準設定では黒でしょうから、色番号が0(黒)だと、線が見えないかもしれません。
LINE (100,130)-(200,230),1
は、青色の直線を引きます。
LINE (100,130)-(200,230),2
は、赤色の直線を引きます。
LINE (100,130)-(200,230),2,B
とすると、長方形の枠線のみを描きます。その長方形の対角線の座標が、(100,130)から(200,230)というわけです。 BはBOXの意味です。
この命令 LINE (100,130)-(200,230),2,B では、対角線は、描かれません。また、塗りつぶしも、されません。
塗りつぶしをするには、「B」ではなく「BF」にします。
LINE (100,130)-(200,230),2,BF
FはFILLの意味です。
円
書式は
CIRCLE (中心のx座標,中心のy座標),半径,色
です。
たとえば、
CIRCLE (250,300),50,2
で、(250,300)座標を中心とする半径50の赤い(色番号: 2)円を書きます。
塗りつぶすには、
点のプロット
命令「PSET」を使うと、指定した位置に、点をひとつ追加します。
書式は
PSET(x座標,y座標),色番号
です。
PSETの活用方法は通常、次のように、FOR文などの繰り返し文とくみあわせて、計算式などの結果の作図をするのに使用するでしょう。
10 FOR N=0 TO 50 20 PSET(200+N,100+0.01*N*N),1 30 NEXT N 40 END
音
BEEP
と入力すると、「プツッ」とか「ピー」とかの音を鳴らします。ビープ音といいます。
乱数
「RND()」で、0から1までの小数を含む乱数を発生させます。
RND(1)のように、括弧の中に数字を入れて使用します。
10 X = RND (1) 20 PRINT X
のように使用します。
(うろ覚え: ) サイコロをつくるには(1から6の整数だけを出すプログラムをつくるには)、乱数命令に、四捨五入の命令や、切り上げ、切り下げの命令などと組み合わせます。
たとえば、