このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/305
#  ../test/read.cgi/tech/1308749241/304に加えてもう1問お願いします。 
#   
#  [1] 授業単元: プログラミング 
#  [2] 問題文(含コード&リンク): 
#  次に示す個人情報を構造体として作成し、 
#  それぞれの科目の平均点とそれぞれの学生の平均点を 
#  構造体のポインタを用いて求めなさい。 
#  学籍番号 英語 数学 物理 
#  1 81 24 63 
#  2 28 15 7 
#  3 89 92 88 
#  4 32 88 66 
#  5 92 46 81 
#  -1 0 0 0 
#  学籍番号英語数学物理 
#   [3.1] OS:windows 
#   [3.2] コンパイラ名とバージョン:cygwin 
#   [3.3] 言語: C 
#  [4] 期限: 2011/7/6 
#  [5] その他の制限: 
#  現在ポインタを習っているところです。 
#  出来るだけ簡単に書いてもらえると助かります。 
#   

'個人情報を構造体として作成し、それぞれの科目の平均点とそれぞれの学生の平均点を構造体のポインタを用いて求める'(_科目の平均点ならび,_学生の平均点ならび) :-
        個人情報を登録する,
        'それぞれの科目の平均点とそれぞれの学生の平均点を求める'(_科目の平均点ならび,_学生の平均点ならび).

個人情報を登録する :-
        repeat,
        個人情報を得る(_学籍番号,_英語,_数学,_物理),
        個人情報を登録する(_学籍番号,_英語,_数学,_物理).
        _学籍番号 = -1,!.

個人情報を得る(_学籍番号,_英語,_数学,_物理) :-
        write('学籍番号 英語 数学 物理 を空白区切りで入力してください '),
        readln([_学籍番号,_英語,_数学,_物理]).

個人情報を登録する(-1,_,_,_) :- !.
個人情報を登録する(_学籍番号,_英語,_数学,_物理) :-
        assertz(個人成績(学籍番号(_学籍番号),英語(_英語),数学(_数学),物理(_物理)).

'それぞれの科目の平均点とそれぞれの学生の平均点を求める'(_科目の平均点ならび,_学生の平均点ならび) :-
        それぞれの科目の平均点を求める(_科目の平均点ならび),
        それぞれの学生の平均点を求める(_学生の平均点ならび).

それぞれの科目の平均点を求める(_科目の平均点ならび) :-
        findall([_科目,_科目の平均点],(
                    append(_,[_科目|R],[英語,数学,物理]),
                    科目の平均点(_科目,_科目の平均点)),
                _科目の平均点ならび).

科目の平均点(_科目,_科目平均点) :-
        findavg(_成績,(
                    P =.. [科目,_成績],
                    個人成績(学籍番号(_),英語(_英語),数学(_数学),物理(_物理)),
                    append(_,[P|_],[英語(_英語),数学(_数学),物理(_物理)])),
                _科目の平均点).

それぞれの学生の平均点を求める(_学生の平均点ならび) :-
        findall([_学籍番号,_学生の平均点],(
                    個人成績(学籍番号(_),英語(_英語),数学(_数学),物理(_物理)),
                    _学生の平均点 is (_英語 + _数学 + _物理) / 3),
                _学生の平均点ならび).