このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/707
#  [1] 授業単元: C言語プログラミング 
#  [2] 問題文(含コード&リンク): 
#  名前(char name[20])と点数(int score)からなる構造体の配列を作る. 
#  件数(10以下)をキーボード入力後、その件数だけ名前と点数をキーボード入力して配列に格納し, 
#  点数の平均点と、平均点以上の学生の名前を表示するプログラムを作成せよ. 
#  なお,文字列aと整数bを同時にキーボード入力するには、scanf("%s %d",a,&b)とすればよい(文字列変数には&がいらない). 
#   
#  実行例 
#  $./kadai 
#  n? 5 
#  name score? taro 52 
#  name score? jiro 84 
#  name score? saburo 38 
#  name score? hanako 63 
#  name score? youko 72 
#  Average:61 
#  Above average:jiro hanako youko 
#   
#  ヒント 
#  struct student { 
#    char name[20]; 
#    int score; 
#  } student; 
#   
#  scanf("%s %d",student.name, &student.score);  
#   

'件数(10以下)をキーボード入力後、その件数だけ名前と点数をキーボード入力して配列に格納し,点数の平均点と、平均点以上の学生の名前を表示する' :-
        '件数(10以下)をキーボード入力'(_件数),
        'その件数だけ名前と点数をキーボード入力して配列に格納し'(_件数),
        '点数の平均点と、平均点以上の学生の名前を表示する'.

'点数の平均点と、平均点以上の学生の名前を表示する' :-
        点数の平均点(_平均点),
        平均点以上の学生の名前を表示する(_平均点),
        fail.
'点数の平均点と、平均点以上の学生の名前を表示する'.

平均点以上の学生の名前を表示する(_平均点) :-
        名前と得点(_名前,_得点),
        _得点 >= _平均点,
        writef('平均点%t以上の名前は : %t\n',[_名前]),!.

点数の平均点(_平均点) :-
        findavg(_点数,(
                    名前と得点(_名前,_得点)),
                _平均点).

'件数(10以下)をキーボード入力'(_件数) :-
        催促付き整数入力('件数を入力して下さい(10以下) : ',_件数),
        _件数 =< 10,!.
'件数(10以下)をキーボード入力'(_件数) :-
        '件数(10以下)をキーボード入力'(_件数).

'その件数だけ名前と点数をキーボード入力して配列に格納し'(0) :- !.
'その件数だけ名前と点数をキーボード入力して配列に格納し'(_件数) :-
        名前と点数の入力(_名前,_点数),
        assertz(名前と点数(_名前,_点数)),
        _件数_1 is _件数 - 1,
        'その件数だけ名前と点数をキーボード入力して配列に格納し'(_件数_1).

名前と点数の入力(_名前,_点数) :-
        write('名前と点数をカンマ区切りて入力して下さい : '),
        readln(L),
        名前と点数の入力(L,_名前,_点数),!.
名前と点数の入力(_名前,_点数) :-
        名前と点数の入力(_名前,_点数).

名前と点数の入力([_名前,_点数],_名前,_点数) :- !.
名前と点数の入力([_名前1,_名前2,_点数],_名前,_点数) :-
        concat_atom([_名前1,_名前2],' ',_名前).
名前と点数の入力(L,_,_) :-
        writef('入力データの解析結果は%tで名前,点数が得られません。再入力をお願いします。\n',[L]),
        fail.