[一定回数同じ処理を繰り返すプログラム]
ここまでずっと順次処理ばかりやってきました。前にも言ったとおり、プログラムの最初から最後まで順番に命令を実行してゆく順次処理はコンピュータのプログラムの基本なのですが、これだけではコンピュータを使うメリットはあまり感じられません。電源が安定して供給され、故障や過熱による部品破損などがない限り疲れを知らないコンピュータらしい仕事といえば、同じ命令を何回も実行する繰り返し処理でしょう。
図7-1のプログラムを実行してみてください。2、3行目のインデント(字下げ)はしなくても結果は変わりません。結果は図7-2.のようになります。
FOR I=1 TO 5
PRINT "HELLO. Tiny BASIC"
PRINT 3+5
NEXT I
END
図7-1.同じことを繰り返すプログラム

図7-2.同じことをくり返した
プログラム2行目にPRINT "HELLO. Tiny BASIC"とあり、3行目にPRINT 3+5とありますから、このプログラムは"HELLO. Tiny BASIC"というストリングと、3+5の計算結果を表示することはおわかりになると思いますが、実行結果を見るとこれが1セットで5セット(5回)表示されています。なぜこうなったのでしょうか。それは1行目の FOR I=1 TO 5 と4行目の NEXT が為せる業です。
FORはこの場合、For You のForではなく、「~の間」と考えてください。 1行目は「変数 I の値が 1 から始まり 5 になるまでの間、以下を実行せよ」の意味になります。以下ってどこまで?ということになりますが、それを指示するのが4行目の NEXT です。「次」という意味ですが、NEXT ~で「次の~」ということになりますから、繰り返しはここまで、という指示と考えてください。このプログラムでは変数 I の値は繰り返しに突入する時に自動的に 1 とされ、NEXT I に来たところで、これまた自動的に +1 されます。このようにして 5 になって最後の回を実行して NEXT I に来たところで、 +1 されて 6 になります。これでFORに戻ると、すでに繰り返しの条件「 I が 5 になるまで」は満たしていますから、もう繰り返し部分には入らず、NEXT の次の行に移る、というわけです。
この FOR ~ NEXT のように、プログラムの実行順序を変えたりするステートメントのことを制御文といいます(制御文はそれ自体、入力、処理、出力などは行なわず、プログラムの動作をコントロールするだけです)。筆者が知る限り、ほとんどのプログラミング言語で、この FOR ~ NEXT に相当する繰り返し制御文がありますので、これはぜひ使えるようになってください。

図7-3.FOR~NEXTによる繰り返し処理の流れ
[FOR ~ NEXT制御文]
FOR ~ NEXT制御文の書き方は次の通りです。
FOR 変数=初期値 TO 終端値 STEP 増分
繰り返し実行する命令
|
↓
NEXT 変数
1)FOR は必ず NEXT とペアでなくては使えません。
FORとNEXTで囲まれた部分をFORブロックといいます。
FOR文で使用する変数(上の例なら I )をループカウンタ(ループ変数)といいます。
2)両方の変数は同じで、かつ数値が入るもの(数値型変数)でなくてはなりません。NEXTの後ろの変数名は省略できますが、その場合、そこから前の方にさかのぼっていちばん近い FOR とペアだとみなされます。
3)FOR 変数=初期値 TO 終端値 STEP 増分は、「変数の値が初期値から始まって増分値ずつ変化し終端値に達するまでの間」の意味になります。増分は省略できます。省略した場合は +1とみなされます。したがって、図7-4のプログラムは図7_1.と同じ結果になります。
FOR I=38 TO 42
PRINT "HELLO. Tiny BASIC"
PRINT 3+5
NEXT I
END
図7-4.初期値、終端値
初期値>終端値で増分を負の数にすることもできます。実行結果は図7_2のとおりです。
FOR I=5 TO 1 STEP -1
PRINT "発射";I;"秒前"
NEXT I
PRINT "発射!---→"
END

図7_5.増分値を負の数にした例(ロケット発射)
4)FORブロックはプログラム中にいくつあってもかまいません。次のプログラムでは、5~7行目と10~12行目の2箇所にFORブロックがあります、実行結果は図7-4のとおりです。
INPUT "お名前は";NAMAE$
INPUT "1~10000の自然数を入力してください",N
T=0
FOR I=1 TO 5
PRINT "Hello,";NAMAE$;"さん"
NEXT I
FOR I=1 TO N
T=T+I
NEXT I
PRINT "1から";N;"までの自然数の和は";T
END

図7_6.FORブロックが複数あるプログラムの実行結果
5)FORブロックの中にFORブロックを含むことができます。これをネスティング(入れ子)といいます。次のプログラムを実行すると結果は図7-5のようになります(掛け算九九です)。
PRINT "掛け算九九表"
PRINT " | 1 2 3 4 5 6 7 8 9"
PRINT "--+------------------------------------"
FOR I=1 TO 9
PRINT I;"|";
FOR J=1 TO 9
A=I*J
PRINT USING " ## ";A;
NEXT J
NEXT I
END

図7_7.ネスティングのあるプログラムの実行結果
ネスティングでは子ブロックは完全に親ブロックの中に包括されている必要があります。次の例だと左はOKですが、右はダメです。
FOR I = 0 TO 10 FOR I=0 TO 20
FOR J = 0 TO 10 FOR J = 0 TO 10
NEXT J NEXT I
NEXT I NEXT J
[ループカウンタ取り扱い上の注意]
ループ変数はそのブロックの中で参照(ループ変数の中味を見たり、計算式の右辺に使用すること)することはできます。しかし、ループ変数自体に何かを代入すると思わぬ事態になることがあります。
たとえば次のプログラムを実行するとどうなるでしょう。
FOR I=10 TO 15
PRINT "ピーターパンは";I;"歳になりました"
I=10
NEXT I
END
図7-8.ループカウンタの値をブロック内で変更すると
FOR~NEXTループに入ったところで I の値は10です。次のPRINT命令は"ピーターパンは";I;"歳になりました"となっています。 の現在の値は10ですから、"ピーターパンは10歳になりました"と表示されます。3行目でループ変数である I に10を代入しているので、4行目のNEXT Iでは I の値は 11 になります。FORに戻ったところで I はまだ終端値になっていないので次はピーターパンは 11 歳になりました"と表示されます。次は 12 歳になるところですが、3行目の I=10 があるため、ここを繰り返し通る度に I は10に戻ってしまい、NEXT I まで来てもループ変数は再び 11 になります。その結果、このプログラムはピーターパンが 11 歳になったところで永遠に終わらない永久ループになります。「ピーターパンは永遠に歳をとらない男の子なんだからこれでいい」ではなくて、これはプログラムのミスでコンピュータが暴走しているのですから、プログラムを強制的に終了させなくてはなりません。「よし、バッテリーパックを外そう」、ダ、ダ、ダメですよぉ(冷汗)。稼働中のコンピュータの電源部に手を触れるなど危険きわまりない!

図7-9.永久ループしたプログラムの強制終了
実行中のプログラムを強制終了するには、実行画面上布施にある中断をクリックします(図7-6)。実行が停止し、実行画面にはOKの表示が出ます。
このようにループ変数に何かを直接代入するとプログラムの暴走につながるバグ(bug=虫、プログラム中のミスのこと)を招きかねません。そして筆者の経験で言えば、この手のバグを探すのはかなり大変です(1坪ほどの地面からダンゴ虫を見つけるのと同じくらい)。ループ変数はその内容を使う(参照といいます)のはかまいませんがループ変数そのものの値を変えるのはやめておきしょう。
[PRINT USING "~"]書式を指定して表示
PRINT命令は続くオペランドの内容を表示するもので、手軽に使えて便利なのですが、数値もストリングもすべて左詰めで表示します。ストリングはそれでいいとしても数値は帳簿等に書く時も普通は右詰めで書きます。小数点以下を含む数値なら小数点の位置を合わせて書きます。PRINT命令でもこのように表示させるのが図7-7のプログラムに出てくるPRINT USING命令(書式指定)です。USINGの後ろの" "の部分には書式設定子が入ります。書式設定子にはいろいろなものがあるのですが、現時点では数値の書式設定だけ覚えておきましょう。
数値の書式設定子には、#、.、,、\(すべて半角)があります。
# は数字を表示する位置を指定します
. は小数点の位置を指定します
, はカンマの位置を指定します
\ を先頭につけると最上位桁の前に \ マークを付けます
次のプログラムを実行すると結果は図7-10のようになります。
A=1234500
B=12345
C=123.45
D=12.345
PRINT USING "##,###,###";A
PRINT USING "##,###,###";B
PRINT USING "###.##";C
PRINT USING "###.##";D
PRINT D
END

図7-10.書式設定のサンプル
[この章のまとめ]
プログラムの全体または一部を何回も繰り返し実行することを繰り返し処理(またはループ)という。
計算や代入、表示ではなく、プログラムの動きをコントロールする分を制御文という。
Tiny BASICでは FOR ~ NEXT制御文を使うことによって繰り返し処理(ループ)が実現できる。使い方は
FOR ループ変数=初期値 TO 終端値 STEP 増分
繰り返し実行する命令
NEXT ループ変数
ループ変数の内容を繰り返し処理の中で参照するのはよいが、ループ変数そのものの値を変えるようなことは避けた方がよい。
FORブロックは1つのプログラムの中にいくつあってもよい。
fORブロックの中にFORブロックを含めることができる(ネスティング)。
PRINT USINGは書式を設定して画面表示する命令である。
【演習4】FOR ~ NEXT制御文を使って、1 から15までの自然数のうち、奇数( 2 で割り切れない数)を表示するプログラムを作りなさい。また 3 から15までの自然数のうち 3 の倍数を表示するプログラムはどうなるでしょう。

図6-1.台形
さて、前章で学んだストリングやPRINT命令の様々な使い方を活用して、台形の面積を求めるプログラムを作ってみましょう。ここではオペレータの誤操作をできるだけ防ぐ工夫についてもお話します。
台形の面積は、上底をa、下底をb、高さをhとしたとき、
(a+b)×h÷2
で求められました。プログラムは次のようになりますね。
INPUT A
INPUT B
INPUT H
S=(A+B)*H/2
PRINT S
END

図6-2.実行結果
[できる限り誤操作対策をしよう]
このプログラムを実行すると図6-2のようになります。プログラム中にINPUT命令が3回でてきますから、実行すると図のような入力ボックスが3回現れます。INPUT命令が多いと、それだけ現れる入力ボックスも多くなり、オペレータがそのプログラムを作った当人なら別として、そうではないときは「今ここで何のデータを入力するのか」がわかりにくくなります。また、実行画面も何が何だかわからなくなってきます。それは誤操作を招きやすくなるということでもあります。筆者の経験で言うと、コンピュータから個人情報などが漏洩するトラブル、システム全体をダウンさせたなどの原因の半分以上は誤操作によるものです。そして「操作がわかりにくい」「画面が見づらい」は誤操作を招く最大要因です。
このプログラムを次のように改造して実行しましょう。
PRINT "台形の面積を求める"
INPUT "上底=";A
INPUT "下底=";B
INPUT "高さ=";H
S=(A+B)*H/2
PRINT "面積=";S
END
1行目ではこのプログラムが何のプログラムかを画面に表示しています。これを表示することにより、今ここで実行してよいプログラムかどうかオペレータに確認させるようにします。ここの実習ではそんな危険なプログラムは扱いませんが、実際のシステムでは、今ここで実行してはいけないプログラムを誤実行(誤操作の最も酷いもの)してシステムダウンを引き起こした、などというケースもあるからです。LINEなどのSNSでは送信相手の名前が画面上に表示されるようになっていますが、あれも誤操作・誤実行防止のためです。「今から帰る、愛してるよ、chu」と奥様に送るのを間違えて学生のグループに送信してしまったら?・・・明日からどのツラ下げて出勤するんだ!ということになります。
プログラムの始めに「何のプログラムか」を表示させるようにする、これも習慣づけておきましょう。
2行目のINPUT命令が実行されると、キーボードからの入力待ちになりますが、このとき入力ボックスと実行画面の両方に INPUT の後ろのストリングがそのまま表示されていることを確認してください(図6-3)。

図6-3.上底を入れるところ
上底の値(この例は10)と入れてOKをクリックするとプログラムは先に進み、次は3行目のINPUT命令で下底の入力待ちになります(図6-4)。

図6-4.下底を入れるところ
下底の値(この例は15)と入れてOKをクリックするとプログラムはさらに先に進み、次は4行目のINPUT命令で高さの入力待ちになります(図6-5)。

図6-5.高さを入れるところ
高さの値(この例は4)を入れてOKをクリックするとプログラムは5行目に進み、ここまでで入れた上底、下底、高さをもとに台形の面積を計算します。
そして最後に7行目で計算結果をディスプレイに表示します(図6-6)

図6-6.計算結果が表示された
このようにキーボードからの入力待ちのところで、何のデータを入れるのかを表示することで、操作がわかりやすくなり、誤操作防止になります。
[INPUT命令の便利な使い方]
Tiny BASICのINPUT命令は、次のような書き方ができます。
INPUT ストリング , 変数名
INPUT ストリング ; 変数名
ストリングと変数名の区切りには , と ; が使えます。 , の場合はストリングが表示されるだけですが(図6-7)、 ; にするとストリングの後ろに?マークが付加されます(図6-8)。

図6-7.INPUT ストリング , 変数の場合

図6-8.INPUT ストリング ; 変数の場合
[入力→処理→出力]
コンピュータに何らかのデータを入れることを入力といい、コンピュータで処理した結果をディスプレイに表示したりプリンタで印字することを出力といいます。今後は当カテゴリーでもこの言い方をすることにします。

図6-9.コンピュータのプログラムの基本は入力→処理→出力
そしてコンピュータのプログラムは、銀行のシステムのような巨大なものから、ゲームのようなホビープログラム、ここでのサンプルに出てくる小規模なものまですべて、入力→処理→出力という流れが基本になります。この章のサンプルプログラムなら、INPUT命令で上底、下底、高さを読み込む所が入力、台形の面積を計算する所が処理、計算した結果をPRINT命令で表示する所が出力です。
【Tiny BASICの文法(3)】プログラム中の空行
プログラム中に空行(なにも書かれていない行)を入れることができます。空行は何行入れてもかまいません。たとえば
PRINT "台形の面積を求める"
INPUT "上底=";A
INPUT "下底=";B
INPUT "高さ=";H
S=(A+B)*H/2
PRINT "面積=";S
END
のようにすると、一連の処理のかたまりがわかりやすくなります。プログラム中に空行を置いても、実行画面上で空行ができるわけではありません。実行画面上で行を空けたいときは
を使う必要があります。
【昔はよかったなぁ】
この章でやったプログラムを昔のBASICでやると図6-10のようになります。

図6-10.台形の面積を求めるプログラムを昔のBASICで書くと
昔のBASICではINPUT命令での入力待ちでも入力窓が出ません。プログラム作成・編集・実行すべて同一画面です。どちらがいいかは好みによります。
昔のBASICではプログラム中に空行は入れられません。
【この章のまとめ】
操作がわかりにくい、画面が見づらい、は誤操作を招く最大要因である。
プログラム中には、誤操作・誤実行防止の対策を施しておくことがのぞましい。
INPUT命令は INPUT ストリング,(または ; )変数、という使い方ができる
コンピュータに何かのデータを入れることを入力、処理した結果を表示(印字)することを出力という
コンピュータによるデータ処理の基本は入力→処理→出力という流れである
【演習3】直方体の底面積と体積を求めるプログラムを作りなさい。底面のたてとよこ、立体の高さはキーボードから入力するものとします。ただし画面の見やすさを工夫し、誤操作・誤実行対策を施すこと
ここまでずっと数値データばかり扱ってきました。変数に代入するのもPRINT命令で画面に表示するのもすべて数値のみでした。この章では画面に数値以外の文字を表示したり、文字データを扱うことを覚えましょう。
[ストリングとは]

図5-1.文字を画面に表示する
まずは図5-1のように画面に文字を表示する方法です(思いっ切り筆者の趣味が入ったサンプルで申し訳ありません・・・汗)。これは、画面に何か表示するのだから PRINT命令を使うのかな、はい、そのとおりです。ではやってみましょう。プログラムはこうなるはず。では作って実行してみてください。
PRINT C62型は国鉄で最後に作られた蒸気機関車
END

図5-2.実行したらエラーになった
実行したらこうなってしまいました(図5-2)。では次のように直してください。実行結果は図5-1の通りになったと思います。
PRINT "C62型は国鉄で最後に作られた蒸気機関車"
END
どこが違うのかわかりますか。そうです。「C62型は」の前と「機関車」の後ろに"(ダブルクォーテーションまたは引用符とよばれる)が入っています。この" "で囲まれたものを文字列とか文字リテラル、ストリングと呼びます。当カテゴリーでは今後ストリングといいます。プログラミング言語ではストリングもまた「式」です。ストリングであることを示す引用符はTiny BASICでは"(ダブルクォーテーション)のみです。プログラミング言語によっては'(シングルクォーテーション)が使えるものもありますが、Tiny BASICでは ' は別の意味を持つのでご注意ください。引用符は始めも終わりも " です。日本語の「 」のように始め終わりの区別がありません。
最初の例がエラーとなった原因ですが、PRINT命令は続くオペランド(式)が数値、計算式、関数、ストリング以外のときはすべて変数とみなします。この場合だと「C62型~機関車」が" "で囲まれていないのでストリングではなく変数とみなされます。変数名は半角英数字という規則がありました(第2章)。なので「これは何?」ということでエラーになってしまったというわけです。
では次のようなプログラムはどういう結果になるでしょうか。考えてみてください。
PRINT 50+30
PRINT "50+30"
END
結果は図5-3のようになります。1行目のPRINT命令のオペランドの内容は 50+30 の計算結果ですが、2行目は " で囲まれているため「ご、ゼロ、たす、さん、ゼロ」というストリングとみなされていることがわかります。

図5-3. " "で囲むと計算式とはみなされない
ところで、大変細かいことなのですが、お気づきになったでしょうか。PRINT命令での表示のとき、ストリングは普通に(左詰めで)表示されますが、数値の場合は最上桁の左側に半角1文字分のスペースが空きます。これは本来正負を表す + 、 - の符合が入るところです。負の数の場合は - (マイナス)が表示されますが、正の数の場合、 + (プラス)は省略されます。トライアルコード(3和音)では、マイナーコードを表す小文字のmは書かれるけれど、メジャーコードを表す大文字のMは普通は省略されるというのと似ています(筆者の本業は・・・ええい、しつこい!)

図5_4.メジャーコード(左)とマイナーコード(右)
「変数にストリングを代入する」
次のプログラムを実行すると、図5_5のようになります。入力窓ではご自分の名前でも好きな人の名前でもなんでもいいので入れてください。
A$="さん、こんにちは"
INPUT B$
A=5
C$=B$+A$
D$=DATE$
PRINT C$
PRINT "今日は";D$;"です","今日もお仕事がんばってください"
PRINT A
END

図5_5.実行結果
プログラム1行目の代入文を見てください。ストリングはこのように変数に代入することもできます。ストリングを入れる変数は変数名の後ろに半角の $ (ダラー、またはドルマーク)を付けます。
2行目にはINPUTがありますが、ストリングはキーボードから入力し、変数に代入することもできます。
3行目ですは変数Aに数値を代入しています。変数Aは1行目ですでに使われていますが、AとA$は違う変数とみなされますので文法的にはこれで問題ありません(プログラムはわかりにくくなりますが)。
4行目です。「えっ?文字と文字のたし算って?」と思われた方もいらっしゃると思います。これはたし算ではなく、ストリングの連結です。このサンプルの場合、A$に入っているストリングの後ろに変数B$に入っているストリングが連結されそれが変数C$に代入されます。
5行目に出てきたDATE$は、画面に美少女が現れてデートしてくれる・・・わけではなく(冷汗)、今日の日付です(現在のパソコンは、筆者の知る限りすべての機種で内部にカレンダー・時計機能を持っています)。DATE$はコンピュータが管理している日付を引っ張り出してくる(多くのプログラミング言語のマニュアルでは「与える」という言い方をします)関数です。Windows10+Tiny BASICの場合、日付は西暦4桁/月2桁/日2桁になります。DATE$は $ が付いているので想像つくと思いますが、日付をストリングで与えますから、 $の付いた変数に代入して使うことが可能です。
7、8行目のPRINT命令の使い方は、今までやってきたものとかなり様相が違います。PRINT命令は続くオペランドの中に式(表示するもの)が複数入っていてもよいのですが、その区切りを ; にすると続けて表示、 , にすると少し間隔を空けて表示します。またオペランドが全くないPRINTだけだと改行のみ行ないます。1行空けるときなどに使います。
ストリングの扱い方とPRINT命令のいろいろな使い方を覚えると、見やすい画面、使いやすいプログラムが作れるようになります。次章でやってみましょう
【この章のまとめ】
画面に文字を表示するには表示したい文字を " で囲む
" "で囲まれたものを文字列、文字リテラル、ストリングという
変数名に $ を付けた変数にはストリングが代入できる
PRINT命令で数値を表示すると最上桁の左に正負の符合が入る半角1つのスペースが空く
PRINT命令で複数の式を表示させるとき、区切りを ; にすると続けて表示、 , にすると少し間隔を空けての表示となる。オペランドが何もないと改行のみ行なう
DATE$はコンピュータが管理している日付をストリングで与える関数である
【コンピュータとは?】
Tiny Basicでのプログラミングを体験してみたところで、あらためて「コンピュータってどういう機械?」ということを学びましょう。すでにわかっていらっしゃる方、とりあえずプログラミングだけやりたい、という方は今はこの節は飛ばしていただいてかまいません。これ以後を読んでいて必要があれば戻ってきてください。

図4-1.コンピュータのいろいろ
図4-1の上段2つは一般的にオフィスや家庭にあるデスクトップパソコン(左)とノートバソコン(右)です。下段左は銀行や役所などに設置されている大型コンピュータ、下段右は家電製品や車に部品として組み込まれているマイクロコンピュータの例です。このように一口にコンピュータといっても、大きさ、形は様々で使用目的も違います。ただどのようなコンピュータでもそのからだは図4-2のようになっています。

図4-2.コンピュータを構成する各装置
コンピュータの中心には中央処理装置(Central Processing Unit、以下CPUといいます)なるものがデンと構えています(といっても大型コンピュータならともかく、今のパソコンでは小サイズの使い捨てライターより小さい部品です)。CPUの中はさらに計算を司る演算装置、コンピュータ全体の動きを制御する制御装置に分かれます。
第2章でも出てきた主記憶装置はデータやプログラムを記憶する所です。変数に代入したデータ、プログラムモードで入力したステートメントはここに記憶されます。CPUと主記憶装置は人間でいえば頭脳に相当します。
そして主記憶装置に記憶させるプログラムやデータを入力する装置が入力装置(パソコンならキーボードやマウスなど)、計算結果や処理結果を表示したり印字するのが出力装置(パソコンならディスプレイやプリンタなど)です。入力装置と出力装置は人間なら目、耳、口、手などにあたります。
補助記憶装置は人間の使う物では手帳と考えてください。主記憶装置は電気的に記憶するものであり、記憶・読み出しの速度は速いものの、記憶容量はそれほど大きくはなく、また電源を切るとその記憶内容は消えてしまいます。一方補助記憶装置は記憶・読み出しの速度は遅い反面、記憶容量が大きく、電源を切っても記憶内容は永遠に残ります。前章で作ったプログラムはまず保存、といいましたが、名前を付けて保存とすると補助記憶装置に保存されます。補助記憶装置については後の章で詳しくお話します。
図4-2中のデータの流れとは、データをどこから入力し、どこに記憶し、どのように処理加工してどこに出力するかなどでこれらはプログラムで指示できるものです。制御の流れとはコンピュータを構成する各装置が間違いなく動作するよう管理するための信号で人間の自律神経のようなものです。制御信号は通常の方法ではプログラムでコントロールできません。
【違うデータで同じ処理を行なうプログラム】
ではプログラミングに戻ります。
前章で作ったプログラムは図4-3のようになっていました。
A=10
B=6
S=A*H/2
PRINT S
END
図4-3.三角形の面積を求めるプログラム
このプログラムは変数Aを底辺、Hを高さとしたときの三角形の面積Sを求めるものでした。そこでAを10、Hを6として計算したわけですが(下線部)、もしAに7、Hに4を代入すれば今度は底辺が7、高さが4の三角形の面積が求められます。異なる底辺、高さで計算したいときは代入文(下線部)を変更すればいいわけです。これでも一応変数を使う意味はあるのですが、底辺と高さの値が変わる度にプログラムを修正する必要があり少々不便です。ということで、このブログラムを使い勝手が良くなるように改造します。
[前に作ったプログラムを修正する]
では前章で作ったプログラムを図4-4のように改造します。下線部が変更する部分です。
INPUT A
INPUT H
S=A*H/2
PRINT S
END
図4-4.プログラムを改造
この程度の長さのプログラムなら始めから全部作り直してもいいのですが、今後もっと長いプログラムを作るようになったとき、あるいは一度作ったプログラムにミスがあって修正する必要が出てきたというような場合のことを考え、ここでは前章で作ったプログラムを呼び出して(パソコンに向かって「おーい、プログラム出てこーい」と叫ぶのではありません。既存のプログラムやドキュメントを開いて再利用できるようにすることです。プログラミングの世界ではほかに「関数の呼び出し」のような使われ方をします)、編集し再び保存という方法を覚えましょう。
前に作ったプログラムを呼び出すには、編集画面から「プログラム」→「開く」と進みます(図4-5)。

図4-5.既存のプログラムを呼び出す
すると前章で作った ex1.tbt というプログラムが表示されるので、これをクリックして「開く」をクリックするか、ex1.tbt をダブルクリックします。これもWord、Excelを使ったことのある方にはおなじみの方法です(図4-6)。

図4-6.呼び出したいプログラムを選ぶ
呼び出しが成功すると、ex1.tbt のプログラムが編集画面に出てきますから、最初の2行を図4-3のように修正します。カーソルを直したいところにもっていって直します。Wordやメモ帳と同じです。修正では新規作成と違って、1行修正するごとに【ENTER】を押す必要はありません(【ENTER】を押すとそこで改行します)。

図4-7.このように修正する
修正が終わったら、実行してみてもいいのかと思われそうですが、実行前に保存はプログラム修正時も同じです。今やった編集作業はあくまでコンピュータの主記憶装置の中だけで行われたことであり、保存されているプログラムが自動的に直っているわけではないからです。修正したプログラムの保存は編集画面上の「プログラム」から「上書き保存」です(図4-8)。

図4-8.修正したプログラムの保存
保存が終わったら実行してみましょう。編集画面上部の「即実行」をクリックしてください。実行するとすぐに図4-9になると思います。これはキーボードからの入力待ちです。入力窓に15と入れて「OK」をクリックしてください。するともうひとつ入力窓が現れます(図4-10)。今度は10と入れてみましょう。「OK」を押すと実行画面に底辺15、高さ10の三角形の面積75が表示されます(図4-11)。

図4-9.修正したプログラムを実行

図4-10.キーボードからの入力待ち

図4-11.実行結果
[データをキーボードから入力する]
このプログラムを実行すると途中でオペレータ(コンピュータを操作している人とお考えください)がキーボードからデータを入力するのを待つために一時停止します。INPUTはキーボードから入力された内容を、後に続く変数に読み込む(代入)する命令です。そしてこれが実行されるとプログラムはキーボードから何かデータが入ってくるまで実行をいったん停止します。
INPUT命令を使う最大の利点は、異なるデータで同じ処理を行いたい場合、いちいちプログラムを書き換えないで済むことです。現段階ではまだこのありがたみは実感できないと思いますが、この後に出てくるサンプルプログラムを見ていただければ「なるほどな」と納得していただけると思います。
[順次処理]
図4_7と図4_9をもう一度見てください。プログラムは最初のステートメントから順番に実行されていることがおわかりいだけると思います。コンピュータのプログラムは基本的には体育祭や演奏会のプログラムと同じです。図4-12は演奏会のプログラムの例です(しつこいようですが筆者の本業はピアノの先生です)。演奏会では普通、会場入口でお客様に差し上げたプログラムのとおりに最後まで演奏されます。この場合ならベートーヴェン、ショパン、ドビュッシーの順に演奏されて終わりです(アンコールで何かもう1曲演奏されることはありますが)。よほどの事態が発生しない限り、ベートーヴェンとショパンの演奏順が入れ替わったり、ドビュッシーまで終わったところで、もう一度ベートーヴェンに戻って最初から、ということは起こりません。コンピュータのプログラムも同じで、通常は最初のステートメントから終わりに向かって順番に実行されてゆきます。このような処理を順次処理といいます。コンピュータのプログラムは同じ処理を一定回数繰り返し実行したり、条件によって処理内容を変えたりすることができるのですが、その場合でも基本は順次処理です。
ベートーヴェン ソナタ第14番「月光」
ショパン バラード第1番
ドビュッシー ベルガマスク組曲
図4-12.演奏会のプログラムの例
ここまでで覚えたプログラムの作成、保存、プログラムの修正、プログラムの実行で、Tiny BASICを使うにあたって必要最小限の操作はひととおり終わりました。Tiny BASICにはプログラム開発に便利な機能がまだまだたくさんありますが、当カテゴリーの実習ではこれだけ覚えておけば充分です。今後は「保存しましょう」「プログラムから開くを選び~」などは言いません。ここまでの操作に不安がある方は前章までを読み返し、操作に習熟しておいてください。
【Tiny BASICの文法(2)】ステートメント中の空白
ステートメント中には適宜半角の空白を入れることができます。
ステートメント中の連続する半角空白はストリング(次章でやります)以外、何文字分あっても1文字とみなされます。
1つの命令(指示語)の途中に空白を入れることはできません。
A=5
A=5
A = 5
上の3つはどれも変数Aに5が代入されます(コンピュータは同じ動作をします)。
S=A*H/2
S = A*H/ 2
上の2つはどちらも同じ計算をします(プログラムが見やすいかどうかの問題です)
指示語とオペランドの間には1文字分以上の半角空白を入れなくてはなりません。
PRINT S
PRINT S
上の2つはどちらも同じ動作をしますが、次のようなのはだめです。
PRINTS
PR INT S
空白を入れる際、誤って全角の空白を入れないように気を付けてください。全角文字はストリングとして以外では使用できません。
【この章のまとめ】
一度作ったプログラムは修正・変更が可能である
修正したプログラムは再び保存する必要がある
INPUT命令
キーボードから入力された内容を、後に続く変数に読み込む(代入する)
順次処理
プログラムは通常、最初のステートメントから終わりに向かって順番に実行される
【演習2】キーボードからたて、よこの長さを入力し長方形の面積を求めるプログラムを作りなさい
[プログラムの作成]
では、いよいよプログラミングに入りましょう。コンピュータの世界でいうプログラムとは処理の手順です。ノンプロミングモードでは、変数に代入、計算、結果表示をワンステップずつ(OK表示になるごとに)実行しなくてはなりませんでしたが、これを自動化しちゃおう、という発想です。まずは昨日やった三角形の面積を求めたものを自動化(プログラム)にしてみましょう。

図3-1.編集画面を開く
プログラムを作成するには、編集画面を使います。Tiny BASICを起動したら編集画面側の左上にある「プログラム」をクリックします。するとメニューが表示されます。今は新しくプログラムを作るのですから、この中の「新規作成」をクリックします(図3-1)。すると図3-2のようなプログラム編集ウィンドウが開きます。このウィンドウ内にプログラムを書き込みます。

図3-2.プログラム編集ウィンドウ
最初は変数Aに底辺の長さ 10 を代入するのでしたね。ではプログラム編集ウィンドウに半角英数字で A=10 と入れて【ENTER】を押してください。あれっ?何も起こらないぞ、とあわてずに。ノンプログラミングモードでは一命令ごとに(【ENTER】を1回押すごとに)代入→計算→表示といった仕事が行われますが、プログラム編集画面に入れられた命令はすぐには実行されません。すべて入れ終わって「実行」という指示を出すまでは仕事の手順が記憶されるだけです(当カテゴリーではこれをプログラムモードとよぶことにします)。
次は変数Hに高さの値6を代入しました。では H=6 と入れて【ENTER】を押してください。全く新規でプログラムを入れる場合は1行ごとに【ENTER】を押さないと次の行に改行しません。以下同様に、面積を計算して変数Sに代入、結果を表示するところまで入れてください(図3-3)。
入れている途中で前に入れた行に間違いがあったりして修正したいときは、直したい箇所にカーソルをもっていって修正できます(Windowsのメモ帳やワープロソフトなどと同じです)

図3-3.プログラムをすべて入れ終わったところ
最後に、ENDという一行がありますが、これは「プログラム実行終わり」という指示です。このプログラムのように実行される最後の命令が最後の行(図3_3の例なら PRINT S)である場合は、この END はなくても差支えないのですが、後の章で出てくるサブルーチンなどを使うときは、これがないとちょっと困ったことになります。ここで実行終わりという箇所には必要なくても必ず END を書くように習慣づけておいた方がいいでしょう.
[プログラムの保存]
これでプログラムは入れ終わりました。よし、実行しよう!ちょっと待ったあ~!(なんだよ)作成したプログラムは必ず保存してから実行しましょう。どうしてかというと、もし作ったプログラムにミスがあって、コンピュータが暴走(ブワンブワンとエンジン音をたててコンピュータが走り出すわけではなく、誤動作でキーやマウスの入力を受け付けなくなること)してしまったら、強制的にシャットダウンするか少々乱暴ですが電源コードを引き抜くしか方法がなくなります。そうなると今作っていたプログラムはすべて消えてしまいます(最近のノートパソコンは強制シャットダウンしても今やっていた作業を保存してから電源が落ちるようになっているようですが、すべてのパソコンがそうなっているという保証はありません)。このサンプル程度の短いプログラムならもう一度作り直せばいいのですが、これがもし研究や仕事で使う500行にもおよぶ長いプログラムだったら・・・もう空を見上げて泣くしかありません。というわけで作ったプログラムは必ず保存してから実行、これは初心者のうちに習慣づけてください。

図3-4.プログラムの保存
保存の方法はWordやExcelを使っている方にはおなじみの方法です(図3-4)。編集画面左上の「プログラム」をクリックします。表示されたメニューから「名前をつけて保存」を選んでクリックします。すると図3-5のようになります。ここで上部の「保存する場所」は【第0章】でやったTBasic.exeを保存した場所と同じになっていると思います。当カテゴリーの実習ではこのままでいきます。別の場所にしたい方は変更してください。プログラム名はUntitled(タイトルなし)という名前になっています。このままでもいいという方はそのままにしておいてください。ふつうはもう少しプログラムの内容がわかる名前にするので、ここではex1(exsample1の意)としていますが、これでなくても何でもかまいません(ただしお使いのパソコンのOSの制約を受けます)。日本語(全角文字)を含んでもOKです(練習_1など)。 .tbtの部分は拡張子といい、変更・削除しても差支えないのですが、保存したプログラムを再利用するときに面倒なのでこのままにしておいた方がいいでしょう。

図3-5.名前を付けて保存
[プログラムの実行]
プログラムの保存が完了したので、今作ったプログラムを実行(コンピュータに何かをさせることをコンピュータ屋さんはこのようにいいます)してみましょう。実行の方法はいくつかあるのですが、最も簡単なのは編集画面の上の方にある「即実行」です。これをクリックすると、実行画面に計算結果が表示されます(図3-6)。即実行をクリックした後はまったく手を触れずに計算結果の表示まで来ました。これがプログラムによる自動計算です。

図3-6.プログラムの実行
【Tiny BASICの文法(1)】ステートメント
ところで、前にもお話ししたとおり、これはTiny BASICというプログラミング言語を用いてのプログラムなわけですが、「言語」というくらいですから、それぞれのプログラミング言語には文法があります。これから少しずつ覚えていってください。文法といってもやれ三人称単数現在だ、関係代名詞だ、現在完了形だというわけではありませんのでご安心を。筆者に言わせてもらえればプログラミング言語の文法とは、文法というより書き方です。ここまでで説明してきた算術演算子や代入演算子、変数の使い方などもTiny BASICの文法です。
プログラムの一文をステートメント(または「文」)といいます。ステートメントは多くの場合、
命令語(指示語) オペランド(命令の内容)
です。たとえば print 3 + 5 は「3 + 5の計算結果を表示せよ」という命令になりますが、プログラミング言語では「表示せよ、 3 + 5 の計算結果を」と書くことになります。日本語ではなく英文法に使いものがあります。
[昔はよかったなぁ]
当カテゴリーは1980年代頃、当時のパソコンでプログラミングをやっていた方に、あの頃のBASICとTiny Basic for Windowsがどのように違っているのかをお話することも目的としています。[昔はよかったなぁ]では本章中のサンプルプログラムを当時のBASIC(以下、昔のBASICといいます)で書くとどうなるかを示しながら、その違いをお話します。お若い方でも、昔のBASICがどういうものかを知りたいという方は、ぜひ読んでみてください。

図3-7.図3-3のプログラムを昔のBASICで書くと
この章でやった三角形の面積を求めるプログラムを昔のBASICで書くと図3-7のようになります。昔のBASICでは、プログラム中のステートメントには実行の順番を支持する行番号が必要でした。今のTiny Basicでは必要なくなりましたが、昔のBASICと同じように付けることもできます(図3-8)。そして編集画面と実行画面の区別はなかったので、作ったプログラムの保存(SAVE)や実行(RUN)もプログラムを作成する画面からできました。ですからプログラム作成ツールとしては昔のBASICの方が取り扱いは楽なことは楽でした。ただ、プログラム作成・編集中にマウスが使えないなど、今のパソコンに慣れてしまうと「不便だなぁ」と感じる点も多々ありました。

図3_8.Tiny Basicで昔のBASIC風に書くと
昔のBASICは今のWindowsパソコンには標準搭載されていません。でも「わしゃ、やっぱり昔がよかった」(実は筆者もそうだったりします)という方、「親父たちが歩いた道を辿ってみたい」というお若い方、ULprojectさんのサイト(下記リンク)から昔のBASICをダウンロード・インストールできます(Windowsパソコン用です。Macパソコン、スマフォ、タブレットでは使用できません)。
N88-BASIC互換?VL,NL,XL,-BASIC for Windows(10など)
http://nlbasic.amebaownd.com/
[この章のまとめ]
コンピュータのプログラムとは処理の手順である
作ったプログラムは実行する前に必ず保存する
プログラムの1行をステートメントという
ステートメトは多くの場合、命令語(指示語)+オペランド(命令の内容)である
【演習1】粗利益を計算し画面に表示するプログラムを作りなさい。粗利益とは売上単価×売上個数-仕入れ単価×売上個数のことです。たとえば1個150円で仕入れた品を1個200円で10個売れば、粗利益は500円になります。仕入単価、売上単価、売上個数、粗利益はすべて変数を用いること。
※当カテゴリーは2022年3月まで筆者が勤務していた富山大学の教養科目「コンピュータの話」でも使用しました。【演習】はその授業での課題です。受講生は理系・文系問いませんでしたので難易度は易しめにしてあります。もっと実用的なプログラムにしてみようと思われる方はぜひチャレンジしてみてください。
