C++言語を学んでいるものですがどうしてもこの問題が解けません。
手も足もだせない状態なのでよろしくお願いします。
問題は以下の通りです。
床の上の(0,0)地点にサイコロが置いてあります.
サイコロの対面(互いに平行な面)の目の和は7です.
初期値は,上面が1,北面が2,西面が3です.
(すなわち,床面が6,南面が5,東面が4)
原点から東に1回転がした(1,0)地点では上面は3です.
原点から西に2回転がした(-2,0)地点では上面は6です.
次の試行を,任意の回数,繰り返すプログラムを作成してください
(1)ユーザが,向き(東西南北)を指定する.
(2)ユーザが,回転数(整数)を指定する.
(3)指定した{方向,回転数}に従い,サイコロを転がす.
(4)転がした後の,上面の目の数を表示する.
以下,(1)から繰り返す。
プログラミングの問題
Re: プログラミングの問題
サイコロの上面と北面(または南、東、西のいずれか)の二面の状態を決めると、サイコロの置き方を特定できます。
すなわち、サイコロの状態を二つの変数で管理すれば良いことになります。
後は、一回だけ回転させたときにその二つの変数がどのように変化するかをプログラムします。
例えば 上面1、北面2のとき、東に一回だけ転がすと 上面3、北面2 に変数が更新されます。
という風に、上面X、北面Y、回転方向Zに対応して新しい上面X'、北面Y'を計算するプログラムを書けばいいわけです。
愚直に書くと上面6通り、北面4通り、回転方向4通り=96通りの分岐を書かねばならないので(そんなにelse ifを書きたくないですよね!)、如何に減らせるかが工夫のしどころです。
みけCATさんも仰るように、丸投げは出来ませんので、あなたが書ける所までプログラムを書いて提示してください。
(HelloWorldプログラムは書けますか?while文で無限ループするプログラムは書けますか?ユーザーから入力を受け取るプログラムは書けますか?)
すなわち、サイコロの状態を二つの変数で管理すれば良いことになります。
後は、一回だけ回転させたときにその二つの変数がどのように変化するかをプログラムします。
例えば 上面1、北面2のとき、東に一回だけ転がすと 上面3、北面2 に変数が更新されます。
という風に、上面X、北面Y、回転方向Zに対応して新しい上面X'、北面Y'を計算するプログラムを書けばいいわけです。
愚直に書くと上面6通り、北面4通り、回転方向4通り=96通りの分岐を書かねばならないので(そんなにelse ifを書きたくないですよね!)、如何に減らせるかが工夫のしどころです。
みけCATさんも仰るように、丸投げは出来ませんので、あなたが書ける所までプログラムを書いて提示してください。
(HelloWorldプログラムは書けますか?while文で無限ループするプログラムは書けますか?ユーザーから入力を受け取るプログラムは書けますか?)