BASIC講座

今日のアクセス数
-



序章 はじめに


この講座は

この講座では、プログラミング初体験者にぴったりのBASIC言語を徹底解説します。

推奨環境

この講座では、主に10進BASICとN88互換BASICを使用します。どちらも、コンパイラ(コードを、ビルド・デバッグするソフト)はWindowsです。(推奨Windows Me以上。Windows7β版での動作確認済み。)
ちなみに、10進BASICのコンパイラにはIntelMac用も存在しますが、X11とGTKライブラリを使うもので、初心者には難しすぎるので割愛します。

作者注

一応言っときますが、
作者は実は中学一年生なのです。どうか、賞賛の拍手と寄付(DONATE)をお願いします。
じゃあ、始めましょうか。

第一章 BASICとは?


BASICとは

BASICは手続き型言語の一つ。
BASICとはBeginner's All purpose Symbolic Instruction Codeの略(頭字語)であるとされる。また、BASIC FORTRANの略ともいわれる。英単語の「Basic(基礎)」の意味も持つと考えられている。
命令、関数がC言語系よりも単純なため、基礎学習には最適である。
ただし、Cほど複雑な命令はできない。

基本、これからの流れ

BASICには様々な種類がある。最も有名なのは、VisualBASIC(以下VB)であろう。しかし、VBを操るには少々の専門的知識が必要なので、まずは超基本である「N88互換BASIC」を使ってプログラミングという物を理解しよう。その次に、少々発展的なものができる「10進BASIC」に移る予定である。ちなみに、BASIC学習を修了したら、つぎはMacユーザーのためにXcode入門に移る予定だ。

BASICの主な特徴

主な特徴
歴史的な経緯からFORTRAN、C言語と比較されることが多い。
  • 対話型の編集・実行環境がある(コマンドライン型のコンパイラ以外)。
  • 古い処理系では行頭に行番号を必要とし、分岐をGOTOに依存する。現在でも互換性のために両者を残している処理系もある。
  • 初心者に優しい字句の方針を持つ。
    • 予約語の大文字と小文字を区別しない。大文字を基本とする処理系が多く、強制的に大文字に変換される処理系もあった。
    • 算術演算子以外の記号は極力使わない。論理演算子はAND、OR、XOR、NOTである。括弧は演算の優先順位も、関数の引数も、配列もすべて「()」のみを用いる。ブロックも「{}」のような括弧ではなく「FOR文からNEXT文までの間」といった構文により指定する。
    • 等価演算子に数学と同じ表記の「=」が使える。代入構文(LET文およびその省略形)で用いられた場合に代入演算子と解釈される。C言語では代入演算子と区別するため等価演算子に「==」が使われるため、誤って「=」とされるミスが発生するが、BASICではそのような問題は起こらない。
  • プログラムは命令と関数からなる。これらの名は予約語とされ、変数名に用いることはできない。
  • 変数は基本的に実数型と文字列型である。中でも文字列操作は柔軟にできるようになっている。文字列型は変数名の末尾に「$」をつけて区別することが多い。
    • 処理系によっては実数型に単精度・倍精度・整数を区別できたり、文字列との区別をしないバリアント型を持つものもある。
    • 実数型同士に明示的型変換(キャスト)を必要としない。
    • 明示的な変数宣言を必要とせず、使用し始めたところで宣言したものと解釈される。
    • 変数は自動的に初期化される(実数型は0、文字列型は空文字列)。
    • 定数や構造体をサポートしていないことが多い。
  • 命令文は改行で区切る。
    • 一行に複数命令を詰め込めるよう「マルチステートメント」という独自の区切り記号(:)を実装した処理系も多い。
    • 字下げは必須ではない(書き方としては推奨される)。
  • 実行は基本的に行頭から行われる(MAINを持つ処理系もある)。
  • 高級言語である(ただし、低水準の操作を拡張されたものも多い)。
    • ポインタはない(変数のアドレスを参照できる処理系もある)。
    • 他の言語で書かれたプログラムとのリンクやBIOS、APIの呼び出しには複雑な手続きが必要か、またはできない。
  • その他にも初心者への配慮が見られる。
    • 恒等式と混乱されがちな代入文を、LET文を用いることで「LET A=2」(Let A equal 2:「Aを2と同じにしなさい」)と読め、意味がつかみやすくなる。LETは省略可能であり、初心者の理解のためにのみ存在する命令である。
    • 画面出力のPRINT文は既定で改行され、改行せずに続けたいときには「;」をつける。これは多くの言語に見られる改行文字(\n)による改行に比べ処理系の実装に手間がかかるが、人間には優しい。


第二章 予約語と構文

(※作者注:ここは軽く読み飛ばしておいてください。実践で使います。いわゆる、英語の単語や文法ってやつ。)

ってなに?

英語で言う単語や文法ってやつ。BASICではかなり英語に近い。(つまり、ほかのコンピューター言語は違うってこと。)

一覧


命令

  • IF 〜 THEN 〜 ELSE - 条件分岐
    • ELSEに対応しない処理系もある
  • FOR 〜 NEXT - ループ構文
  • END - プログラム終了
  • READ 〜 DATA - データを変数に代入
    • 読むDATAの位置を指定するにはRESTORE命令を使う
  • DIM - 配列変数の宣言
  • REM - Remark(コメント行)
  • LET - 変数代入(省略可能な処理系が多い)
  • MAT - 行列処理
  • PRINT - 文字列表示
  • LPRINT - プリンタ印字
  • PRINT ~ USING - 書式付き文字列表示
    • これらの出力は自動的に改行される。それを避ける場合は末尾に「;」(改行なし)や「,」(タブ区切り)を付ける。
  • INPUT - 対話型入力
  • POKE - メモリ領域の直接操作

関数

  • CHR$ - アスキーコードから文字に変換
  • VAL - 文字列を数値に変換
  • MID$ - 文字列操作関数
  • RND - ランダム関数
  • INPUT$ - 1文字入力
  • PEEK - メモリ領域の直接参照

演算子

  • + 加算
  • - 減算
  • * 乗算
  • / 除算(実数)
  • ¥ 除算(整数)※一部の処理系のみ
  • MOD 剰余 ※Full BASICではMOD$関数を使用
  • ^ べき乗
  • OR 論理和
  • AND 論理積
  • XOR 排他的論理和
  • > , < 大小比較
  • = 等号・または(LETでの)変数代入
  • <> 不等号
  • => , >= 以上
  • <= , =< 以下

非構造的な構文

主に旧世代のパソコンのBASICで実装されていた。処理系によっては、互換性のために残している。
  • GOSUB (GO SUB) 〜 RETURN - サブルーチン分岐、復帰
  • GOTO (GO TO) - 強制分岐
  • ON 〜 GOSUB - 条件つきサブルーチン分岐
  • ON 〜 GOTO - 条件つき強制分岐

実行制御・編集支援命令

主に旧世代のパソコンのBASICで実装されていた。
  • AUTO - 行番号自動入力支援
  • RENUM - Renumber 行番号の一括付け直し
  • RUN - プログラム実行
  • NEW - プログラム全消去
  • TRON - Trace On (実行中の行番号を表示)
  • TROFF - Trace Off (TRON解除)
  • LOAD - ディスクからプログラムファイルの読み込み
  • CLOAD - テープからプログラムファイルの読み込み
  • SAVE - ディスクへプログラムファイルを保存
  • CSAVE - テープへプログラムファイルを保存
  • FILES - ディスクファイルの一覧

第三章 BASICを体験しながら基本を学ぶ


N88互換BASICをダウンロード、インストール

これから使用するN88互換BASICは潮田さんが作った有名なコンパイラで、Vectorからダウンロードできます。こちらからダウンロードしてください。
このソフトはPC-9801というもので使われていたN88BASIC言語をWindowsで使用可能にしたポピュラーなコンパイラです。
インストールを済ませて、WinBASIC.exeを開いてください。
白い「プログラム画面」と黒い「実行画面」が表示されます。当然、白いウィンドウにBASICを打ち込み、黒いウィンドウで実行することになります。


サンプルプログラム1

下のプログラムは円または扇形の面積を求めるものです。まずは、このプログラムを コピー/貼付け して実行してみましょう。

(※作者注:下のプログラムの”(引用符)の間の言葉は日本語に変えても可能です。)

10 PRINT"Coding by OrangeComputer Inc. CEO Tehu Jobs Jr."
20 PRINT"This program will get circle area."
30 INPUT"Please input a radius of this circle.";RADIUS
40 INPUT"Please input a central angle of this circle.";ANGLE
50 CIRCLEAREA=RADIUS*RADIUS*3.14*ANGLE/360
60 PRINT"This circle's area is ";CIRCLEAREA
70 END

実行するには、入力スペースの上の再生(三角)ボタンをクリックします。

プログラムからの質問に答えていきましょう。1つ目のradiusは半径、2つ目のcentral angleは中心角です。

半径10cm、中心角360°としましょう。

黒画面にこのように表示されます。

Coding by OrangeComputer Inc. CEO Tehu Jobs Jr.
This program will get circle area.
Please input a radius of this circle.? 10
Please input a central angle of this circle.? 360
This circle's area is 314.

うーん、これだけで、結構便利ですね。

さあ、BASIC言語をもう一回見てみましょう。

10 PRINT"Coding by OrangeComputer Inc. CEO Tehu Jobs Jr."
20 PRINT"This program will get circle area."
30 INPUT"Please input a radius of this circle.";RADIUS
40 INPUT"Please input a central angle of this circle.";ANGLE
50 CIRCLEAREA=RADIUS*RADIUS*3.14*ANGLE/360
60 PRINT"This circle's area is ";CIRCLEAREA
70 END

これでプログラムが動くことを理解して、基本から学んでいきましょう。

行番号

初歩的なBASICでは、行番号を必ず各行の先頭に打ちます。
これは、小さい順に打っていけばOKです。
ではなぜサンプルプログラムで「1、2、3,4、5・・・」としないか?
単純なことで、「途中に行追加するときのため」です。行番号に小数は使えませんから、「1、2,3、4・・・1000」の行番号を打ったプログラムがあったとして、3行目と4行目の間に追加したくなったら、4~1000のすべての数字を1ずつ上げなければいけません。それを防ぐために、「10、20、30、40・・・」と打っているのです。
まず行番号はマスターしましたね。

INPUT" "; 構文

30,40行目のINPUT” ”は、操作者に値の入力をうながす構文です。
例えば、
30 INPUT"Please input a radius of this circle.";RADIUS
だと、
「画面に『Please input a radius of this circle.』と表示し、変数RADIUSに代入する値の入力をお願いしろ」という意味です。
変数とは、数学でいうx,yなどの未知数のことです。
10と入力すれば、BASICは「RADIUS=10」だと考えます。数学の問題で、「x=23のとき、yの値を求めよ」みたいなもんです。

「公式」は、
<行番号> INPUT"<言葉>";<代入する変数>
です。

これで、INPUT構文もOKです。

PRINT" " 構文

10,20,60行目のPRINT" "は、文字列や変数の値などを表示する構文です。
例えば、
10 PRINT”Coding by OrangeComputer Inc. CEO Tehu Jobs Jr."
だと、
「画面に『Coding by OrangeComputer Inc. CEO Tehu Jobs Jr.』と表示し、次の行にすすめ。」という意味です。

また、
60 PRINT"This circle's area is ";CIRCLEAREA
だと、
「文字列『This circle's area is 』と、変数CIRCLEAREAの値を一緒に表示しろ。そして、次の行に進め。」という意味です。
CIRCLEAREAの値が10ならば、「This circle's area is 10」と表示します。

これで、PRINT構文もマスターです。

演算命令

これは普通の計算と同じです。
サンプルプログラム1の50行目では、
50 CIRCLEAREA=RADIUS*RADIUS*3.14*ANGLE/360
とありますが、これは円の面積の公式とおなじです。
「円、扇形の面積=半径*半径*3.14*中心角/360」
ちなみに、乗法記号は*、除法記号は/で表します。
括弧のある計算は、()のみを使います。{} []は使いません
例:4*(4+3)=28

END

プログラムの最後には、終了を表すENDをつけます。これは大丈夫ですね。

サンプルプログラム1のまとめ

これで、サンプルプログラム1は理解できましたか?これが、BASICの最も基本「行番号」「PRINT」「INPUT」「演算」「END」です。
簡単でしょ?

   また更新します。
最終更新:2009年02月22日 17:35
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。
添付ファイル