- ベストアンサー
ランダムなメッセージを出力して…
Private Sub Command1_Click() Dim i, R_Gohan(10) Call Randomize R_Gohan(1) = "カレー" R_Gohan(2) = "うどん" R_Gohan(3) = "ラーメン" R_Gohan(4) = "チャーハン" R_Gohan(5) = "オムライス" i = Int(Rnd(1) * 5) + 1 MsgBox ("今日のご飯は" + R_Gohan(i) + "です") End Sub 上記のように、ランダムなメッセージを出力するプログラムを VB5.0環境にて作成しています。 これを、昨日の入力データがあった場合、それを選択肢から除外 するようにしたいのですが(10日にカレーだったら、11日は カレーは出ないように)、このような機能を追加するにはどうしたら 良いのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まぁ、一日毎に入力するのであれば、 入力したデータをファイルに書き、 翌日それを読み込んで、「同じメッセージだったらもう一回ランダム」のようにするのでしょう。 そうではなく、例えば昨日の入力データを再入力させるので良ければ、「同じメッセージだったらもう一回ランダム」でいけますね。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
回を重ねるにつれて、選ばれる対象が減っていっても良いなら、配列の後部(インデックスの大きい配列部分)に 選択されたものは持って行き、Int(Rnd(1) * 5) + 1 の5を次回は4にして、ハイなインデックスは乱数に出ないようにして、乱数発生を実行させてはどうでしょう。 ただ前回の結果(状態)を次ぎに伝えるには、ソースコード上では無理で、外部ファイルにUBOUNDと配列全体を保存し、次回開始に当たってファイルから、配列データ読み込む必要があるでしょう。
- CHIPDALE77
- ベストアンサー率21% (47/223)
色々方法はありそうですが… たとえば R_Gohanを二次元配列にして後ろ側を0or1とかのフラグ変わりにする とか 乱数を発生させるとこでloopさせて過去に入力されていないものまで繰り返す とか。