このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/462
#  [1] C言語演習 
#  [2] http://ime.nu/codepad.org/eBlxfu2Q のプログラムを以下のように 
#  改良しなさい。 
#  1) 数字を入力して計算できるようにする。(ただし、2次元配列は必ず使用) 
#  2) 1〜5の合計点及び平均点の最高点、最低点を表の下部分に表示させる。 
#  1)は必須、2)はできれば 
#   [3.1] Windows7 
#   [3.3] C言語 
#  [4] 今日の19時まで 
#  [5] 特になし 
#  わかる方どうかよろしくお願いします。 
# 
# 
#  #include  
#  
#  #define  NUMBER		5
#  
#  int max_of(const int vc[5][3], int no, int x)
#  {
#  	int	 i;
#  	int  max = vc[0][x];
#  	for (i = 1; i < no; i++)
#  		if (vc[i][x] > max)
#  			max = vc[i][x];
#  	return (max);
#  }
#  
#  int min_of(const int vc[5][3],int no, int x)
#  {
#  	int j;
#  	int min = vc[0][x];
#  
#  	for (j = 1; j < no; j++){
#  		if (vc[j][x] < min)
#  			min = vc[j][x];
#  	}
#  
#  	return(min);
#  }
#  
#  double ave_of(int vc[5][3],int no, int x)
#  {
#  	int k;
#  	double a;
#  	double sum = vc[0][x];
#  
#  	for(k = 1; k < no; k++){
#  		sum += vc[k][x];
#  	}
#  	a = sum / NUMBER;
#  
#  	return(a);
#  }
#  
#  int main(void)
#  {
#  	int	 i, j, tensu = 0;
#  	int	 max_j, max_e, max_m;
#  	int	 min_j, min_e, min_m;
#  	double	 ave_j, ave_e, ave_m;
#  	double   ave = 0;
#  
#  	int ten[5][3] = {{10,20,30},
#                     	{40,50,60},
#                     	{70,80,90},
#                     	{80,70,60},
#                     	{50,40,30}};
#  
#  	max_j = max_of(ten, NUMBER, 0);
#  	max_e = max_of(ten, NUMBER, 1);
#  	max_m = max_of(ten, NUMBER, 2);
#  	min_j = min_of(ten, NUMBER, 0);
#  	min_e = min_of(ten, NUMBER, 1);
#  	min_m = min_of(ten, NUMBER, 2);
#  	ave_j = ave_of(ten, NUMBER, 0);
#  	ave_e = ave_of(ten, NUMBER, 1);
#  	ave_m = ave_of(ten, NUMBER, 2);
#  
#  	printf("国語の最高点=%d\n", max_j);
#  	printf("英語の最高点=%d\n", max_e);
#  	printf("数学の最高点=%d\n", max_m);
#  	printf("国語の最低点=%d\n", min_j);
#  	printf("英語の最低点=%d\n", min_e);
#  	printf("数学の最低点=%d\n", min_m);
#  	printf("国語の平均点=%.1f\n", ave_j);
#  	printf("英語の平均点=%.1f\n", ave_e);
#  	printf("数学の平均点=%.1f\n", ave_m);
#  	putchar('\n');
#  
#  	puts("番号:国 英 数  合計 平均");
#  	for (i = 0; i < NUMBER; i++) {
#  		tensu = 0; ave = 0;
#  		printf("[%2d]:", i+1);
#  		for (j = 0; j < 3; j++) {
#  			tensu += ten[i][j];
#  			ave = tensu / 3;
#  			printf("%2d ", ten[i][j]);
#  		}
#  		printf(" %3d  %.1f\n", tensu, ave);
#  	}
#  	return (0);
#  }
#  
#  
#  
#  Output:
#  
#  国語の最高点=80
#  英語の最高点=80
#  数学の最高点=90
#  国語の最低点=10
#  英語の最低点=20
#  数学の最低点=30
#  国語の平均点=50.0
#  英語の平均点=52.0
#  数学の平均点=54.0
#  
#  番号:国 英 数  合計 平均
#  [ 1]:10 20 30   60  20.0
#  [ 2]:40 50 60  150  50.0
#  [ 3]:70 80 90  240  80.0
#  [ 4]:80 70 60  210  70.0
#  [ 5]:50 40 30  120  40.0
#  

'5人の国語、英語、数学の得点を入力し、一覧表を作成する。個人の合計点、平均点、行末に付加する。科目ごとの合計点、平均点、5人の合計の合計点、平均点を最終行として付加する。さらに各科目の最高点には☆、最低点には★を表示する。' :-
        '5人の国語、英語、数学の得点を入力し'(_五人の成績ならび),
        一覧表の作成(_五人の成績ならび).

一覧表の作成(_五人の成績ならび) :-
        転置(_五人の成績ならび,_転置された五人の成績ならび),
        国語・英語・数学の最高点(_転置された五人の成績ならび,_国語最高点,_英語最高点,_数学最高点),
        国語・英語・数学の最低点(_転置された五人の成績ならび,_国語最低点,_英語最低点,_数学最低点),
        国語・英語・数学の平均点(_転置された五人の成績ならび,_国語平均点,_英語平均点,_数学平均点),
        '個人別合計点・平均点'(_五人の成績ならび,_個人別合計点ならび,_個人別平均点ならび),
        総平均点(_個人別合計点ならび,_総平均点),
        見出し行,
        五人の成績行表示(1,_五人の成績ならび,_個人別合計点ならび,_個人別平均点ならび),
        最高点表示(_国語最高点,_英語最高点,_数学最高点),
        最低点表示(_国語最低点,_英語最低点,_数学最低点),
        平均点表示(_国語平均点,_英語平均点,_数学平均点,_総平均点),!.

五人の成績行表示(_,[],[],[]).
五人の成績行表示(N,[[_国語,_英語,_数学]|R1],[_合計点|R2],[_平均点|R3]) :-
        writef('[%t] %10r %10r %10r %10r %10r\n',[_国語,_英語,_数学,_合計点,_平均点]),
        N2 is N + 1,
        五人の成績行表示(N2,R1,R2,R3).

最高点表示(_国語最高点,_英語最高点,_数学最高点) :-
        writef('最高点  %10r %10r %10r\n',[_国語最高点,_英語最高点,_数学最高点]).

最低点表示(_国語最低点,_英語最低点,_数学最低点) :-
        writef('最低点  %10r %10r %10r\n',[_国語最低点,_英語最低点,_数学最低点]).

平均点表示(_国語平均点,_英語平均点,_数学平均点,_総平均点) :-
        writef('平均点  %10r %10r %10r %10r %10r\n',[_国語平均点,_英語平均点,_数学平均点,' ',_総平均点]).

総平均点(_個人別合計点ならび,_総平均点) :-
        相加平均(_個人別合計点ならび,_総平均点の一),
        _総平均点 is truncate(_総平均点の一 * 10) / 10.

国語・英語・数学の最高点([_国語点数ならび,_英語点数ならび,_数学点数ならび],_国語最高点,_英語最高点,_数学最高点) :-
        findall(_科目最高点,(
                    append(_,[_科目点数ならび|_],LL),
                    最大値(_科目点数ならび,_科目最高点)),
                [_国語最高点,_英語最高点,_数学最高点]).

国語・英語・数学の最低点([_国語点数ならび,_英語点数ならび,_数学点数ならび],_国語最低点,_英語最低点,_数学最低点) :-
        findall(_科目最低点,(
                    append(_,[_科目点数ならび|_],LL),
                    最小値(_科目点数ならび,_科目最低点)),
                [_国語最低点,_英語最低点,_数学最低点]).

国語・英語・数学の平均点([_国語点数ならび,_英語点数ならび,_数学点数ならび],_国語平均点,_英語平均点,_数学平均点) :-
        findall(_科目平均点,(
                     append(_,[_科目点数ならび|_],LL),
                     相加平均(_科目点数ならび,_平均点の一),
                     _科目平均点 is truncate(_平均点の一 * 10) / 10),
                [_国語平均点,_英語平均点,_数学平均点]).

見出し行 :-
        write('番号:  国   英   数   合計 平均\n'),!.