私のプログラムには次の変数宣言があります。
X="MAGENTA"
Y="CYAN"
Z="TAN"
A="KHAKI"
今私が欲しいのは、これらの1つとそれをランダムに選択するPRINT
ことです。しかし、これを行う方法は?
私のBASICはかなり錆びていますが、次のようなものを使用できるはずです。
10 X$ = "MAGENTA"
20 Y$ = "CYAN"
30 Z$ = "TAN"
40 A$ = "KHAKI"
50 N = INT(RND(1) * 4)
60 IF N = 0 THEN PRINT X$
70 IF N = 1 THEN PRINT Y$
80 IF N = 2 THEN PRINT Z$
90 IF N = 3 THEN PRINT A$
または、コードを再利用するためにサブルーチンに入れます。
10 X$ = "MAGENTA"
20 Y$ = "CYAN"
30 Z$ = "TAN"
40 A$ = "KHAKI"
50 GOSUB 1000
60 PRINT RC$
70 END
1000 TV = INT(RND(1) * 4)
1010 IF TV = 0 THEN RC$ = X$
1020 IF TV = 1 THEN RC$ = Y$
1030 IF TV = 2 THEN RC$ = Z$
1040 IF TV = 3 THEN RC$ = A$
1050 RETURN
もちろん、おそらくそのようなことには配列を使用する必要があるので、次のように使用できます。
10 DIM A$(3)
10 A$(0) = "MAGENTA"
20 A$(1) = "CYAN"
30 A$(2) = "TAN"
40 A$(3) = "KHAKI"
50 PRINT A$(INT(RND(1)*4))
上記の答えは正しく、包括的です。
一方、この答えはそうではありませんが、私は先月、Commodore BASICを少しやっていて、文字列のインデックス作成が役立つ場合があると判断しました。そのため、問題を再構成するような答えはありません。
100 X$ = "MAGENTACYAN TAN KHAKI "
110 PRINT MID$(X$,INT(RND(1)*4)*7, 7)
このコードは、0から3までのランダムなintを取得し、それを使用して、開始インデックスを検索し、4つのエントリすべてを含む単一の文字列を検索します。各エントリは(必要に応じて)7文字に埋め込まれます。MID $の最後のパラメーターは抽出される部分文字列の長さであるため、このパディングが必要です。
なぜBOTHER?
配列のインデックス作成を検討する場合:
(1) when your string data is near-uniform length, and
(2) when you have a LOT of little strings.
これらの2つの条件が当てはまる場合、データを含む完全なコードはよりコンパクトになり、より少ないポインターを割り当てるため、より少ないメモリーを使用します。
PSボーナスポイントは、私が1つずつエラーを犯したことに気付いた場合です。
これを行う別の方法は、出力に1つの変数を使用し、[1..4]の範囲の乱数に基づいてON..GOSUBを設定することです。
10 ON INT(RND(1)*4+1) GOSUB 100,110,120,130
20 PRINT A$
30 END
100 A$ = "MAGENTA":RETURN
110 A$ = "CYAN":RETURN
120 A$ = "TAN":RETURN
130 A$ = "KHAKI":RETURN