• ベストアンサー

ランダムなメッセージを出力して…

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日は カレーは出ないように)、このような機能を追加するにはどうしたら 良いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

まぁ、一日毎に入力するのであれば、 入力したデータをファイルに書き、 翌日それを読み込んで、「同じメッセージだったらもう一回ランダム」のようにするのでしょう。 そうではなく、例えば昨日の入力データを再入力させるので良ければ、「同じメッセージだったらもう一回ランダム」でいけますね。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

回を重ねるにつれて、選ばれる対象が減っていっても良いなら、配列の後部(インデックスの大きい配列部分)に 選択されたものは持って行き、Int(Rnd(1) * 5) + 1 の5を次回は4にして、ハイなインデックスは乱数に出ないようにして、乱数発生を実行させてはどうでしょう。 ただ前回の結果(状態)を次ぎに伝えるには、ソースコード上では無理で、外部ファイルにUBOUNDと配列全体を保存し、次回開始に当たってファイルから、配列データ読み込む必要があるでしょう。

回答No.2

色々方法はありそうですが… たとえば R_Gohanを二次元配列にして後ろ側を0or1とかのフラグ変わりにする とか 乱数を発生させるとこでloopさせて過去に入力されていないものまで繰り返す とか。

関連するQ&A