• ベストアンサー

IF文 教えてください (BASIC)

1, 2, 3, 4 のいずれかの値を取る3つの乱数 x, y, z を同じ行に表示させ,さらに x=y=z=1 のときは「大当」, x=y=z≠1 のときは「当」, x, y, z のうち2つだけが一致したときは「惜」, 上記以外の場合は「残念」 と表示するプログラム ELSEIF文を用い,IF文およびEND IF文は1回で済ませる。 乱数x,y,zを表示することと IF文が分かりません。 RANDOMIZE FOR n=1 TO 3       PRINT INT (RND*4)+1; NEXT n

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> PRINT INT (RND*4)+1; こうしてRNDを直接表示してしまったら、後から計算に使ったりはできません (次にRNDを使ったら、新しい乱数が使われるので) 変数や配列に保存しましょう。 > ELSEIF文を用い,IF文およびEND IF文は1回で済ませる。 構造は簡単です。 問題中に日本語で書いてある条件を、プログラミング言語に翻訳するだけです。 もし x=y=z=1 のときは   「大当」と表示, そうではなく、もし x=y=z≠1 のときは   「当」と表示, そうではなく、もし x, y, z のうち2つだけが一致したときは   「惜」と表示, そうではなかったら   「残念」 と表示 少し難しいのは、条件の書き方です。 数学と違って、 「x=y=z=1」とは書けません、「A=B」「A<>B」といった「2つの値の比較」しかできません。 なので、 元の式を 「2つの値の比較」 と「『かつ』『または』『ではない』」といった論理演算との組み合わせで表現します。 例えば 「x=y=z=1」 は x=y かつ y=z かつ z=1 です。 「x, y, z のうち2つだけが一致」 は 「xとyが一致で zとは一致しない」または「yとzが一致で xとは一致しない」または「zとxが一致で yとは一致しない」 となります。 これをそのまま書けば、とりあえずはできます。 ここで、IF~ELSEIF~ELSE~END IF の性質を応用します。 このIF~ELSEIFには「上から順番に評価して、最初に条件が一致したものが実行される」という性質があります。 x=y=z≠1 の判定をしている、ということは、上の「 x=y=z=1」ではない、ということです。 このELSEIF で、 x=y=z の判定だけをします。 本来なら、x=y=zの時は x=y=z=1 x=y=z≠1 の2通りの可能性がありますが、=1の場合は、上のIFで一致するので、このELSEIFは実行されません。 つまり「x=y=z」だけ判定すれば、必ず「x=y=z≠1」になっている、ということです。 同様に、それまでの条件を考えれば「二つだけ一致」も判定を省略できます。

rider88
質問者

お礼

丁寧な解説、ありがとうございました。

関連するQ&A

専門家に質問してみよう