プロが教えるわが家の防犯対策術!

プログラミングの質問です。

0〜1の一様乱数を100個生成して、その各値を縦のヒストグラム表示するソースコードを書きたいのですが。

乱数を生成して配列d保存はできました。
次にある関数でヒストグラムを作るために、2次元配列hに*を上手く代入して、

最後の関数でh行列を活用してヒストグラムを生成したいです。

どなたか詳しksた、アドバイスなどを頂けると嬉しいです

「プログラミングの質問です。 0〜1の一様」の質問画像
教えて!goo グレード

A 回答 (6件)

たぶん「2次元配列」はバッキングストア用で, そこから BitBlt しろってことなんじゃないかと妄想してみる.

    • good
    • 0

あー、あと。



どういうロジックで二次元配列が必要なんだか全然分かんないから勘で言うけど、多分行列のtransposeやれ、ってのが問題の根幹なのかな?
Wikipediaで行列のtransposeの定義見て、それ使ってみるのが面倒がないかも。
分かんないけどね。

転置行列:
https://ja.wikipedia.org/wiki/%E8%BB%A2%E7%BD%AE …
    • good
    • 0

> 二次元配列で作るのが決まりなので。


> 質問はもう一度やり直します。

ああそう。
問題文は正確に、ね。
    • good
    • 0

ちなみに、縦のヒストグラム出力するだけ、だったら別に二次元配列の出番ってねぇんだよな。


例えば0〜9の一様乱数を100回発生させて、配列d[10]に記録する、とする。
縦のヒストグラムを作るには次のように書くだけで基本的にはいい。

/* ここから */

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

int main(void) {
 int d[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 for (int i = 0; i < 100; i++) {
  d[rand()%10] += 1;
 }
 int max = 0;
 for (int i = 0; i < 10; i++) {
  if (d[i] > max) {
   max = d[i];
  }
 }
 puts("Histogram");
 for (int i = max; i > 0; i--) {
  printf(" %2d | ", i);
  for (int j = 0; j < 10; j++) {
   if (d[j] >= i) {
    printf(" * ");
   } else {
    printf(" ");
   }
  }
  printf("\n");
 }
 puts("-------------------------------------");
 puts(" | 0 1 2 3 4 5 6 7 8 9 ");
 return EXIT_SUCCESS;
}

/* ここまで */

要は厄介なのが、ヒストグラムの度数の内、どれが最大値か分かってなければならない、ってトコなんだけど、そこさえ分かればそ単純にprintfで出力は可能なの。
どういう理屈で二次元配列が必要だ、ってなってんのか、要するにその辺も問題キチンと見なきゃサッパリ分からんのよね。
    • good
    • 0
この回答へのお礼

二次元配列で作るのが決まりなので。。
質問はもう一度やり直します。。

お礼日時:2021/06/03 14:58

あと、問題も不正確。



> 0〜1の一様乱数を100個生成して

字面通り受け取ると、0~1の一様乱数って0と1の二個しか出ないんじゃない?
仮に小数点で算出するとして、区分けはどうすんの?
問題がかなり不正確です。
    • good
    • 0

まずよ。

スマホでモニタの写真撮んな。
写り込んでるぞ。
あと見づらい。
まずパソコンの使い方覚えなさい。

Windows 10 スクリーンショットを撮る4つの方法:
https://www.pc-koubou.jp/magazine/35994
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

教えて!goo グレード

人気Q&Aランキング