- 締切済み
c言語でのヒストグラム作成用のプログラム
-50から500までの整数が一列に乱数で入力されたテキストファイルを読み込んで-50が何個、-49が何個、・・・、499が何個、500が何個といった感じにに出力するCプログラムが分かりません。 テキストファイルの中身は-50から500までの整数が一列に書いてあります。説明不足かも知れませんがわかる方よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- pantarhei
- ベストアンサー率50% (1/2)
手っ取り早く、質問内容にあるプログラムを作成するのは次のとおりで良いと思います。 ただし、きれいなプログラムではなく、あくまでわかりやすく質問内容を実行できるプログラムとしていますので、改良したい場合は、少し勉強が必要であるということだけ覚えておいてください。 テキストファイルの名前がinputfile.txtで中身が -------------------- -50 30 276 500 8 ・・・ 430 -------------------- のように、数字と数字の間には半角スペースがあるとし、総数は800個だったとします。つまり ------------------------------------ -50 30 276 500 8 ・・・ 430 1 2 3 4 5 ・・・ 800 (個) ------------------------------------ int i ; int stc ; //数字を一時的にストックしておく変数 int dat[551] ; /* 550パターンのデータで、 -50を配列dat[0]とし、 0 を配列dat[50]とし、 500を配列dat[550]とする*/ for(i=0;i<=550;i++) { dat[i] = 0 ; } FILE *fp ; fp = fopen("inputfile.txt","r"); for(i=1;i<=800;i++) { // 数字は800個ある fscanf(fp,"%d",&stc) ; dat[stc+50] = dat[stc+50] +1 ; // カウントアップ } for(i=0;i<=550;i++) { printf("%dは%d個あります ",i-50,dat[i]) ; } fclose(fp); 以上のプログラムが理解できるならこの問題に対しては簡単にプログラムを改良できると思います。
- redfox63
- ベストアンサー率71% (1325/1856)
そのファイルの中の最大要素数はいくつなのか決まっているのでしょうか? 255個以下なら char型の配列(1Byte) 655335個以下なら short int型の配列(2Byte) 4294967295個以下なら long型の配列(4Bayte) で要素数を551個用意します データを取り込み整数化した後+50のオフセット加えた配列の要素を加算していけばいいかと
補足
回答ありがとうございます。60万個です。頑張ってみます。
- asuncion
- ベストアンサー率33% (2127/6289)
>-50が何個、-49が何個、・・・、499が何個、500が何個といった感じにに出力するCプログラムが分かりません。 -50 3 -49 5 … 500 10 というような出力仕様なのですか? ヒストグラムというからには、例えば -50 3 *** -49 5 ***** … 500 10 ********** のように、個数を何らかの図形で表現する必要があると思います。 今回は不要なのですか?
補足
図形表現は必要ありません。前記のような仕様です。忠告ありがとうございます。
- postal0x02
- ベストアンサー率42% (24/57)
書き忘れましたが ファイルを開けないときの処理 ファイルを閉じる処理 も書いてください。
- postal0x02
- ベストアンサー率42% (24/57)
1.int 型の配列を用意する(-50~500 までなのでサイズは???) 2.ファイルを開く 3.用意した配列を ? で初期化 4.1行取り出し 5.取り出した文字列を数値化 6.その文字が -??以上 && ??? 以下なら 7.配列[?] をインクリメント 8.まだ1行取り出せるなら 4. へ 9.???回ループ開始 10.配列の[?] が 0 でなければ 11.printfで ? と 配列の中身 を表示 ? には 定数 や 変数 や 式 が入ります。 配列の添え字に 負の値 が使えないこと、 配列サイズは 550 ではないことに注意してください。 この例の場合、個数が 0 のときは表示しません。 表示する場合は 10. を省いてください。
補足
回答ありがとうございます。5番の内容がよくわかりません。
お礼
解決出来ました。わざわざ丁寧な回答ありがとうございました。