メインメニューを開く

Wikibooks β

情報技術 > プログラミング > BASIC


プログラミング言語BASIC(ベーシック)の使用法

目次

はじめに編集

BASICの分類編集

BASICには大きくわけて、

の3種類があります。ここでは最初の2種類のBASICを対象にしますが、ほとんどの構文については3つ目の種類のBASICにも「新しいBASIC」と同じことが通用します。違いについてはその都度、注記します。

本wikibooksの本ページ『BASIC』では、おもに、古いBASICやJIS規格BASICを基準に、文法を説明しております。

その理由は、古いBAISCは文法が単純であり、入門しやすく、また、古くからあるため、C言語などの他のプログラミング言語の多くにも影響を与えており、よって古いBAISCが他のプログラム言語にも応用しやすいからです。

GUI対応のBASICについて編集

いっぽう、Visual BasicなどのGUI対応したBASICは、文法と操作性が、古いBASICとは、かなり異なります。GUI対応BASICは、マウス入力に対応したGUIプログラミングに対応するために、新しい機能を大量に追加してあるため、そのため、キーボード入力を中心にあつかう古いBAISCとは、大幅に違っています。

GUI対応したBasicには、歴史的な経緯から、『BASIC』から派生した名前がついていますが、実態は、ほとんど別のプログラミング言語だと思ったほうが良いでしょう。

なお、2017年の現在、(GUIに特化している)Visual Basicを出しているマイクロソフト社が、入門者用に機能を簡易化した small basic というのを出しているので、GUIプログラミングの初心者は Visual Basic ではなく small basic (スモール ベーシック)で入門したほうが、学びやすいでしょう。

いまや Visual Basic は、入門用のプログラムを動作させるまでに、かなり覚えることが多くなってしまい、そのため、マイクロソフト社が、もはやVisual Basicは入門用には適さないと判断して、近年になって small basic を出すという事になった次第です。

古いBASICの入手方法編集

フリーソフトなどとして、BASICの実行環境が、無料配布されています。ネット上のフリーソフト配布サイト(「vector」などのサイトがある)などで公開されていますので、そこからダウンロードするなどの方法があります。

なお、ソフトによっては、「制作したソフトは必ず公開すること」などのライセンス条件をつけている場合があります(『十進BASIC』など)。研究用にBASICで計算プログラムを作る場合や、または商用アプリなどを作る際は、普通は非公開にする必要があるので、けっして公開義務のある種類のBASICでは制作しないように、気をつけてください。

なお、かつて、N-BASICやF-BASICを出していた会社は、現在はBASICを開発してないし、販売もしていません。

なぜなら、90年代〜2005年ごろ、それらのBAISCの開発企業が、そういう自社開発したBASICを生産していたにもかかわず、消費者に売れなかったからです。

代わりに、他の企業などがフリーソフトなどで、それら古いBASICの実行環境を再現したアプリケーションが制作しており、ネット上のフリーソフト配布サイト(「vector」などのサイトがある)などで公開されている、・・・といった事です。


古いBASICでのプログラムの入力編集

まず、使用するBASIC(ベーシック)を選び、起動して下さい。

BASICで画面に文字を表示するためには PRINT 文を使います。ただし、新しいBASICでは、まったく別のコマンド文になります()。


BASICが起動すると、「Ok」「Ready」など(BASICや機種によって異なる)の文字の下に「■」(カーソル)が出ます。カーソルはカーソルキーの上下左右で移動できます。このカーソルが出ているときに、BASICのプログラムを編集できます。

では最初に、PRINT文を使って、画面に文字を表示させてみましょう。

PRINT "Hello  BASIC"

と入力してみてください。入力時の文字モードは、直接入力モードで入力してください。windowsの場合、右下に、文字入力モードの切り替えのタブがあるので、そこをクリックして、直接入力モードを選んでから、上記のPRINT文を入力してください。


このように上記のPRINT文を入力し、RUN(「ラン」という。「起動せよ」の意味)を実行すると(実行方法は機種によって異なる。それぞれの機種を参考のこと)、画面に Hello BASIC と表示されます。

同様に、新しい行で、画面の左端にカーソルがある状態で、

PRINT 2+3

のように入力してみて(最後にEnterキーを入力して改行します。機種によってはRETURNキー、CRキーとも言います。以下、同じなので省略します)、RUNを実行すると(実行方法は機種によって異なる。それぞれの機種を参考のこと)、5 と計算の結果が表示されます。


このように、PRINT命令は、その直後にあるものを画面に表示します。

また、BASICでは、命令を実行することをRUN(ラン)と言います。英語の「走る」 RUN と同じ単語です。ランニング(走り)やランナー(走者)のランと同じです。

いっぽう、

PRINT "2+3"

をRUNで実行すると、画面に"2+3"とそのまま表示されます。

つまり、二重引用符 " " は、「引用符内の文字列を、画面にそのまま表示しろ」という意味の記号です。


他のプログラミング言語でも、「print」という語をテキスト表示命令に用いるプログラミング言語は多いです。また、他のプログラミング言語でも、文字列を表示する場合は、二重引用符 " " で くくるのが、普通になっています。

もし、二重引用符でくくらないと、

PRINT Hello  BASIC

は「エラーのある文なので実行不可能」的な報告を コンピューターから報告されたり、あるいは、まったく予期せぬ数値や文字が表示されるなどのエラーを起こします。


行番号編集

古い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=」を表示する前に、いきなり終了します。


行番号が順番どおりでない場合編集

20 PRINT("aaa20")
10 PRINT ("bbb10")

のように、行番号が順番どおりではない場合、どの行を優先して実行するのでしょうか?


現代のGUI対応のBASICでは、行番号のないものが多いのですが、その理由のひとつも、おそらく、このような、行番号と順序のちがう場合の混乱を防ぐためなど、それなりの理由があるのでしょう。


さて、たいていの古いBASICの場合、行番号の小さい順から先に実行すると思います。(いくつかの再現BASICソフトで確認。) この場合、特にエラーメッセージなどは、出されません。

おそらく、古いベーシックでは、ソフトウェアの内部では、プログラムの実行のさいしょに(つまりRUN命令の直後に)、まず行番号にもとづいて並び替えを行って、

10 PRINT ("bbb10")
20 PRINT("aaa20")

のように並び替えてから、それからやっと、上から順に実行をしているのでしょう。

つまり、これらの古いBASICは、プログラムを最初に実行する際、まず並び替えを行っているのです。

もし、行数が10行ていどの少ないプログラムなら、それでもかまいませんし、気の聞いた便利な機能でしょう。

しかし、もし百行や千行もあるプログラムを並び替えるとなると、並び替えには時間が掛かるので、プログラムの実行が終わるまでの時間が長引いてしまいます。


裏を返したことを言うならば、行番号のないBASICの場合、そのぶん高速化をしている可能性があります(並び替えの時間が省けるので)。

さらに、裏の裏を返せば、行番号のあるBASICの使い道は、処理に時間が掛かってもいいので、処理の順序を確実にまちがいなく、自分以外の他のプログラマーにも伝えたいようなプログラムを書くときには、もしかしたら行番号のあるBASICが便利かもしれません。


プログラムの編集編集

エディタのない古いBASICでは、

LIST

と入力すると、プログラム(プログラムリスト)を先頭の行からから表示します。

LIST 10

と入力すると10行目だけを、

LIST 20-

と入力すると20行目以降すべてを、

LIST -20

と入力すると先頭の行から20行目までを、

LIST 20-30

と入力すると20行目から30行目を表示します。

また、

AUTO

と入力すると、改行するたびに行番号を10ずつ増やして自動的に表示します。自動表示を停止させるのはBREAKキーをおします。(機種によってはSTOPキーや、CTRL+STOPキーを同時押しなど、操作が多少異なります。)

  • なぜ、こうなってるのか?

今でこそ、プログラムの実行結果の画面と、プログラム記述用のエディタ画面とは、別々の画面に分かれているのが普通です。

しかし、昔のパソコンでは、表示ウインドウが標準では1つしかありませんでした。 というか、そもそも「ウィンドウ」という概念すらなく、昔の古いプログラム言語では、実行結果の表示画面と、エディタ画面とが、同じひとつの画面だったりします。しかもコマンド入力機能がプログラム記述機能も兼ねていたり、あるいはパソコン本体にあるレバースイッチ(小型のレバースイッチがついていたりする)により、コマンド入力モード(「ターミナルモード」という)とプログラミングモードとを切り替えたりしていました。

現代でも、windowsのコマンドプロンプトのような、OS付属のコマンド入力用アプリケーションでは、普通、ウィンドウは1つだけであり、その、たったひとつのウィンドウが、実行結果の表示画面と、コマンド入力画面とを、兼ねています。


新しい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 と表示されます)。

変数への代入は = を使用します。上のプログラムでは直接数字を代入しましたが、計算式(変数を使用するものも含む)を代入することができます。

BASICにおける代入とは、「記号=の右側にある計算式の結果を、記号=の左側の変数に代入しろ」という意味です。

そのため、

12 = A

という命令はエラーになります。 かならず、代入先の変数は、記号=の左側にある必要があります。

また、右側にある計算式を、記号=の左にある変数に代入するので、

A=A+1

のように、自分自身を用いた式を代入することもできます。もし、「A+1=A」という順序だと、エラーになります。


10 A=12
20 A=A+1
30 PRINT A
40 END

を実行すると、計算結果(12+1)の「13」が表示されるでしょう。


なお、変数への代入は「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

入力命令編集

利用者からキーボードで数値を入力してもらうには、INPUT 文を使います。 INPUT命令を使って数値または文字列(変数名$)を入力させる場合、

INPUT "ここに文字を表示させることも可能";変数名
PRINT "入力した数値(文字列)は";変数名;"です"

とします。

(プログラム例)

10 INPUT "数値を入力してください" ;A
20 PRINT "入力された数値は"
30 PRINT A
40 PRINT "です。"
50 END

または

5 PRINT "数値を入力してください"
10 INPUT A
20 PRINT "入力された数値は"
30 PRINT A
40 PRINT "です。"
50 END


変数の初期化編集

たとえば、上のプログラムを実行したあとに、

PRINT A

を実行すると、さきほど入力した変数が出るかもしれません。

この理由は、メモリ内に、以前に使用した変数が、そのまま残っているからです。

つまり、プログラムを終了しても、それだけでは変数の内容は消去されません。

命令 NEW を使うと、BASICで扱っている変数にすべてゼロ 0 を代入し、初期化(しょきか)します。

もし、上の節のプログラムの実行直後に、まったく別のプログラムを実行する必要があったとして、そこでも同じ変数名の変数が使われていたとしたら、その変数は初期化をしていないと、エラーの原因になってしまいます。

まったく別のプログラムでも、同じ変数名「A」や「B」を、まったく別の内容で使うこともありますので、必要に応じて NEW 命令を使いましょう。

10 NEW
20 LET A=7
30 PRINT A+9
40 END

と書いて実行すれば、このプログラムの実行前にどんなプログラムで変数「A」を用いていようが、それを初期化できます。

なお、上記のプログラムの実行結果として、計算結果として「16」が表示されます。

このプログラムの場合なら、わざわざNEWで変数Aを初期化しなくても、その次の行で A=7と記述しているので、じつは初期化の必要はありません。

ですが、作ろうとするプログラムが複雑になってくると、あつかう変数の個数が多くなり、変数ひとつずつ初期化をするのが大変になる場合もありますし、個数が多いと一つづつ初期化する方法だと、初期化しわすれる変数も出て来るかもしれません。

なので、ねんのため、 NEW 命令で、いっきに、すべての変数を初期化してしまいましょう。初期化される対象は、そのBASICで扱っている「変数」だけですので、安心しても平気です。


なお、下記のように、もし計算途中に、NEWを入れると、

(あまり、よくないプログラム)

20 LET A=7
25 NEW
30 PRINT A+9
40 END

このプログラムなら、PRINT命令で「9」が表示されたりします。なぜならAが初期化されてしまい、Aに0が代入されているからです。

なお、現在のプログラム言語では、NEW命令は別の意味で使われています。


なお、計算作業のときに、初期の瞬間の状態に対応する数値のことを、科学技術用語で「初期値」(しょきち、initial value イニシャル バリュー)といいます。ファミコンソフトなどのゲーム業界などでも、ゲーム開始状態の主人公のライフ(生命力)値とかの数値をまとめて「初期パラメーター」などといいますね。それと同じことです。

理科などでは、たとえばボールを投げた瞬間のボールの速度のこと「初期速度」と言います。

もし、現代のプログラム言語のなかの命令文の語句で、「init」などの語句があったら、それはもしかしたら、初期値(※ 英語で initial value )のことかもしれません。


条件分岐 IF THEN ELSE編集

「もし、明日 晴れだったなら、遠足。そうでなく、雨だったらなら、教室で自習。」のような場合わけを条件分岐(じょうけん ぶんき)といいます。


プログラム中である条件に当てはまるかで実行する内容を変えるときには IFTHENELSE文 を使用します。

条件分岐では IF という語句を、ほぼ、かならず使うので、条件分岐命令のことを「IF文」とも言います。「IF」とは、「イフ」と読み、意味は「もし 〜〜 ならば、」という意味の、英語の接続詞です。(日本では、中学校の英語の授業で 接続詞 IF を習うだろう。)

ほかのプログラム言語でも、条件分岐命令のことを普通は「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文 の考え方と 比較演算子 の考えかたは、ほぼかならず使います。なので、いまここのBASICの学習で、比較演算子の考え方を、しっかりと理解しましょう。

IF文は、IFとTHENの間に条件式を書き、THENから条件式が成立するときの命令を書きます。そして成立しなかったときのことはその後ろにELSEに続けて書きます。なお、THENは「ゼン」と読み、ELSEは「エルス」と読みます。

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」は「ゴー トゥー」と読みます。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命令は使用できますが、推奨はされません。

どうしてもGOTO文を使う必要のある場合には、REM文などによるコメント機能も活用しましょう。GOTO文の前の行で、REM文による説明で、GOTO文の行き先を説明したり、あるいは処理しようとしている内容などを記述すると、他の人がプログラム内容を把握しやすくなるでしょう。


繰り返し FOR NEXT編集

プログラム中で同じ処理を繰り返す場合には、FORNEXT 文を使用します。

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)も使えるものがあります)。 「DIM」とは次元 DIMENSION の略のことです。DIMの部分が、配列宣言の命令です。DIM a(3)の「a」の部分は変数名ですので、べつにbでもcでも、かまいません。

DIM a(3)のカッコとカッコ内の部分を「添え字」(そえじ)と言います。

配列変数の便利な所は、数値で書いた部分に数値変数を使って、例えば、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対応のパソコンを作っている会社ごとに違っていた。

ハードウェア側の性能にも関係する事であり、そのため、仕様統一しきれない。

いちおう、BASICの国際規格も存在しているが、実際には、この規格に従ってないBASICも多い。おそらく、特に、画像表示や音声などのマルチメディア関係の機能では、そのような規格外の仕様が多いだろう。

本wikibooks日本語版『BASIC』では、日本の読者を対象にしていることもあり、日本で普及した日本産パソコンのハードウェアを想定して、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,180),50,2

で、(250,180)座標を中心とする半径50の赤い(色番号: 2)円を書きます。

円弧を描くには、

CIRCLE (中心のx座標,中心のy座標),半径,色,開始角,終了角

の構文を利用します。

角度の測り方は、数学のxy座標での角度の測り方と同じで、右を0度として、半時計まわり(左まわり)です。角度の単位は、ラジアン です。約3.14で半円になります。(BASICのソフトウェアの種類によっては、違うかもしれません。それぞれのソフトウェアごとに確認してください。)

まだラジアンを習っていない中学生のかたは、この節は飛ばしましょう。

5 CLS
10 CIRCLE (250,180),50,2,0,3.14

と書けば、半円弧が描かれます。

楕円(だえん)または楕円弧を書くには、

10 CIRCLE (250,180),50,2,0,3.14,2

のようにします。

CIRCLE命令は、

CIRCLE (中心のx座標,中心のy座標),半径,色,開始角,終了角,比率

という書式になっています。

比率は、縦と横の比率であり、1だと正円になります。1より大きいと縦長の楕円になり、1より小さいと横長の楕円になります。

塗りつぶすには、


点のプロット編集

命令「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の整数だけを出すプログラムをつくるには)、乱数命令に、四捨五入の命令や、切り上げ、切り下げの命令などと組み合わせます。

たとえば、

1970〜80年代のパソコン事情が背景にある編集

BASICは、形式的には、BASICはプログラム言語であるとして分類されています。

しかし、実際には、古いBASICを21世紀に再現したBASICでは、他のプログラム言語にはない、画像表示の機能が充実しています。

これは、どういう事かというと、再現BASICでは、画像表示の命令を実行する際には、OSの画像表示の機能を呼び出して、使っているのです。

一般的に、プログラムを通しての画像表示についての仕様は、各OSごとにバラバラです。

そのため、BASICのインタプリタ自体の作成者は、それぞれのOSごとに、BASICインタプリタを作りなおす必要があります。

このため、再現BASICには、Windows版しかインタプリタの作られてない再現BASICもあります。


そもそも、実際の古いBASICの流行した1970年代ごろは、21世紀の今とはパソコン販売の状況が違っています。1970年代ごろの当時は、まだOS(オペレーティング システム)が高度化する前だった事もあり、さらに、OSとパソコン本体がくっついて販売されてたこともあり、1970年代ごろは、BASICが販売されているパソコンと一緒に、OSと一緒にパソコン本体に組み込まれている状態で、販売されていました。

このため、実際の1970〜80年代に市販されていたパソコンに組み込まれていたBASICでは、画面に円や直線などを表示したりする画像表示の命令や、ブザー音を鳴らすなど命令なども、簡単にプログラム記述できるようになっています。

本来、画像表示のための処理は、ディスプレイの種類ごとに、解像度がバラバラだったりするので、パソコン内部動作を分ける必要があるので、オペレーティングシステムの機能を使って、画像を表示したりすることになります。


しかし、当時のBASICでは、オペレーティングシステムの仕組みなんて、意識する必要はありませんでした。なぜなら、特定企業のパソコンに組み込まれた状態でBASICが配布されていてので、なので、その特定企業のディスプレイやスピーカーといったハードウェアを、簡単に制御できるように、BASICが改良してあったのです。

このような事情のため、そもそも当時のほとんどの消費者は、そもそもオペレーティング システムいう概念すら知りませんでした。

このように、BASICの機能の背景には、1970〜80年当時のパソコン事情があります。


1970年当時は、各パソコン会社のBASICが最初から特定の自社パソコンに対応した状態で、パソコンに組み込まれていて販売されていたので、BASICから直接オペレーティングシステムの機能を利用できるわけです。

このため、1970年ごろのBASICの機能は、現在の「プログラム言語」とは、やや違っています。


さて21世紀の現在、プログラムで画像を表示したり、あるいは音声を鳴らしたりなどのプログラムを記述したい場合には、オペレーティングシステムの機能を活用する必要があります。OSの機能を使うためのコマンド郡である「API」(エー ピー アイ)といいます。つまり、再現BASICのインタプリタ作成者は、(おそらく)APIを駆使して、再現BASICの画像表示や音声機能などを、作っているのです。


オペレーティングシステムには、ウィンドウズやマックOSやリナックスなど、色々とありますが、それぞれのOSごとに仕組みが違うので、プログラムの記述作業も、それぞれのOSごとに、プログラムを分ける必要があります。


上述のようなパソコン事情が、1970年頃と現代では大きく違うので、もはやBASICだけでは、高度なアプリケーションを作ろうとしても、あまり簡単には作れなくなってしまいました。

なので、もし、21世紀の現代の人が、独学でBASICを学ぶ場合は、けっして古いBASICだけで満足せずに、なるべく、C言語を学んだり、さらに、その後の時代の他のプログラム言語も、学びましょう。


参考リンク編集

このページ「BASIC」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にノートへどうぞ。