[ 小さいプログラムから その3 ]

※途中で戻りたい場合は、ブラウザの「戻る」機能を使ってください。

INT関数とFIX関数

今まで整数を得るためには、INT関数を使ってきましたが、「小数点を切り捨ている」という意味では、FIX関数を使うと知りました。

まとめてみると、

INT関数:数値を超えない最大の整数を得る

FIX関数:小数点以下を切り捨てる

ということになります。

この場合は、RND関数が負の数を出さないから結果は同じなのですが、負の数を扱う場合は答えが違ってきます。

細かく言えばキリが無いとも思えますが、正しく使う意味もありますので、ここからはFIX関数を使っていきたいと思います(おかしなバグに悩まされることにもなりかねません)。

実際に書き換えて見ましょう。

今までは、INT関数でRND関数の答えを整数値化してきましたが、
FIX関数に書き換えてみました。

上下の式の結果は同じですが、意味合いが違ってくるだけです。

でも、正しく使うことは大切です。

結果を1から5までの数字にする

変数Aに入っている答えは、この場合だと0から9の数字です。

それを1から5までの数字に限定するにはどうしたら良いのかを考えてみます。

「変数Aの内容が0、6、7、8、9ならば、もう一度やり直す」ことを繰り返せば、良いと思います。

もう一度やり直すとは、その命令の行番号に戻れば命令を実行されます。

ひっぱりましたが、その命令はGOTO(ゴーツー)命令です(後藤ではありません)。

GOTO 行番号

で、指定した行番号に飛びます(とんだ先から順番に実行し、戻っては来ません)。

また、「変数Aが0、6、7、8、9ならば」という条件式は、IF命令を使います。

IF 条件式 THEN 条件式にあった命令 ELSE 条件式にあわなかった命令

となります。

読み方は、IF THEN ELSE(イフ ゼン エルス)です。

この場合だと、

IF Aが0か6か7か8か9だったら THEN 乱数をAに代入する命令の行番号へ飛べ
(でなければ続けて実行なので、ELSEは不要)

「THEN 乱数をAに代入する命令の行番号へ飛べ」は、

THEN GOTO 10

となります。

では、「IF Aが0か6か7か8か9だったら」はどうでしょう。

この「Aが0か6か7か8か9だったらを」もう少し解析してみると、「A=0 または A>5」と表せます。

比較演算子はそのまま使えます。

意味 BASIC命令
AとBは等しい A=B
AとBは等しくない A<>B
AはBより小さい A<B
AはBより大きい A>B
AはBより小さいか等しい A<=B
AはBより大きいか等しい A>=B

そして、「または」という意味は、ORで表せます。

条件判断は以下の式が使えます。

意味 BASIC命令
AかつB A AND B
AまたはB A OR B
Aではない NOT A

読み方もそのまま、アンド、オア、ノットです。

ですから「A=0 または A>5」は、

A=0 OR A>5

と表せますから、IF文を使って「変数Aの内容が0、6、7、8、9ならば、もう一度やり直す」をあらわすと、

IF A=0 OR A>5 THEN GOTO 10

となります(と思います)。

自信が無いので、実際に命令文にしてみました。

行番号10と20の間にIF文の命令を入れたいので、その間の数字をとって15番にして入力。

あとで、RENUM命令を使って行番号を整えておきましょう。
LIST命令で確認してみると、きちんと10刻みで並んでいるのがわかります。

ここで、答えを出すのにいちいちRUNと打ち込んでみるのも面倒なので、40番に最初に戻るようにGOTO命令を付け足してみました。
実行してみると、次々と1から5までの数字が出てくるのが、確認できました。

これで、ある条件に合った乱数を得ることが出来たと思います。

リストを見てもわかるとおり、無限ループになっているためにコントロールキー+ストップキーを押して中断させてください。

私はblueMSXを使っていますので、Ctrl+Fn+Pageupです(初めの頃、これがわからなくてリセットボタンを押して止めてしまう経験がありました)。

これで、1番の処理「コンピュータ側で無作為に1から5までの数字の中から一つを選んでおく」事が出来ました。

次の章からは、2番の処理「プレイヤーが選んだ1から5までの数字を一つ入力させる」にチャレンジしてみます。

 

Copyright(C) 2006. ピコピコテクノロジー All Right Reserved.