棒グラフについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yozakaru
記事: 14
登録日時: 11年前

棒グラフについて

#1

投稿記事 by yozakaru » 11年前

また行き詰まったので助言をお願いします。
今回は賽の和についてです。
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;
	}
}
それと表記を「和 --> 棒グラフ 回数」にしたいのですがどうしても棒グラフが最初に表示されてしまいます。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 棒グラフについて

#2

投稿記事 by みけCAT » 11年前

端数はresult%5で求められます。
表記については、

コード:

printf("%d --> ",sum);
/* 棒グラフの表示のプログラムをここに入れる */
printf(" %d回\n",result);
でいいはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

yozakaru
記事: 14
登録日時: 11年前

Re: 棒グラフについて

#3

投稿記事 by yozakaru » 11年前

みけCATさんありがとうございます。
表記と棒グラフはできましたが*を10個超えたら改行したいのですがその場合はどうすればいいでしょうか?
if文で改行の設定って出来ますか?

Priest
記事: 123
登録日時: 11年前
住所: 愛知

Re: 棒グラフについて

#4

投稿記事 by Priest » 11年前

printf("\n"); で改行だけできますよ!
if文で適切なタイミングで呼び出してあげてください。

コード:

#include <Priest.h>
int MyPolicy ( void ) { printf( "何事も楽しくね!" ); return 0; }

box
記事: 2002
登録日時: 13年前

Re: 棒グラフについて

#5

投稿記事 by box » 11年前

yozakaru さんが書きました:

コード:

			if(==1)printf("|");
			if(==2)printf("||");
			if(==3)printf("|||");
			if(==4)printf("||||");
このコードは、本当に途中までは動いているコードですか?
if文の文法がめちゃくちゃなんですけど。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

超絶右留斗羅天才プログラマー
記事: 44
登録日時: 11年前

Re: 棒グラフについて

#6

投稿記事 by 超絶右留斗羅天才プログラマー » 11年前

サンプルプログラムを組んでみました。
もしよろしければ参考にしてください(^^♪

コード:

#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;
}
最後に編集したユーザー 超絶右留斗羅天才プログラマー on 2013年6月10日(月) 00:26 [ 編集 2 回目 ]
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

yozakaru
記事: 14
登録日時: 11年前

Re: 棒グラフについて

#7

投稿記事 by yozakaru » 11年前

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

yozakaru
記事: 14
登録日時: 11年前

Re: 棒グラフについて

#8

投稿記事 by yozakaru » 11年前

遅くなりましたが一応解決しましたのでコードを載せます。

コード:

#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);
	}
}
書き込みくれた皆さん、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る