- 締切済み
C言語のプログラミング作成なのですが....
C言語の問題なのですが、大きさ100の配列に1から10の一様乱数を格納しヒストグラムを*を使ってプログラミングするというものなのですがさっぱりわかりません。わかる方どうかよろしくお願いします。
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- titokani
- ベストアンサー率19% (341/1726)
>大きさ100の配列に1から10の一様乱数を格納し とありますから、まず乱数を配列に格納してから、集計は別途行うんでしょう。 なので、配列は2つ必要になりますね。
- maiko0318
- ベストアンサー率21% (1483/6969)
設問では「大きさ100の配列」となっていますので、 大きさ100の配列を使ってくださいね。
#include <stdio.h> #include <time.h> #include <stdlib.h> int main(void) { int cnt[ 10 ]; int i, j; srand( ( unsigned )time( NULL ) ); // Initialize for( i = 0; i < 10; i++ ) { cnt[ i ] = 0; } // Calclate for( i = 0; i < 100; i++ ) { cnt[ rand() % 10 ]++; } // Output for( i = 0; i < 10; i++ ) { printf( "%2d|", i + 1 ); for( j = 0; j < cnt[ i ]; j++ ) { printf( "*" ); } printf( "(%d)\n", cnt[ i ] ); } return 0; }
- maiko0318
- ベストアンサー率21% (1483/6969)
配列の添え字は0からスタートです。 が、使うか使わないかはあなた次第。
- Picosoft
- ベストアンサー率70% (274/391)
#4の方のご回答をすごーく分かりやすく言い換えると、 「配列の添え字は1からスタート」と習ったのですか? ということです。
- Wr5
- ベストアンサー率53% (2173/4061)
>int x[10]={0}; で、使える添え字ってどこからどこまででしたっけ????? >for(r=1;r<11;r++) で、rの値はどこからどこまでの値になりますかね???? >for(j=1;j<x[r];j++) で、x[r]は安全な(保証されている)範囲で済みますか??
- maiko0318
- ベストアンサー率21% (1483/6969)
大きさ100の配列がない。 大きさ100の配列にいったん格納してから集計することになります。
- honor
- ベストアンサー率35% (25/71)
r=rand()%10; 1から10の乱数を作りたいとのことですが、ある数を10で割ったときの余りは0~9です。
- Picosoft
- ベストアンサー率70% (274/391)
質問文を見ても、どこが分からないのかさっぱり分かりません。 (「ヒストグラムを*を使ってプログラミングする」という表現もいまいち意味が分かりません……) ・何がしたいか ・どんなコードを書いたか ・そのコードを実行してどんな結果になったか をはっきり書いてくださいな。
補足
すみません... 自分が作ったのは #include <stdlib.h> #include <stdio.h> #include <time.h> main() { int x[10]={0}; int r,j,n; srand((unsigned)time(NULL)); for(n=1;n<=100;n++) { r=rand()%10; x[r]=x[r]+1; } printf("値|度数\n"); printf("-----------\n"); for(r=1;r<11;r++) { printf("%d|",r); for(j=1;j<x[r];j++) { printf("*"); } printf("\n"); } } 実行結果は 値|度数 ----------- 1|*********** 2|*********** 3|********** 4|********** 5|****** 6|********* 7|******* 8|******** 9|******** 10| になってしまいます。 やりたいことは 値|度数 ----------- 1|************ 2|******** 3|********** 4|*********** 5|********** 6|******** 7|********** 8|************* 9|************ 10|****** です。お願いします。
補足
どのように変えればよいのか具体的にお教えいただければ幸いです。勉強不足ですみません。 少し変えました。 #include <stdlib.h> #include <stdio.h> #include <time.h> main() { int x[100]={0}; int r,j,n; srand((unsigned)time(NULL)); for(n=1;n<=100;n++) { r=rand()%10+1; x[r]=x[r]+1; } printf("値|度数\n"); printf("-----------\n"); for(r=1;r<11;r++) { printf(" %d|",r); for(j=1;j<x[r];j++) { printf("*"); } printf("\n"); } }