我が青春のコンピュータ


20 プログラムの学習法2

10:INPUT "A=",A
20:INPUT "N=",N
30:LET B=A
40:FOR I=1 TO N-1
50:B=B*B
60:NEXT I
70:LPRINT A;"^";N;"=";B

「どうやらこのプログラムは正しいらしい。 ではこの50行目は一体全体何なんだ...? 何を意味しているんだろうか?」

他にも何回か計算を試みたが、プログラムは何れも正しい答えを吐き出してきた。

「そう言えば、”理解に苦しんだときは気分転換してみたらいいことがあるかもしれない” と測量学の先生が仰ってたな...ちょっと気分転換しよっ!」

ヨシオは気分転換を兼ねて今夜の夕食の買出しに出かけることにした。


当時、コンビニエンスストアはこの街には無い。イコール、お惣菜など売っていない。  経済的に余裕があるものは喫茶店の定食などで済ませていたが、大抵の学生はは自炊であった。  ヨシオの場合、下宿の近所に農協の産物販売所や雑貨屋があり、 そこで野菜や干物・インスタント食品などを購入していた。  ちなみに学生食堂の平均的な定食の値段は180円であったと記憶している。  さらに付け加えれば、大学の入学金が80,000円。 授業料は半年で90,000円であった。


9月とは言え、周辺の空気にはまだ夏の余韻が残っている。 半袖でも十分に快適な夕暮れ時だ。

付近の用水路にはびこるウシガエルの大合唱をBGMにして、 自転車の買い物籠にウインナーソーセージと半玉のキャベツが入った紙袋を詰め込んでの 短時間のサイクリングは、ヨシオにとってはそれなりの気分転換になっていた。


再び机に戻ったヨシオは、新たな気持ちでプログラムを見直してみた。  もう一度10行目から、順々に声を出しながら読んでみることにした。

40行目を読み終えて50行目を読もうとした時、ヨシオははっと気がついた。

50行目にはコマンドが無い!!

ヨシオはこれまでBASICというものは各行の先頭部分で 「行番号:コマンド」という書き方(書式)で統一されていることを暗黙のうちに認識していたのだが、 そのルールが50行目では成立していない。

「コマンドが無い行ということはどういうことだ?  しかも50行目はFOR~NEXTコマンドによってN-1回繰り返されている。  それでは、その繰り返しの過程を何とか確認することが出来ないだろうか...」

マニュアルに印刷されたプログラムを睨みながら、しばし黙考である... そして、次の瞬間。 解決の糸口は突然到来した。

「そうだっ!ここを変えれば経過がわかるかも知れない!!」

ヨシオは大急ぎでプログラムを以下のように修正した。

ヨシオが修正したプログラム

10:INPUT "A=",A
20:INPUT "N=",N
30:LET B=A
40:FOR I=1 TO N-1
50:B=B*B
60:LPRINT A;"^";N;"=";B
70:NEXT I

修正内容としては、60行目と70行目を入れ替えただけである。  しかしこの修正によって、これまで繰り返し処理を行った後に計算結果を印刷するだけだったのを、 繰り返しの都度計算結果を印刷するようにできるはずだ。

プログラム超初心者のヨシオが興奮するのも無理はない。  今やった作業は、おそらくどこかのエライ学者先生か プロの技術者がPC-1211用に書き下ろしたプログラムに修正を加えるということである。

ヨシオはプログラムを実行し、A=2そしてN=4と一番最初に試した値を入力してENTERキーを叩いた。

果たして、プログラムは次の結果を吐き出してきた。

2^2=4
2^3=8
2^4=16

(うわぁ~!ちゃんと動いたぁ~!) 頭では解っていたことでも、実際に動かして見るまでは不安でたまらない。  しかしそれが正しく動作した時、その不安は喜びに一変するものだが、このときのヨシオにしてみれば、 オッカナビックリの離れ業を ”まぐれ” で成功させたような心境だった。

30行目で変数Bには変数Aに入力した値(2)が代入されている。  そしてプログラムは40行目から60行目を3回繰り返されている(N=4でN-1回だから3)。  そして変数Bで表される計算結果は正しく2倍ずつ増加した値を印刷している。  ということは、変数Bの値は繰り返しの度に2倍されている事を意味している。

「ということは、LETコマンドと同じことなんだろうか?」

ヨシオは測量学の授業で、「変数に数値や数式に計算結果(これらを”値”と言う) するためにはLETコマンドを使う」と習っていた。(上記のプログラムでは30行目に相当する)

「別な言い方をすれば、コマンドを書かなければLETコマンドと同じことをすると言う事か?」

ヨシオはPC-1211のマニュアルを開き、LETコマンドの記述をもう一度読み直してみた。

「あったー! なぁんだ! そういうことか!!」

マニュアルのLETコマンドの項目は以下のように記述されていた。

LET コマンド

機 能:数値・文字列・計算式の結果を変数に代入します。

書 式:LET 代入先変数名 = 数値
    LET 代入先変数名 = 文字列
    LET 代入先変数名 = 計算式

使用例:LET A = 3.1413
    LET B = "SHARP"
    LET C = √(A*A+B+B)

※LETコマンドは省略することができます。

この記述の中で問題なのが、 「※LETコマンドは省略することができます。」 という一番下の行の記述である。  実にそっけない書き方で書かれていて、その意味する所が良く解らない。  LETコマンドの何を省略できるのかがイメージできないのだ。  おまけに文字サイズが一回り小さい。

これでは初心者には理解し様がないではないか!

そこで、同じLETコマンドについて、「やさしく解るBASIC入門」でも調べてみると、 こちらの方はLETコマンドの省略につては普通サイズの文字でしっかりと説明されていた。  しかも、LETコマンドを使用した場合と省略した場合のプログラム例も同じページの中にしっかりと掲載されていたのである。