プログラミング入門 情報科学演習 宿題 2013.12.16

Back


二項分布となる確率事象の演習です.10枚のコインを投げて表と裏のコインの枚数を数えることをシミュレートするプログラムを作製します.10000回繰り返したときに,コインの表の数ごとの出現頻度を数えて表示し,その頻度を模式的に棒グラフで表すようにしましょう.

My student number: s134099

  0    1    2    3    4    5    6    7    8    9   10
   4  104  461 1163 2119 2380 2010 1195  453  103    8

 0: *
 1: ***
 2: **********
 3: ************************
 4: *******************************************
 5: ************************************************
 6: *****************************************
 7: ************************
 8: **********
 9: ***
10: *

----------------------------------

棒グラフは上の例では出現頻度を整数型演算で50で割ったものとなっています.ただし,ゼロ回でもそれがゼロであることが分かるように*を表示するようにしています.

時間があれば何回くらい繰り返すと左右対称の二項分布になるか試してみましょう.

解答例

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

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

main()
{
	srand((unsigned) time(NULL));
	
	int i, j, count, face, coin[11];
	
	printf("My student number: s134099\n\n");
	
	for(i=0; i<=10; i++)
		coin[i] = 0;
		
	for(i=1; i<=10000; i++){
		count = 0;
		
		for(j=1; j<=10; j++){
			face = rand() % 2;
			
			if(face==1)
				count++;
		}
		
		coin[count]++;
	}
	
	for(i=0; i<=10; i++)
		printf("%3d  ", i);
	
	printf("\n");
	
	for(i=0; i<=10; i++)
		printf("%4d ", coin[i]);
	
	printf("\n\n");
	
	for(i=0; i<=10; i++){
		printf("%2d: ", i);
		
		for(j=0; j<=coin[i]/50; j++)
			printf("*");
		
		printf("\n");
	}
	
	printf("\n----------------------------------\n\n");
	
	return(0);
}


Back