本日の課題
2010.06.07

Back


本日の演習問題の2では,トランプのカードは1枚でした.札の山から2枚トラン プを選ぶことをシミュレートするプログラムに変えてみましょう.注意すること は,トランプには同じカードは2枚無いということです.表示は次のようになり ます.

First card is 6 of Hearts.
Second card is A of Diamonds.

ヒント

同じカードになったらやり直す処理を用意すれば良いのですが,確率的には2回 やり直せばほぼ違うものが出るとおもいますので,カードの引き直しは2回まで とし,それでも万が一同じものが出たら,以下のように表示して終わるようにしましょ う.(私のチェックでは30回やってもアンラッキーになることはありませんでし た.)

参考までに書いておくと,演習問題2の解答例は46行でしたが,この宿題に関し ては,私が作成した解答例は96行のプログラムになりました.結構長くなります ね.

It's so unlucky today!

解答用紙


解答例

/* ************************************************** */
/*                                                    */
/*      情報科学演習 C6 C7                            */
/*      レポート課題                                  */
/*      2010.6.7                                      */
/*                                                    */
/* ************************************************** */
/*                                                    */
/*      学生番号:                                    */
/*                                                    */
/*      氏名:                                        */
/*                                                    */
/* ************************************************** */
/*                                                    */
/*      この行以降に解答のプログラムを書くこと        */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
	srand((unsigned) time(NULL));
	
	int suit_n1, num1 ,suit_n2, num2;
	char *suit_c1, *num_s1, *suit_c2, *num_s2;
	
	suit_n1 = rand() % 4;
	num1 = rand() % 13 + 1;
	
	suit_n2 = rand() % 4;
	num2 = rand() % 13 + 1;
	
	if(suit_n1 == suit_n2 && num1 == num2){
		suit_n2 = rand() % 4;
		num2 = rand() % 13 + 1;
		
		if(suit_n1 == suit_n2 && num1 == num2){
			suit_n2 = rand() % 4;
			num2 = rand() % 13 + 1;
			}
		}
		
	if(suit_n1 == suit_n2 && num1 == num2)
		printf("It's so unlucky today!\n");
	else
		{
			switch(suit_n1){
				case 0:	suit_c1 = "Spades";
							break;
				case 1:	suit_c1 = "Hearts";
							break;
				case 2:	suit_c1 = "Diamonds";
							break;
				default:	suit_c1 = "Clubs";
							break;
				}

			if(num1 == 1 || num1 >= 11){
				switch(num1){
					case 1:	num_s1 = "A";
								break;
					case 11:	num_s1 = "J";
								break;
					case 12:	num_s1 = "Q";
								break;
					case 13:	num_s1 = "K";
								break;
					}
			
				printf("First card is %s of %s.\n", num_s1, suit_c1);
		
				}

			else
				printf("First card is %d of %s.\n", num1, suit_c1);
			
			
			switch(suit_n2){
				case 0:	suit_c2 = "Spades";
							break;
				case 1:	suit_c2 = "Hearts";
							break;
				case 2:	suit_c2 = "Diamonds";
							break;
				default:	suit_c2 = "Clubs";
							break;
				}

			if(num2 == 1 || num2 >= 11){
				switch(num2){
					case 1:	num_s2 = "A";
								break;
					case 11:	num_s2 = "J";
								break;
					case 12:	num_s2 = "Q";
								break;
					case 13:	num_s2 = "K";
								break;
					}
			
				printf("Second card is %s of %s.\n", num_s2, suit_c2);
		
				}

			else
				printf("Second card is %d of %s.\n", num2, suit_c2);
			}

	return(0);
	
}


戻る