• ベストアンサー

ヒストグラム作製のためのカウント方法

while文を1回まわると小数点以下2桁の値が得られるのですが(例1.56)、while文を一万回実行させた場合の結果をヒストグラムにしたいと考えています。  同じ値、が出た場合、カウント++でカウントするのかとも考えていますが、コードをどのように書いたらよいかわかりません。 初心者のなので、申し訳ありませんがどなたか教えて頂けませんでしょうか?宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

得られる乱数の範囲は限定されているのでしょうか? たとえば 0以上2以下とか 範囲が限定されていて隣接する2要素の差が分かるならそれからカウンタの配列を決定できますよ 乱数範囲が0以上2未満で 2要素間が0.01ならば 0から199までのカウンターがあればいいことになります したがって最悪の1万カウント出来る型となると 最小の型ならshort int あたりですね // カウンターを用意 short int nCount[200]; int nIndex, n; // カウンタの初期化 for( n=0; n < sizeof(nCount)/sizeof(nCount[0]); n++ ) {   nCount[n] = 0; } for( n=0; n < 100000; n++ ) {  // 乱数発生ロジックは適宜修正してください  dlData = 乱数  nIndex = (int)(dlData * 100);  nCount[nIndex]++; } といった具合かと ...

nika_
質問者

お礼

redfox63さんのおかげで、出来ました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • グループ化したSQL文のカウントについて

    オラクルを初めて2週間の初心者です。 tableA表からE_Codeをグループ化し、E_Codeの1の値が何個あるか、2の値が何個あるかカウントした値を求めたいのですがSQL文がわかりません。GROUP BYやCASE文などネットを見ながら試行錯誤しチャレンジしましたが、エラーとなり求めたい結果が取得できませんでした。 この場合どのようなSQL文を書いたらいいのでしょうか。 --tableA-- E_Code|K_Code 001  |   1 001  |   1 002  |   1 002  |   1 002  |   1 003  |   1 004  |   2 005  |   1 005  |   1 006  |   1 007  |   2 007  |   1 007  |   2 求めたい出力結果↓ ----------------------------- E_Code | 1の個数 | 2の個数 001  | 2    | 002  | 3    | 003  | 1    | 004  |      |1 005  | 2    | 006  | 1    | 007  | 1    |2

  • C言語について質問です。

    C言語について質問です。    問題:繰り返し命令と階乗の計算 カウンタ用変数nの値を1から10まで1ずつ変化させて、その値を階乗用変数Kiに順次、掛け算していき、10の階乗を求めよ。 ki=1×2×3×4×5×6・・・・・×9×10 <==10! また、1/n!は小数点以下10桁まで求めよ。 実行結果は    n                 n!             1/n!    1                 1             1、0000000000    2                 2             0、5000000000    3                 6             0、1666666667    4                24             0、0416666667    5               120             0、0083333333    6               720             0、0013888889    7              5040             0、0001984127    8             40320             0、0000248016    9            362880             0、0000027557   10           3628800             0、0000002756                            続行するには何かキーを押してください、、、、、、 上のように実行結果が出るようにプログラミングしたいのですがわからないので 分かる方よろしくお願いします。 ちなみに今まで習ってきたのは、if文、switch文、do文、while文、for文なんですがこのプログラミングは、for文でおねがいします。 長文失礼しました。

  • 条件にマッチした行数のカウント

    perl 初心者です。 while (<>) { if (/条件/) {    print; } } 複数のファイルの中で、if文の /条件/ で指定した部分にマッチした行数をカウントして変数に入れたいのですが、ここからどうすればいいのかわかりません・・・。 初歩的な質問で申し訳ないのですが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規分布とヒストグラムのグラフの書き方

    エクセルで正規分布とヒストグラムをひとつのグラフとして表そうとしています。過去の質問や他のページを調べた結果、ある程度書き方を理解して、求めるグラフが書けました。 しかし、ヒストグラムのデータ区間を変えたとき、どのように対応すればよいのか分からなくなりました。 具体的に書いていきたいと思います。 正規分布になるとほぼ確信しているデータがあります。 サンプル数は50、平均7.8、標準偏差2.9のデータです。 データ区間 頻度 0       0 1       1 2       1 3       2 4       2 5       5 6       6 7       6 8       6 9       8 10      5 11      2 12      3 13      1 14      2 15      0 というデータです。 そして、データ区間に対応する正規分布の値を NORMDIST(あるデータ区間の値,平均,標準偏差,FALSE) を使用して、求めます。 そして、得られた正規分布の値をそれぞれ、サンプル数(50)倍します。 (ここでサンプル数倍するという作業は、NORMDIST(データ,平均,標準偏差,FALSE)で描かれるグラフの面積は1なので、今書きたいヒストグラムとサイズをあわせる…という理解でよろしいのでしょうか?) 上述の度数分布表から棒グラフ→データ系列の書式設定→オプションで棒の間隔を0にすることでヒストグラムを描きました。(分析ツールを用いても良かったのですが) また、同グラフに新たな系列を増やし、NORMDIST*50によって得られた値を導入し、こちらは、グラフの種類→マーカーの無い線グラフ→データ系列の書式設定→パターン→スムージングを選択することによって、正規分布のグラフを書きます。 以上の作業で、求めていたグラフは書けました。 視覚的に予想通り正規分布のグラフに近いことが分かりました。 さて、ヒストグラムを使用する際によく行われる作業ですが、上述の度数分布表みたいに、データ区間を1刻みにするより、大きくしたほうがデータの性質がより見てとれることがあります。 そのため、ここでも、データ区間を広げ、2刻みにした場合のグラフを描こうと思いました。 度数分布表は以下のようになります。 データ区間 頻度 1       1 3       3 5       7 7       12 9       14 11      7 13      4 15      2 17      0 ここから、前回同様の作業でヒストグラムは容易に描けます。 正規分布のグラフはどのように書けば良いのでしょうか? 前回同様、NORMDIST*50から得られる値を利用しても、ヒストグラムの棒の高さが前回より高いので、全く合いません。 正規分布関数は定数倍しても性質が変わることはないので、実験的に50以外の値を導入してみました。 データ区間が2倍になったから、*50を更に2倍して、*100にしてみようか、という安易な考えのもと、NORMDIST*100を使用したグラフを書いてみました。 すると、ヒストグラムと正規分布の形が視覚的に似て見える、というもっともらしいグラフは得られました。 しかし、安易にNORMDIST*100を導入したことに疑問と不安を覚えます。 このようにして得られてグラフに問題は無いでしょうか。 また、データ区間を変更したとき、NORMDISTを何倍してやると良いなどというのはあるのでしょうか。 数理統計もエクセルも初心者なので、得られたグラフに自信がないのです。 どのように考えればよいのでしょうか。 質問文が非常に長くなってしまい、申し訳無いのですが、わかる方、お教えいただけないでしょうか。 お手数をおかけしますが、よろしくお願いします。

  • ORACLEでの件数カウント方法

    素人なので教えてください。sqlplusでレコード件数をカウントしたいのですが、チョット特殊なカウント方法なのです。やりたいことは、一回のSQL文で複数カラムのレコード件数をカウントしたいのですが可能でしょうか? 例) a_cdの件数カウントの場合は、 select a_cd,count(*) from abc group by a_cd; で b_cdの件数カウントの場合は、 select b_cd,count(*) from abc group by b_cd; これを一回のSQLで、 a_cdとb_cdの件数をカウント出来ますか?

  • ヒストグラムから求める第一四分位数と中央値について

    ヒストグラムから求める第一四分位数と中央値がわかりません。 講義で配られたものの解答の仕方が独特なので理解ができないです。 以下が問題です。 X:11、14、17、20、23、26、29、32、35、38、41、44、47、50、53 F: 2、、1、、2、1、、6、、7、、11、12、12、17、19、、9、、0、0、、1 (数字見づらくて申し訳ございません。左から順に対応しています) X:週辺りの労働時間 F:人数 です。 私は、階級の幅を5に設定してヒストグラムを作りました。 しかし、四分位数は全体の面積が1/4になる点なので25と26番目のデータの平均が 四分位点だと思ったのですが... 答え方が27.5+1.63=29.1という解答でした。 また、中央値は33.5+2=35.5という解答でした。 27.5という値と33.5という値は対象となる階級内の平均なのでは? と考えたのですが...間違ってますか? また、あたっていた場合1.63や2という値はどこから算出できるのでしょうか? 回答よろしくお願いします。

  • VBA小数点以下3桁設定の判定方法を教えてください

    Excel Vbaで小数点以下3桁の設定がされているか判断する方法を教えてください。 小数点以下3桁の設定がされているのか知りたくて、対象セルの NumberFormat の値を「0.000」か「0.000_」で比較してもうまくいかない場合があります。その値が小数点以下ちょうど3桁の有限小数の場合は小数点以下3桁の設定をしても、NumberFormat の値は「General」のままであるのがその理由みたいです(?)。「General」を比較の値に採用しても3桁であるかの情報が得られそうにないと思えるので困っています。小数点以下3桁の有限小数であるかの判定方法を別途用意するしかないのでしょうか。その場合は、簡単で正確な判定方法を教えてください。ちなみに小数は8桁以内の整数と8桁以内の整数の商(割り算)になります。 よろしくお願いします。

  • 数字複数個同士のカウント

    A1からJ1までの10個のセルに各1桁の数字が入っています。 例えば、5142629863のように。 これに対し、 A2からC2までの3個のセルに、これまた各1桁の数字が入っています。 例えば、482のように。 そして、 10個の数字の中に、3個の数字がそれぞれ何個あるかをカウントし、 セルA3からC3にセットしたいのです。 上の例であれば、112のように。 私は482を4から2までそれぞれ10回ループさせてカウントする方法しか思いつきませんが、 いい方法があれば教えてください。

  • 非常に

    C言語の問題集の回答がないので困っているので誰か教えてください。 私はまだ始めたばかりなので手におえません。 今私が理解しているif文、switch文、for文、while文、do-while文、配列、を 使用してでお願いします。 「カプレカの定理」をプログラムを使って考察しなさい. 今回は4桁の場合のプログラムを作成しばさい. プログラムの仕様は以下のものとする. 4桁の入力がなされるまで,do-while文を用いてscanfを繰り返す. int型の配列 digit[4] を用意し,それぞれに1~1000の位を割り当てる. 桁の分割方法は各自考えよ. (例) 3175 digit[0] = 3 digit[1] = 1 digit[2] = 7 digit[3] = 5 配列 digit をバブルソートを用い昇順または降順に並べ,それを基に 最大の4桁と最小の4桁を算出する 実行結果例 Input -> 123 Input -> 12345 Input -> 1234 (*4桁の数が入力されるまで繰り返している。この括弧内は説明なので表示させる必要はない) 4321 - 1234 = 3087 8730 - 378 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174

  • MEDIUMINT属性の数値を、一部変更して置換。

    いつもお世話になっております。 MySQL5テーブル内で、 MEDIUMINT属性フィールド(仮にID_CODEという1箇所のフィールドとして・・・)の、 数値990010、990020、992030が、すでに 登録されているレコード3件に対して、 phpMyAdminなどから、 1回(もしくは出来るだけ少ない回数)のSQL文実行で、 頭2ケタの”99”だけを、”91”という値に変更して、 その後の4桁は、元の値を残したままで、 値を置き換えたいのです。 (期待する更新結果:910010、910020、910030) 上記例は、レコード3件だけでしたが、 実際には数百件ある為、 可能な限り、SQL文を利用して一気にデータ内容を 更新したい状況です。 以上になります。 情報をおもちの方がいらっしゃいましたら、 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
このQ&Aのポイント
  • PCからメール受信はできるが、送信して相手方を確認するがメールは送信されていない。
  • PCでは送信エラー表示はないが、停電があった後からおかしくなっている。
  • 調査依頼:ひかりTVのサービスやISPぷららに関連の問題があるのか確認して欲しい。
回答を見る