Microsoft Visual Studio 2008での得点分布・偏差値を求めるプログラムの作り方

このQ&Aのポイント
  • Microsoft Visual Studio 2008で質問があるのですが、課題でテキストファイルに各生徒の学籍番号と教科の点数を書いたファイルを作成し、そのファイルを読み取って教科ごとと生徒ごとの平均点、生徒ごとの平均点の高い順に降順で表示するプログラムを作成しました。しかし、得点分布と偏差値を求めるプログラムの作り方がわかりません。生徒数は10人、教科は5教科です。
  • 私はMicrosoft Visual Studio 2008をあまり理解していないため、文章が伝わりにくいかもしれませんが、得点分布と偏差値を求めるプログラムの作り方を教えてください。
  • また、SEOを意識したタイトルとハッシュタグを生成しました。
回答を見る
  • ベストアンサー

Microsoft Visual Studio 2008で質問があるの

Microsoft Visual Studio 2008で質問があるのですが… 課題で、テキストファイルに各生徒(架空の人物)の学籍番号、各教科の点数書いたファイルを作成し、そのファイルを読み取り、教科ごとと各生徒ごとの平均点、生徒ごとの平均点の高い順から降順に並べたものを画面に出力する(windows¥system~とかいうやつです)プログラムを作ったのですが、そこからさらにまた各生徒の得点分布(ヒストグラム)・偏差値を出力するプログラムの作り方がわかりません。生徒数は10人、教科は5教科としています。 私はあまりこのソフトのことをわかってないので、伝わりにくい文章だったと思いますが、どうか得点分布・偏差値を求めるプログラムの作り方を教えていただけませんでしょうか…?

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

  • ベストアンサー
回答No.2

/* ここ最近自分の分割力は非常に下がっているのでソースコードが関数ごとに分かれておらず、 非常に見辛く汚いです。自覚はあるんです。 その代わりコメントは大量に書いたんで許してください。 */ #include <stdio.h> #include <math.h> typedef struct student{ char id[8]; //IDは桁数固定の[0-9]のみからなる文字列。7桁とnull文字で8 int english; //英語。 int math; //数学。 int science; //理科。 int demon;// 外道力。 int through; //スルー力。 /* 本当はアレげ力が欲しかったけど訳が思いつかず断念。*/ //本当は上記得点決定をコンストラクタだけにして、ここを読み取りに死たいんだけど //C言語普段使ってなくて調べるのが面倒なので却下。 int total; } student; int main () { student s[30]; /* 人数を動的に確保したいのでstd::vectorとかC#List<student>使いたいけど、そんなのがあるか知らない。*/ student temp; /* 合計点を保持 */ student temp2; /* 並び替えの時の交換用 */ double stddev; /* 標準偏差 */ FILE * pFile; int n; /* 受験者数 */ int x; /* ヒストグラムの人数測定 */ /* ループ変数。VC++ 2008でやっているけど、 C言語ってループ変数のスコープ限定出来ないって聞いた気がするから。 ちゃんと初期化すれば使いまわしOKと考えています。 */ int i,j; pFile = fopen ("c:\\aaa.txt","r"); rewind (pFile); n = 0; while(!feof(pFile)){ fscanf (pFile, "%7s %d %d %d %d %d\n", &(s[n].id[0]),&(s[n].english),&(s[n].math),&(s[n].science),&(s[n].demon),&(s[n].through) ); n++; } fclose (pFile); /*生徒別平均点を求めて表示*/ for(i = 0;i < n;i++){ s[i].total = s[i].english + s[i].math + s[i].science + s[i].demon + s[i].through; printf("出席番号%sの全科目平均点は%.1lf点です。\n",s[i].id,((double)(s[i].total)) / 5); } printf("\n"); /*科目別平均点*/ temp.english = 0; temp.math = 0; temp.science = 0; temp.demon = 0; temp.through = 0; temp.total = 0; /* 演算子のオーバーロードってCで出来るのかなぁ? */ for(i = 0;i < n;i++){ /* 初期化されてねーよ?って警告出るけど、char配列の扱いや構造体の扱いのサイト見る限り 特にそういう処理もなさそうだから問題ないよね? */ temp.english += s[i].english; temp.math += s[i].math; temp.science += s[i].science; temp.demon += s[i].demon; temp.through += s[i].through; temp.total += s[i].total; } printf("全生徒の英語の平均点:%.1lf\n",((double)(temp.english)) / n); printf("全生徒の数学の平均点:%.1lf\n",((double)(temp.math)) / n); printf("全生徒の理科の平均点:%.1lf\n",((double)(temp.science)) / n); printf("全生徒の外道力の平均点:%.1lf\n",((double)(temp.demon)) / n); printf("全生徒のスルー力の平均点:%.1lf\n",((double)(temp.through)) / n); printf("\n"); /* 平均点 = 総合得点の高さ。いちいち平均点を計算するのが面倒なので、総合点順に並び替える */ /* 選択ソート */ for(i = 0; i < n - 1;i++){ for(j = i + 1;j < n; j++){ if (s[i].total < s[j].total){ temp2 = s[j]; s[j] = s[i]; s[i] = temp2; } } } printf("好成績順:\n"); for(i = 0;i < n;i++){ s[i].total = s[i].english + s[i].math + s[i].science + s[i].through + s[i].demon; printf("出席番号%sの全科目平均点は%.1lf点です。\n",s[i].id,((double)(s[i].total)) / 5); } /* 標準偏差を求める */ /* http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE */ /* を参考に不偏分散を求めていますが「母集団が十分に大きく」と言えるかはわかりません。 */ /* http://ja.wikipedia.org/wiki/%E5%AD%A6%E5%8A%9B%E5%81%8F%E5%B7%AE%E5%80%A4 */ /* 「分布が正規分布から離れると誤差が大きくなる。」の誤差の検討は行いません。 */ stddev = 0; for(i = 0;i < n;i++){ stddev += pow(((double)(s[i].total)- (double)(temp.total)),2.0); } /* nが1の時の除外は面倒だから省略 */ stddev = (stddev) / (n - 1); /* 面倒だったんでファイルの元の順番を保っていません。好成績順です。*/ for(i = 0;i < n;i++){ printf("出席番号%sの偏差値は%.5lfです。\n",s[i].id , ((double)(s[i].total) - (((double)(temp.total)) / n)) / stddev * 10 + 50); } printf("\n"); /* ヒストグラム */ printf("得点分布\n"); for(i = 0;i < 500 / 50; i++){ x = 0; for ( j = 0; j < n ; j++){ if((i * 50 <= s[j].total) && (s[j].total < (i + 1) * 50)){ x = x + 1; } } printf("[%3d-%3d]",i*50,(i+1)*50-1); for (j = 0;j < x;j++){ printf("*"); } printf("\n"); } for ( j = 0; j < n ; j++){ if(s[j].total == 100 * 5){ x = x + 1; } } printf("[%3d ]",500); for (j = 0;j < x;j++){ printf("*"); } printf("\n"); return 0; /* やらないけど TODO: 関数の分割 マジックナンバーの除去 人数上限の撤廃 */ }

その他の回答 (2)

回答No.3

忘れてた検証に使ったファイル。 最後の100の直後にLFがあります ============================ 1654287 50 70 45 28 100 3468100 35 42 56 42 100 0349735 20 38 99 37 100 2647891 75 60 65 61 100 6267564 48 38 33 48 100 3861547 62 46 65 35 100 2222222 73 75 58 71 100 5151515 65 58 42 46 100 3862735 59 39 37 50 100 4442444 90 91 61 66 100

回答No.1

言語が何か言ってくれないと何も回答出来ないよ。 #Visual Studioは複数の言語サポートする

eeeeaaa
質問者

補足

すいません。 C言語です

関連するQ&A

  • 正規分布に関する問題

    受験者1,000人の4教科のテスト結果は表のとおりであり,いずれの教科の得点分布も正規分布に従っていたとする。90点以上の得点者が最も多かったと推定できる教科はどれか。 教科、平均点、標準偏差 A、45、18 B、60、15 C、70、8 D、75、5 分かりやすく解説お願いします。

  • C言語の課題について

    データファイル(txtファイル) に生徒30人分の出席番号、数学 、英語の点数が入っていて、数 学と英語の点数は0点から100点 (整数)です。 このデータを元にして ・構造体型配列に出席番号、数 学、英語の点数を格納する ・国語の得点を70点から100点間 での整数の一様乱数によって格 納する ・各学生の平均点、偏差値を求 める ・偏差値が最もよい学生の出席 番号、数学、英語、国語の得点 、平均点、偏差値と合計点が181 点から210点、211点から240点 、241点から270点、271点から3 00点の学生の人数を数えてその 度数分布をtxtファイルへと出力 する 条件 ・平均点、偏差値を求める箇所 はmain関数から独立させる。 ・国語を入れるときに使用する 乱数は出席番号下4桁により初期 化したものを使うこと。頭の0は 除く(例120012-3→123) ・配列を因数とする関数は使用 可能 ・度数分布を作る際は、if文を使 用しないこと ・合計点が181~300点に含まれ ることは既知である ・txtファイルへの出力は以下の ようにすること。 High score: No. | math: , Eng , Jap | Ave: , D ev 181-200(10): ********** 211-240(17):**************** このような課題が出されたのですが、どのような順序でプログラムを書いていけばいいかが分かりません なのでどのような順序でプログラムを書いていけばいいか教えて下さい

  • 模試 各教科偏差値と合計偏差値を教えてください。宜しくお願いします。

    模試 各教科偏差値と合計偏差値を教えてください。宜しくお願いします。 国語 平均点70 標準偏差21 得点148/200 英語 平均点61 標準偏差33 得点144/200 日本史 平均点33 標準偏差16 得点88/100 3教科 平均点215 標準偏差86 得点380/500

  • 学校テストの偏差値の出し方

    お世話になります。 中学3年生の息子を持つ父親です。 高校入試が近づき、ふと子供の学校定期テスト集計表を見ると、偏差値が掲載されていないことに気付きました。 各教科 0~100点まで10点ごとの得点者数 合計得点 0~500点まで50点ごとの得点者数 受験者数、各教科平均点、5教科平均点 受験者数は300名程です。 以上が記載されていました。 この度数分布票から各教科、合計得点の偏差値はエクセル等で求められますか? また全員の得点が分かる場合と、上記のようなザックリした集計からとでは、求められる偏差値も乖離してしまうのでしょうか? 文系卒業のため、幼稚な質問で申し訳ございません。 宜しくお願いいたします。

  • プログラムについて

    次の問題が自分はどうでもできないので、皆さんに助けをお願いしたいのです。 問題は:     N以下の素数を求めるプログラムと     試験の得点(0以上100以下の整数)を入力し,得点データの分布を10点刻    みのヒストグラムの形式で出力するプログラムが分かりません、ぜひ教え    ていただきたいです。よろしくお願いします!

  • プログラムについて

    次の問題が自分はどうしても分からないので、みなさんの力をお借りしたいのです。 問題は:   N以下の素数を求めるプログラムと   試験の得点(0以上100以下の整数)を入力し,得点データの分布を10点刻    みのヒストグラムの形式で出力するプログラムの作成が分かりませんので、   何とかよろしくお願いします!

  • Excelの問題が分からないので教えてください。

    図は,社会データ分析入門で実施した食生活アンケートの結果の得点分布をヒストグラムに示したものである。グラフ中の青字は,各得点における人数である。 このデータについては,平均値は???,中央値は???,最頻値???である。 ???の部分に入る数字(小数点第一位まで)は何ですか?教科書通りにやっても不正解で困っています。

  • Microsoft Visual Studio 2008 Express Edtion で”ソリューションのビルド”について

    Microsoft Visual Studio 2008 Express Edtionでメニューから”ソリューションのビルド”を実行した際に、”Debug”フォルダが作成されて、その中にexeファイルが出力されたのですが、このファイルをコピーして他のPCに貼り付けてあげれば、ビルドしたプログラムは動作してくれるのでしょうか。

  • Visual studio 2008 のリダイレクトについて

    Visual Studio 2008を使ってC言語のプログラミングをしています C言語のプログラムの実行結果を別ファイルに リダイレクトしようとしたのですが プロジェクトのプロパティ→構成プロパティ→デバッグ コマンド引数の箇所に >output.txt と打ったのですが、実行結果はCtrl+F5でしか出力されません Visual studio 2005だとF5のデバッグだけでも出力されていたのですが Ctrl+F5だとキーをわざわざおさないといけないので非常に不憫です。 2008ですと、2005と違ってどこかプロパティの設定を いじらないといけない箇所があるのでしょうか? お分かり頂ける方、宜しくお願いします

  • 統計学の問題の解き方について教えてください

    大学で統計学を学んでいる者なのですが、以下の問題の解き方が わかりません。どなたかお教え頂けないでしょうか? 特に、こういった各得点が分からず、平均点が変化した場合の標準偏差 を求める問題が分かりません。 【問題】今回の期末テストの総合点は平均値700点、標準偏差 50点であった。 すべての生徒の得点が 25 点増えたとした場合、この総合点の(1)平均値と (2)標準偏差はいくらになるか? また、すべての生徒の得点が 10%増えたとした場合、この総合点の(3)平均値と(4)標準偏差は いくらになるか?

専門家に質問してみよう