• 締切済み

c言語でのヒストグラム作成用のプログラム

-50から500までの整数が一列に乱数で入力されたテキストファイルを読み込んで-50が何個、-49が何個、・・・、499が何個、500が何個といった感じにに出力するCプログラムが分かりません。 テキストファイルの中身は-50から500までの整数が一列に書いてあります。説明不足かも知れませんがわかる方よろしくお願いします。

みんなの回答

回答No.5

手っ取り早く、質問内容にあるプログラムを作成するのは次のとおりで良いと思います。 ただし、きれいなプログラムではなく、あくまでわかりやすく質問内容を実行できるプログラムとしていますので、改良したい場合は、少し勉強が必要であるということだけ覚えておいてください。 テキストファイルの名前が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); 以上のプログラムが理解できるならこの問題に対しては簡単にプログラムを改良できると思います。

simo5625
質問者

お礼

解決出来ました。わざわざ丁寧な回答ありがとうございました。

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

そのファイルの中の最大要素数はいくつなのか決まっているのでしょうか? 255個以下なら char型の配列(1Byte) 655335個以下なら short int型の配列(2Byte) 4294967295個以下なら long型の配列(4Bayte) で要素数を551個用意します データを取り込み整数化した後+50のオフセット加えた配列の要素を加算していけばいいかと

simo5625
質問者

補足

回答ありがとうございます。60万個です。頑張ってみます。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

>-50が何個、-49が何個、・・・、499が何個、500が何個といった感じにに出力するCプログラムが分かりません。 -50 3 -49 5 … 500 10 というような出力仕様なのですか? ヒストグラムというからには、例えば -50 3 *** -49 5 ***** … 500 10 ********** のように、個数を何らかの図形で表現する必要があると思います。 今回は不要なのですか?

simo5625
質問者

補足

図形表現は必要ありません。前記のような仕様です。忠告ありがとうございます。

回答No.2

書き忘れましたが ファイルを開けないときの処理 ファイルを閉じる処理 も書いてください。

回答No.1

1.int 型の配列を用意する(-50~500 までなのでサイズは???) 2.ファイルを開く 3.用意した配列を ? で初期化 4.1行取り出し   5.取り出した文字列を数値化   6.その文字が -??以上 && ??? 以下なら     7.配列[?] をインクリメント 8.まだ1行取り出せるなら 4. へ 9.???回ループ開始   10.配列の[?] が 0 でなければ     11.printfで ? と 配列の中身 を表示 ? には 定数 や 変数 や 式 が入ります。 配列の添え字に 負の値 が使えないこと、 配列サイズは 550 ではないことに注意してください。 この例の場合、個数が 0 のときは表示しません。 表示する場合は 10. を省いてください。

simo5625
質問者

補足

回答ありがとうございます。5番の内容がよくわかりません。

関連するQ&A

  • ヒストグラムのプログラム

    乱数で入力されたテキストファイル読み込んでヒストグラムを出力するCプログラムが分かりません。 現在、乱数のテキストファイル作成まで出来ました。 ぜひ教えてください。よろしくお願いします。

  • C言語でプログラムを作成しなさい!といわれたんですが...

    ◎プログラム仕様 C言語を使用 入力ファイルから1レコードを入力する。改行マークまで入力する。 2番目の「:」以前のデータを有効とする。 2番目の「:」からは、不要です。 出力ファイルへ出力する。 この処理を最終レコードまで行う。 処理の例 yoneko:ksgtgsmbnisysbnka:sjkmakshs7s:sksksk99jjs: 入力データ yoneko:ksgtgsmbnisysbnka                出力データ 入力ファイル名・出力ファイル名は、任意に指定できるものとする。 入力ファイルの1レコード当たりの最大バイト数は、100バイトします。 それぞれの処理でエラーが発生した場合は、エラーの表示を行う。 を依頼されました。 まったく意味が分りません。 わかりやすく説明していたでけないでしょうか。 C言語、自体わかりません。

  • C言語のプログラム作成の課題の事なんですが

    小数とアルファベットを入力したとき、例えば “123.45a” と入力したとき、 プログラムの中で整数型の変数で “123.45” を一つの数字(double型)として認識し、その 数字を出力せよ。 というプログラムを組む課題なんですがさっぱり?わかりません。どなたか教えて戴けないでしょうか?

  • C言語のプログラム集

    こんにちは。C言語のテキストにはプログラムとその説明が書いていますが、 このC言語のプログラムが多くのっているような本はありますか?本屋さんで探したのですが、プログラムがものすごく多くのっているようなものがなかったので、もしお分かりの方がおられましたが、本の紹介をお願いします。

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • C言語で、次のプログラムを作ってみて頂けないでしょうか?

    「キーボードから2以上の整数を入力して、 素数であるかどうか判断をする」 というプログラムをCで作るにはどうしたらいいですか? できたら、見本のプログラムを示して頂けると 一番助かります。 よろしくお願いします。

  • C言語について質問なんですが((。繰り返しを指示するプログラムがどうも

    C言語について質問なんですが((。繰り返しを指示するプログラムがどうも上手くいきません・・・ C言語について質問なんですが((。繰り返しを指示するプログラムがどうも上手くいきませんorz。詳しい方是非応援に(TAT)! 今打ち込んでいるとこなんですがどうもうまくいかなくて(orz どんな内容かといいますとテキストボックス1に入力した数値を テキストボックス2に入力した回数分掛けた値をもとめ テクストボックス3に出力するものです 例えばテクストボックス1に「13」と入力し、テクストボックス2に「2」と入力したら 169とテクストボックス3に出力したいのですが上手くいかなくて。。。 for(i=0;i<b;i++)この後に繰り返しの式を書かなければと思うのですが・・・それも思いつかず(TAT) っていうか他に2~3個方法があるのですがこの for(i=0;i<b;i++)があっているのかもわからず・・・orz 是非、是非力をかしてください! ちなみにプログラムはこんな感じになってます↓ private void button5_Click(object sender, EventArgs e) { //2の0乗=1 //2の1乗=1*2*2=2 //2の2乗=1*2*2=4 //2の3乗=1*2*2*2=8 //2の4乗=1*2*2*2*2*=16 int a, b, c,i; //入力 //textboxの数値を変数aに入力 a = int.Parse(textBox1.Text); //↑がわからに場合数字のドキュメントで数値入力を確認 //textbox2の数値を変数bに入力 b = int.Parse(textBox2.Text); //処理 //cに1を代入 //b回繰り返す //cにaを掛ける c = 1; //出力 //求めた答えをtextbox4に出力 textBox3.Text = c.ToString(); for(i=0;i<b;i++) { }}

  • ★C言語の問題です★

    C言語のプログラムの問題なんですが、どなたか以下の問題の1問でも解ける方がいればご回答おねがいします! または、アドバイスだけでもいいのでよろしくお願いします。 【問題】 1 西暦1868年から2007年までの年号を入力して和暦に変更して出力するプログ  ラムを作成するプログラム。  例 入力 1868  出力 明治元年       2007     平成19年 2 整数配列が-32768から32767の範囲の数しか扱えないとしたとき、10桁の整数同士  の足し算を行うプログラム。 3 3桁の整数の値を入力していき、-9999が入力されたところで、それまでに入力  された数の個数と合計を整数で、平均を浮動小数点数で出力するプログラム。 4 3つの文字列”Happy”と“New”と“Year”をつないで1つの文字列として出力する  プログラム。 5 学籍番号、氏名、出席からなる10人分のデータがある。出席の悪いものから並び替  えて表示するプログラム。  例  CA180002 山田太郎 70  CA170001 山田次郎 60  データは、適当なものを使います。

  • C言語でアナグラムを求めるプログラム

    C言語初心者で、勉強中です。 今アナグラムを求めるプログラムをC言語で作成しています。 内容はあらかじめある英単語が書いてあるテキストファイルから互いにアナグラムとなっている英単語をすべて求めてそれを出力するというプログラムです。 どこから手をつけていいかわからず悩んでいます。 そこでヒントをいただこうと思って質問しました。 どなたか回答よろしくお願いします。

  • C言語で5つの整数a、b、c、d、eを入力し、降順に整列した後に出力して終了するプログラムを作成してください

    C言語で5つの整数a、b、c、d、eを入力し、降順に整列した後に出力して終了するプログラムを作成してください。 入力 出力 3 9 6 7 9 6 7 5 5 3

専門家に質問してみよう