《情報基礎論演習》 第8回
【整列】 その1
学生の成績を処理するプログラムを作成する。
成績は一行に一人の情報が記述されており、各行は
1〜4 文字目 学籍番号(右詰め)
5文字目 空白
6〜23文字目 氏名(左詰め)
24文字目 空白
25〜27文字目 成績(右詰め)
となっている。
成績データファイルとして、~izumi/efcs/ に
"s8_8.dat" : 学生数8人
"s8_200.dat" : 学生数200人
"s8_2400.dat": 学生数2400人
が用意してあるので、最初は少人数のファイルで動作を確認してから、
大勢のファイルを処理してみなさい。
これらのファイルからデータを読み込み、課題内容に従って処理しなさい。
ファイルの読み込みは、
(1)標準入力のリダイレクションによる方法
% basicN < s8_8.dat
(2)コマンド引数でファイル名を指定し、fopen(),fscanf()などの
ファイル操作関数による方法
% basicN s8_8.dat
のどちらでもよいものとする。
------------------------------------------------------------------
▼ Basic 1
学生のデータを構造体の配列に読み込み、各データを表示するとともに、
平均点を求め表示するプログラムを作成しなさい。
構造体の定義は以下のようにすること。
struct student{
int num; /* 学籍番号 */
char name[18]; /* 氏名 */
int score; /* 得点 */
};
各データの表示は、構造体配列とデータ数を引数とする関数を作成し、関数内で
行なうこと。(一行に一人分のデータを出力する)
(リポートには、"s8_8.dat"の結果を添付すること)
------------------------------------------------------------------
▼ Basic 2
Basic 1のプログラムに次の処理を追加しなさい。
構造体配列とデータ数を引数とする単純選択整列のアルゴリズムを用いた
整列関数(得点で降順)を作成し、整列した結果を表示する。
(リポートには、"s8_8.dat"の結果を添付すること)
------------------------------------------------------------------
▼ Basic 3
Basic 2のプログラムに次の処理を追加しなさい。
整列過程におけるデータの比較回数とデータの入れ換え回数を数え、出力
しなさい。
(リポートには、3つのデータファイルそれぞれについて、データの比較
回数、入れ換え回数の出力のみ添付すること)
------------------------------------------------------------------
▼ Basic 4
Basic 2のプログラムを変更し、得点が同じ場合には学籍番号順(昇順)に
出力されるようにしなさい。(比較の条件を追加すると簡単)
(リポートには、"s8_8.dat"の実行結果を添付すること)
------------------------------------------------------------------
▽ Advanced
Basic 4のプログラムに、整列の過程を出力させる部分を追加し、動作を
可視化して、整列過程を確認しなさい。
(リポートには、出力結果は長いのでいりません)
------------------------------------------------------------------