情報技術
>
プログラミング
> BASIC
プログラミング言語
BASIC
(ベ?シック)の使用法
はじめに
[
編集
]
BASICの分類
[
編集
]
BASICには大きく分けて、以下のように分類されます(ただ、BASICは?多の方言があるので、これは分類の一例)。
- ダ?トマスBASIC (DTBASIC)
- ダ?トマス大?で開?された最も初期のBASICの??を指します。この時期のBASICは?育用や?究用途が主であり、基本的な?値計算や制御構造を提供し、TinyFORTRANインタプリタとしての性格が?くTSS環境で?行されました。
- マイコンBASIC (MicrocomputerBASIC)
- マイクロコンピュ?タ?向けに提供されたBASICの??を指します。これらの??は、ハ?ドウェアに特化した機能や?張が含まれており、ホビストだけでなくビジネスでも?く利用されました。
- 代表的な??には、N88-BASICやF-BASIC、MSX-BASICなどがあります。
- JIS規格BASIC
- ANSI X3.60-1978「American National Standard for the Programming Language Minimal BASIC」を日本語に??した JIS C 6207-1982「電子計算機プログラム言語 基本BASIC」1982年に日本工業規格によって JIS C 6207-1982 として制定されたJIS規格BASIC。
- マイコンBASICを基にしており、いくつかの機能や文法が追加されました。センタ?試?(??)の出題に使われたので、日本の?校で使用されました。
- 1993年に JIS X 3003-1993『電子計算機プログラム言語 Full BASIC (The Programming Language Full BASIC)』に改訂され?止。
- Visual Basic
- Visual Basicは、1991年にマイクロソフトによって開?されたプログラミング言語です。マイコンBASICをベ?スに開?されており、GUI(グラフィカルユ?ザ?インタ?フェイス)を作成するための機能が追加されています。Visual Basicは、Windowsアプリケ?ションの開?に?く使われています。
日本語ウィキブックスの本ペ?ジ『BASIC』では、主にマイコンBASICやJIS規格BASICを基準に、文法を?明しています。
その理由は、マイコンBASICは文法が?純で入門しやすく、また、古くからあるため、他のプログラミング言語にも?用しやすいためです。
?史
[
編集
]
BASIC(Beginner's All-purpose Symbolic Instruction Code)は、ダ?トマス大?のジョン?ケメニ?とト?マス?カ?ツによって開?されたプログラミング言語で、初?者が容易に?習できるように設計されました。その誕生から始まり、マイクロコンピュ?タの台頭や商用バ?ジョンの登場を?て、??な進化を遂げてきました。本節では、BASIC言語の?展と?史的な?遷に焦点を?てます。
- 1964年
- ダ?トマス大?で、ジョン?ケメニ?(John Kemeny)とト?マス?カ?ツ(Thomas Kurtz)によって開?されたBASICの最初のバ?ジョンが使用された。これは、?生が容易にプログラミングを?ぶことを目的としていた。
- 1965年
- BASICの最初の商用バ?ジョン、Dartmouth BASICがリリ?スされた。
- 1970年
- ジョン?ケメニ?とト?マス?カ?ツによる改訂版のBASICがリリ?スされた。
- 1971年
- Altair BASICがリリ?スされ、マイクロソフトの創業者であるビル?ゲイツとポ?ル?アレンによって開?され;た。これは、初めてのマイクロソフトの製品となった。
- 1975年
- マイクロソフトがBASICコンパイラの最初のバ?ジョンをリリ?スし、これは後に「Microsoft BASIC」として知られるようになる。
- 1977年
- Apple IIがリリ?スされ、BASICが標準で搭載された最初のパ?ソナルコンピュ?タの1つとなった。
- 1979年
- ANSIによるBASICの標準化が試みられたが、失敗に終わった。
- 1982年
- MicrosoftがMSXコンピュ?タ用にMSX-BASICをリリ?ス。
- 1987年
- ANSIがBASICの標準化を承認し、ANSI X3.113-1987として公開された。
- 1991年
- Visual Basicがマイクロソフトによってリリ?スされ、イベント?動型のプログラミングを可能にするなど、大幅な機能向上がなされた。
- 2008年
- MicrosoftがSmall Basicと呼ばれるBASICの新しい?育向け言語をリリ?ス。
- 2010年
- MicrosoftがVisual Basic 2010 Express Editionをリリ?ス。これは、Visual Basicの新しいバ?ジョンで、初心者向けのプログラミングを簡素化するための機能が追加されている。
- 2017年
- MicrosoftがVisual Basicの??のサポ?トについての明確な計?を?表。??の.NET Coreや.NET 5.0以降のリリ?スでは、VB.NETに?する主要な新機能の提供は見送られることが示された。
このように、BASICはその?史の中で多くの?遷を??し、多くのバ?ジョンがリリ?スされてきました。その後も、さまざまな環境での利用や?育用途などで、いくつかの派生形が使用され?けています。
標準規格化の?史
[
編集
]
BASIC言語の標準規格化は、その普及とともに重要性を?してきました。標準化は、異なる??間の互換性を確保し、開?者やユ?ザ?に安定した環境を提供することを目的としています。本節では、BASIC言語の標準規格化に?する?史を探求します。
- 1978年
- アメリカ?立標準協?(ANSI)は、BASIC言語の標準化を目指して標準化作業を開始する。
- 1983年
-
- ANSI X3.60-1983 Information Systems - Programming Languages - Minimal BASIC
- アメリカ?立標準協?(ANSI)によって?行された初のBASIC言語の標準規格。
- これは、BASICの規格化に?する最初の試みであるが、業界全?での受け入れには至らなかった。
- 1987年
-
- ANSI X3.113-1987 Information Systems - Programming Languages - Full BASIC;
- ANSIによって?行された包括的なBASIC言語の標準規格。
- 多くのBASIC??で採用された。
- 1991年
-
- ISO/IEC 10279
- 1991 Information technology - Programming languages - Full BASIC
- ?際標準化機構(ISO)および?際電?標準?議(IEC)によって?行された、BASIC言語の?際標準規格。
- 1994年
-
- ISO/IEC 10279
- 1991/Amd 1:1994 Information technology ? Programming languages ? Full BASIC ? Amendment 1: Modules and single character input enhancement
- ISO/IEC 10279:1991 のエラ?コ?ドの修正や追加、仕?の明確化などの修正。
- 2000年代
- 標準化作業は一段落し、BASIC言語の主流としての地位は相?的に低下していく。
GUIに??したBASIC
[
編集
]
GUIに??したBASICとは、グラフィカルユ?ザ?インタ?フェ?ス(GUI)を直接サポ?トするBASIC言語のことです。これらの言語は、ウィンドウやボタン、テキストボックスなどのGUIコンポ?ネントを使って、直感的で使いやすいGUIアプリケ?ションを開?することができます。代表的なGUIに??したBASIC言語には、Visual Basic(VB)があります。
- VBのコ?ド例
Public
Class
Form1
Private
Sub
Button1_Click
(
sender
As
Object
,
e
As
EventArgs
)
Handles
Button1
.
Click
MessageBox
.
Show
(
"Hello, World!"
)
End
Sub
End
Class
一方、Small Basic(SB)はGUIに直接??していません。SBは、主にテキストベ?スのプログラミングとシンプルなグラフィカル要素の制御に焦点を?てた?育用のプログラミング言語です。SBは初心者向けに設計されており、シンプルな構文や直感的な操作性を提供しますが、高度なGUI開?には適していません。SBは、プログラミングの基礎を?ぶための手段として位置付けられています。
- SBのコ?ド例
TextWindow
.
WriteLine
(
"Hello, World!"
)
マイコンBASICの入手方法
[
編集
]
マイコンBASICを入手する方法は、いくつかのアプロ?チがあります。一部のオプションは、かつて主流だったN-BASICやF-BASICなどの特定のBASIC?行環境を取得するためのものですが、その他のオプションはマイコンBASICの?行環境を再現したり、代替手段を提供することに焦点を?てています。
- フリ?ソフトウェア配布サイト
- Vector(ベクタ?;
https://www.vector.co.jp/
)などのインタ?ネット上のフリ?ソフトウェア配布サイトでは、特定のBASIC?行環境ソフトウェアを無償または有償でダウンロ?ドできる場合があります。
- オ?プンソ?スプロジェクト
- FreeBASICやQB64などのオ?プンソ?スプロジェクトは、Microsoft Quick BASIC(MS-DOS時代)との互換性を提供し、マイコンBASICの?行環境を再現しています。これらのプロジェクトでは、BASICプログラミングを?けたり、新しいプロジェクトを始めたりすることができます。
- 他の企業や個人によるアプリケ?ション
- 他の企業や個人が開?したマイコンBASICの?行環境を再現したアプリケ?ションもあります。これらはフリ?ソフトウェア配布サイトなどで入手できる場合があります。
マイコンBASICの入手が困難になった背景には、以下のような理由が考えられます:
- ワ?プロソフトや表計算ソフト、はがき印刷ソフトなど、特定の用途に特化したアプリケ?ションソフトウェアが普及し、一般消費者がプログラミング言語を?ぶ必要がなくなったこと。
- ビジネスでプロブラムを作る人?が、より生産性の高い言語やツ?ルを使用するようになったこと。
- 主流となるコンピュ?タ環境が?化し、ROM BASICやDisk BASICからWindowsやMacintosh、OS/2などの新しいプラットフォ?ムに移行したこと。
これらの理由により、マイコンBASICの需要が低下し、一般的なプログラミングニ?ズや技術環境の?化に適?する必要性が生じました
[1]
。
マイコンBASICでのプログラムの入力
[
編集
]
まず、使用するBASIC(ベ?シック)を選び、起動して下さい。
BASICで?面に文字を表示するためには
PRINT
文を使います。ただし、新しいBASICでは、まったく別のコマンド文になります。
BASICが起動すると、「Ok」「Ready」など(BASICや機種によって異なります)の文字の下に「■」(カ?ソル)が出ます。カ?ソルはカ?ソルキ?の上下左右で移動できます。このカ?ソルが出ているときに、BASICのプログラムを編集できます。
では最初に、PRINT文を使って、?面に文字を表示させてみましょう。
と入力してみてください。入力時の文字モ?ドは、直接入力モ?ドで入力してください。Windowsの場合、右下に、文字入力モ?ドの切り替えのタブがあるので、そこをクリックして、直接入力モ?ドを選んでから、上記のPRINT文を入力してください。
このように上記のPRINT文を入力し、RUN(「ラン」という。「起動せよ」の意味)を?行すると(?行方法は機種によって異なりますので、それぞれの機種を?考にしてください)、?面に
Hello BASIC
と表示されます。
同?に、新しい行で、?面の左端にカ?ソルがある?態で、
のように入力してみて(最後にEnterキ?を入力して改行します。機種によってはRETURNキ?、CRキ?とも言います。以下、同じなので省略します)、RUNを?行すると(?行方法はそれぞれの機種を?考にしてください)、
5
と計算の結果が表示されます。
このように、PRINT命令は、その直後にあるものを?面に表示します。
また、BASICでは、命令を?行することをRUN(ラン)と言います。英語の「走る」 RUN と同じ?語です。ランニング(走り)やランナ?(走者)のランと同じです。
いっぽう、
をRUNで?行すると、?面に"2+3"とそのまま表示されます。
つまり、二重引用符 " " は、「引用符?の文字列を、?面にそのまま表示しろ」という意味の記?です。
他のプログラミング言語でも、「print」という語をテキスト表示命令に用いるプログラミング言語は多いです。また、他のプログラミング言語でも、文字列を表示する場合は、二重引用符 " " で くくるのが、普通になっています。
もし、二重引用符でくくらないと、
- エラ?が出る例
は「エラ?のある文なので?行不可能」的な報告を コンピュ?タ?から報告されたり、あるいは、まったく予期せぬ?値や文字が表示されるなどのエラ?を起こします(例えばundefined)。
行番?
[
編集
]
マイコンBASICでは、プログラムは「行番?+命令」の形でかかれます。行番?をつけないで入力すると、前述のように?命令を??行して、終了」します。先頭に行番?をつけることで初めて、命令を組み合わせた「プログラム」として?行できるようになります。0未?の?や小?、分?は行番?にできません。
- 簡?なプログラムの例
5
CLS
10
PRINT
"3+5="
;
20
PRINT
3
+
5
30
END
各行の最初についている?字が行番?です。10からはじめて10ずつ?やしていくのが一般的です。こうすれば、後から簡?に行を?入することができます(ただし9行まで)。PRINT は前節で?明した通り?面に文字を出力する命令です。最後の END はプログラムの終了を表す命令で、省略可能なBASICも多いですが、そうでなければ必ず入れるようにします。
入力したら
と(行番?なしで)入力すると?行します。
このプログラムを?行させると、?面に「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ソフトで確認)。この場合、特にエラ?メッセ?ジなどは、出されません。
おそらく、マイコンBASICでは、ソフトウェアの?部では、プログラムの?行のさいしょに(つまりRUN命令の直後に)、まず行番?にもとづいて?べ替えを行って、
10
PRINT
(
"bbb10"
)
20
PRINT
(
"aaa20"
)
のように?べ替えてから、それからやっと、上から順に?行をしているのでしょう。
つまり、これらのマイコンBASICは、プログラムを最初に?行する際、まず?べ替えを行っているのです。
もし、行?が10行ていどの少ないプログラムなら、それでもかまいませんし、?の利いた便利な機能でしょう。
しかし、もし百行や千行もあるプログラムを?べ替えるとなると、?べ替えには時間が掛かるので、プログラムの?行が終わるまでの時間が長引いてしまいます。
反?に言うと、行番?のないBASICの場合、そのぶん高速化をしている可能性があります(?べ替えの時間が省けるので)。
さらに言うと、行番?のあるBASICの使い道は、?理に時間が掛かってもいいので、?理の順序を確?にまちがいなく、自分以外の他のプログラマ?にも?えたいようなプログラムを書くときには、もしかしたら行番?のあるBASICが便利かもしれません。
プログラムの編集
[
編集
]
エディタのないマイコンBASICでは、
と入力すると、プログラム(プログラムリスト)を先頭の行からから表示します。
と入力すると10行目だけを、
と入力すると20行目以降すべてを、
と入力すると先頭の行から20行目までを、
と入力すると20行目から30行目を表示します。
また、
と入力すると、改行するたびに行番?を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(コメント)
[
編集
]
BASICのコメントは、プログラム?での?明やメモを記述するためのテキストです。これらのコメントはプログラムの?行時に無視されますが、コ?ドの理解やメンテナンス、共同作業を支援します。
REM(Remarkの略)ステ?トメントによってコメントを書くことが一般的ですが、マイクロソフト系のBASICでは、
アポストロフィ(')もコメントに使用できます。アポストロフィを使ったコメントは、REMステ?トメントと同?にプログラムの?行時に無視されます。
例えば:
10
REM この行は?面に「Hello, world!」と表示する
20
PRINT
"Hello, world!"
30
' これも同じく?面に「Hello, world!」と表示する
40
PRINT
"Hello, world!"
上記の例では、REMステ?トメントとアポストロフィの?方を使って、同じ意味のコメントを追加しています。
どちらの方法でも、プログラムの?行時にコメントは無視され、PRINTステ?トメントが?行されます。
BASICにおけるコメントの利用は、プログラムの可?性やメンテナンス性を向上させるために非常に重要です。コメントを適切に活用することで、他の人がコ?ドを理解しやすくなりますし、自分自身も後でコ?ドを振り返った際に追いやすくなります。
また、BASICではコメントを使ってプログラムの一部を一時的に無?化することもできます。これは、デバッグの際に特定のコ?ドを?行させないようにしたり、あるいはプログラムの一部をテストしたりする際に役立ちます。
コメントは、プログラムのどこにでも追加することができますが、コ?ドの意味や目的を明確にするためには、適切な位置に追加することが重要です。また、コメントは必要最小限に留めることが望ましいです。過度なコメントはコ?ドを?みにくくする可能性がありますので、コ?ド自?が自己?明的であることが理想的です。
PRINT命令
[
編集
]
BASICのPRINT命令は、?面に文字列や?値を表示するために使用されます。以下に、BASICのPRINT命令の使い方とコ?ド例を示します。
PRINT命令の使い方
[
編集
]
PRINT命令は、次のように使用します。
PRINT
expression1
[,
expression2
[,
expression3
,
...
]]
ここで、
expression1
,
expression2
,
expression3
などは、表示したい文字列、?値、??、または式です。カンマで?切って複?の値を指定することができます。PRINT命令は、指定された順番に値を?面に表示します。
コ?ド例
[
編集
]
10
PRINT
"Hello, world!"
' 文字列の表示
20
LET
x
=
10
' ??に値を代入
30
PRINT
"The value of x is: "
,
x
' ??の値を表示
40
PRINT
"The sum of 3 and 5 is: "
,
3
+
5
' 式の結果を表示
60
PRINT
"The value of x is: "
;
' (;) で終わると改行しない
70
PRINT
x
' ??の値を表示
上記のコ?ド例では、最初のPRINT命令で文字列 "Hello, world!" を表示し、次に??xの値を表示しています。また、最後のPRINT命令では、3と5の和を表示する式を使用しています。
Microsoft系の簡略表記
[
編集
]
Microsoft系のBASICでは、PRINT命令を
?
と簡略して記述することができます。
また、セミコロン(;)を使うことで、改行を抑止する事ができます。
10
?
"Hello, world!"
' 文字列の表示
20
LET
x
=
10
' ??に値を代入
30
?
"The value of x is: "
,
x
' ??の値を表示
40
?
"The sum of 3 and 5 is: "
,
3
+
5
' 式の結果を表示
60
?
"The value of x is: "
;
' (;) で終わると改行しない
70
?
x
' ??の値を表示
上記の例では、
?
を使用して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
[
編集
]
「もし、明日 晴れだったなら、遠足。そうでなく、雨だったらなら、?室で自習。」のような場合わけを?件分岐(じょうけん ぶんき)といいます。
プログラム中である?件に?てはまるかで?行する?容を?えるときには
IF
~
THEN
~
ELSE
文 を使用します。
?件分岐では IF という語句をほぼかならず使うので、?件分岐命令のことを「IF文」とも言います。「IF」とは、「イフ」と?み、「もし ?? ならば、」という意味の英語の接?詞です(日本では、中?校の英語の授業で 接?詞 IF を習うでしょう)。
THEN は「そうであれば??」という意味です。ELSE は「そうでなければ??」という意味です。なお、THENは「ゼン」と?み、ELSEは「エルス」と?みます。
ほかのプログラム言語でも、?件分岐命令のことを普通は「IF文」と言います。
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に?けて書きます。
例の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
[
編集
]
プログラム中で同じ?理を繰り返す場合には、
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の次に?ります
??
[
編集
]
BASICの??は、特定の入力値を受け取り、?理を行い、その結果を返す手?きです。
これらの??は、プログラム?で再利用可能な小さなサブル?チンとして使用されます。
以下に、いくつかの一般的なBASICの??を表形式で解?します。
一般的なBASICの??
??
|
?明
|
使用例
|
ABS
|
渡された?値の絶?値を返します。
|
x = ABS(-10)
|
SIN
|
渡された角度の正弦を返します。
|
x = SIN(30)
|
COS
|
渡された角度の余弦を返します。
|
x = COS(45)
|
TAN
|
渡された角度の正接を返します。
|
x = TAN(60)
|
INT
|
渡された?値の整?部分を返します。
|
x = INT(5.7)
|
RND
|
0から1までのランダムな浮動小?点?を返します。
|
x = RND
|
LEN
|
渡された文字列の長さを返します。
|
x = LEN("Hello")
|
LEFT
|
渡された文字列の左端から指定された?の文字を取得します。
|
x = LEFT("Hello", 2)
|
RIGHT
|
渡された文字列の右端から指定された?の文字を取得します。
|
x = RIGHT("Hello", 3)
|
MID
|
渡された文字列から指定された位置と長さの部分文字列を取得します。
|
x = MID("Hello", 2, 3)
|
DATE
|
現在の日付を返します。
|
x = DATE
|
TIME
|
現在の時刻を返します。
|
x = TIME
|
DATEDIFF
|
2つの日付の間の日?を返します。
|
x = DATEDIFF("2023-01-01", "2022-12-31")
|
これらの??は、BASICプログラムで??な計算や?理を行う際に使用されます。例えば、?値の操作、文字列の?理、日付や時刻の取得など、多岐に渡る用途に活用されます。
- コ?ド例
10
INPUT
A
20
B
=
ABS
(
A
)
30
PRINT
B
50
END
ABS()は絶?値を返す??です。
文字列操作 $
[
編集
]
ここまでの?明で、?値のみを扱いました。ここでは、文字の入力、表示、操作を?明します。
文字定?と文字??
[
編集
]
文字を表す時は""で?みます。
"これは文字です"
文字を表す文字列??では、??名の末尾に$を付けます。
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の整?だけを出すプログラムをつくるには)、??命令に、整?化の命令などと組み合わせます。
ル?プさせていますが、INPUT 命令を使ってEnterキ?を押すごとに次の??を表示させています。RND()は、?際には1の値が生成されることは、ほとんど無いと思われるのでこのプログラムになります。割り?みキ?(BREAKキ?やESCキ?)で?行が終了します。
10 X = INT(RND(1) * 6 + 1)
20 PRINT X
30 INPUT Y
40 GOTO 10
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
」は、
まだ書きかけ
です。加筆?訂正など、協力いただける皆?の
編集
を心からお待ちしております。また、ご意見などがありましたら、お??に
ト?クペ?ジ
へどうぞ。
- ^
中?校?高等?校の情報科や技術?家庭科で取り扱われる3言語は、
JavaScript
、
Python
それに
Visual Basic for Applications
(ビジュアルベ?シック?フォ??アプリケ?ションズ、VBA)ですが、VBAはマイコンBASICの範疇ではありません。