ページ 11

棒グラフについて

Posted: 2013年6月09日(日) 21:29
by yozakaru
また行き詰まったので助言をお願いします。
今回は賽の和についてです。
2つの賽の和を200回施行して分布を表示するとこまでは出来たのですがそれを棒グラフ化することができません。
5回ごとに*で端数は|で表示し各10個ずつで改行したいのですが端数の表示がうまくいきません。
以下途中までのプログラムです。

コード:

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

int main()
{
	int i,sum,result,a;
	int d[200];
	result=0;
	printf("5回で*、余りは|\n");
	for(i=0;i<200;i++){
		d[i]=(rand()%6)+(rand()%6)+2;
	}
	for(sum=2;sum<=12;sum++){
		for(i=0;i<200;i++){
			if(d[i]==sum){
				result=result+1;
			}
		}
		printf("%d --> %d回\n",sum,result);
		for(a=0;a<result/5;a++)printf("*");{
			if(==1)printf("|");
			if(==2)printf("||");
			if(==3)printf("|||");
			if(==4)printf("||||");
		}
		result=0;
	}
}
それと表記を「和 --> 棒グラフ 回数」にしたいのですがどうしても棒グラフが最初に表示されてしまいます。

Re: 棒グラフについて

Posted: 2013年6月09日(日) 21:45
by みけCAT
端数はresult%5で求められます。
表記については、

コード:

printf("%d --> ",sum);
/* 棒グラフの表示のプログラムをここに入れる */
printf(" %d回\n",result);
でいいはずです。

Re: 棒グラフについて

Posted: 2013年6月09日(日) 23:27
by yozakaru
みけCATさんありがとうございます。
表記と棒グラフはできましたが*を10個超えたら改行したいのですがその場合はどうすればいいでしょうか?
if文で改行の設定って出来ますか?

Re: 棒グラフについて

Posted: 2013年6月09日(日) 23:30
by Priest
printf("\n"); で改行だけできますよ!
if文で適切なタイミングで呼び出してあげてください。

Re: 棒グラフについて

Posted: 2013年6月09日(日) 23:49
by box
yozakaru さんが書きました:

コード:

			if(==1)printf("|");
			if(==2)printf("||");
			if(==3)printf("|||");
			if(==4)printf("||||");
このコードは、本当に途中までは動いているコードですか?
if文の文法がめちゃくちゃなんですけど。

Re: 棒グラフについて

Posted: 2013年6月10日(月) 00:10
by 超絶右留斗羅天才プログラマー
サンプルプログラムを組んでみました。
もしよろしければ参考にしてください(^^♪

コード:

#include <stdio.h>
#include <stdlib.h>
int main(){
    int h[11] = {0};
    for( int i = 0; i < 200; i++ ){
        h[rand() % 6 + rand() % 6]++;
    }
    for( int i = 0; i < 11; i++){
        printf("%d-->",i+2);
        while( h[i] > 0){
            if( h[i] > 50 ){
                h[i]-=50;
                printf("**********\n");
            }else if( h[i] > 5 ){
                h[i]-=5;
                printf("*");
            }else{
                if( h[i] > 0 ){
                    h[i]--;
                    printf("|");
                }
            }
        }
        printf("\n");
    }
    return 0;
}

Re: 棒グラフについて

Posted: 2013年6月10日(月) 00:20
by yozakaru
>>boxさん
そこのところがうまくいかなかったのでこうゆうふうにやりたいってことを残してたのでプログラムとしては動かない状態でしたが、みけCATさんのおかげで解決しました。
>>超絶右留斗羅天才プログラマーさん
ありがとうございます。参考にさせてもらいます。

Re: 棒グラフについて

Posted: 2013年6月24日(月) 02:51
by yozakaru
遅くなりましたが一応解決しましたのでコードを載せます。

コード:

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

int main()
{
	int i,result;
	int d[11]={0};
	result=0;
	printf("*=10回、|=1回\n");
	for(i=0;i<200;i++){
		d[rand()%6+rand()%6]++;
	}
	for(i=0;i<11;i++){
		int result=d[i];
		printf("%d --> ",i+2);
		while(d[i]>0){
			if(d[i]>=100){
				d[i]-=100;
				printf("**********\n");
			}else if(d[i]>=10){
				d[i]-=10;printf("*");
			}else{
				if(d[i]>=0){
					d[i]--;
					printf("|");
				}
			}
		}
		printf(" %d回\n",result);
	}
}
書き込みくれた皆さん、ありがとうございました。