このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354070278/268
#  [1] 授業単元:構造体ポインタ 
#  [2] 問題文(含コード&リンク):codepad.org/zqcRJhyk 
#  
#  #include < stdio.h >
#  #include < string.h > // 文字列をコピーするstrcpy関数を使うため
#  
#  struct stats
#  {
#  	char name[20]; // 名前
#  	double average;  // 打率
#  	int HR; // ホームラン(HR)数
#  };
#  
#  void sort_mlb(int flag, ここを書く);
#  void disp_mlb(struct stats *data); // 構造体ポインタの示す内容を表示
#  必要ならば追加してよい
#  
#  int main()
#  {
#  	int i;
#  	struct stats mlb[5];
#  	必要ならば追加してよい
#  
#  	strcpy(mlb->name, "CABRERA"); // 文字列をコピーする(つまりname[]に名前を格納する)
#  	// 文字列は数値のように代入できないため
#  	mlb->average = 0.330;
#  	mlb->HR = 44;
#  	strcpy((mlb+1)->name, "HAMILTON");
#  	(mlb+1)->average = 0.285;
#  	(mlb+1)->HR = 43;
#  	strcpy((mlb+2)->name, "ENCARNACION");
#  	(mlb+2)->average = 0.280;
#  	(mlb+2)->HR = 42;
#  	strcpy((mlb+3)->name, "SUZUKI");
#  	(mlb+3)->average = 0.283;
#  	(mlb+3)->HR = 9;
#  	strcpy((mlb+4)->name, "TROUT");
#  	(mlb+4)->average = 0.326;
#  	(mlb+4)->HR = 30;
#  
#  	disp_mlb(mlb);
#  
#  	sort_mlb(1, mlb);
#  	disp_mlb(mlb);
#  	
#  	sort_mlb(2, mlb);
#  	disp_mlb(mlb);
#  
#  	sort_mlb(3, mlb);
#  	disp_mlb(mlb);
#  	
#  	return 0;
#  }
#  
#  void sort_mlb(int flag, ここを書く)
#  {
#  	ここを書く
#  }
#  
#  void disp_mlb(struct stats *data) // 構造体ポインタの示す内容を表示
#  {
#  	int i;
#  
#  	for ( i=0 ; i < 5 ; i++ )
#  		printf("%d:%s\t %.3f\t %d\n", i+1, (data+i)->name, (data+i)->average, (data+i)->HR );
#  	printf("\n");
#  }
#  
#  関数 sort_mlb() は入力されたデータの並び替えを行う関数で, 
#  第1引数(flag)により以下のように並び替えを行う. 
#   flag = 1 の場合,名前のアルファベット順(A→Z)に並び替え 
#   flag = 2 の場合,打率の高い順に並び替え 
#   flag = 3 の場合,HR数の少ない順に並び替え 
#  

'関数 sort_mlb() は入力されたデータの並び替えを行う関数で,
第1引数(flag)により以下のように並び替えを行う.
 flag = 1 の場合,名前のアルファベット順(A→Z)に並び替え
 flag = 2 の場合,打率の高い順に並び替え
 flag = 3 の場合,HR数の少ない順に並び替え' :-
         sort_mlb(_flag,LL1,LL2).

sort_mlb(_flag,LL1,LL2) :-
        '入力されたデータの並び替えを行う関数で,
第1引数(flag)により以下のように並び替えを行う.
 flag = 1 の場合,名前のアルファベット順(A→Z)に並び替え
 flag = 2 の場合,打率の高い順に並び替え
 flag = 3 の場合,HR数の少ない順に並び替え'(_flag,L1,L2).

'入力されたデータの並び替えを行う関数で,
第1引数(flag)により以下のように並び替えを行う.
 flag = 1 の場合,名前のアルファベット順(A→Z)に並び替え
 flag = 2 の場合,打率の高い順に並び替え
 flag = 3 の場合,HR数の少ない順に並び替え'(_flag,LL1,LL2) :-
        'flag = 1 の場合,名前のアルファベット順(A→Z)に並び替え'(_flag,LL1,LL2).
'入力されたデータの並び替えを行う関数で,
第1引数(flag)により以下のように並び替えを行う.
 flag = 1 の場合,名前のアルファベット順(A→Z)に並び替え
 flag = 2 の場合,打率の高い順に並び替え
 flag = 3 の場合,HR数の少ない順に並び替え'(_flag,LL1,LL2) :-
        'flag = 2 の場合,打率の高い順に並び替え'(_flag,LL1,LL2).
'入力されたデータの並び替えを行う関数で,
第1引数(flag)により以下のように並び替えを行う.
 flag = 1 の場合,名前のアルファベット順(A→Z)に並び替え
 flag = 2 の場合,打率の高い順に並び替え
 flag = 3 の場合,HR数の少ない順に並び替え'(_flag,LL1,LL2) :-
        'flag = 3 の場合,HR数の少ない順に並び替え'(_flag,LL1,LL2).

'flag = 1 の場合,名前のアルファベット順(A→Z)に並び替え'(1,LL1,LL2) :-
        findall([_名前,_nth1],(
                    nth1(_nth1,LL1,[_名前,_,_])),
                LL3),
        整列する(LL3,LL4),
        findall(L,(
                    member([_,_nth1_2],LL4),
                    nth1(_nth1_2,LL1,L)),
                LL2).

'flag = 2 の場合,打率の高い順に並び替え'(2,LL1,LL2) :-
        findall([_打率,_nth1],(
                    nth1(_nth1,LL1,[_,_打率,_])),
                LL3),
        整列する(LL3,LL4),
        reverse(LL4,LL5),
        findall(L,(
                    member([_,_nth1_2],LL5),
                    nth1(_nth1_2,LL1,L)),
                LL2).

flag = 3 の場合,HR数の少ない順に並び替え'(3,LL1,LL2) :-
        findall([_ホームラン数,_nth1],(
                    nth1(_nth1,LL1,[_,_,_ホームラン数])),
                LL3),
        整列する(LL3,LL4),
        findall(L,(
                    member([_,_nth1_2],LL4),
                    nth1(_nth1_2,LL1,L)),
                LL2).