このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/226
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):下記に記載  
#  
#  >>255のプログラムにそれぞれの成績がborderlineで表される成績を上回っているか否かを判定して、構造体のメンバーであるkokugo_gokakuおよびsugaku_gokakuに1(合格の意味)もしくは0(不合格の意味)の値を代入する関数
#  void check_score(int borderline, struct SEISEKI *a) /* 引数aの前に'*'が付いていることに注意されたい */
#  を定義して、その動作を確認するプログラムkadai8-2.cを作りなさい。
#  但し、ボーダーラインは60点とする。
#  1) 問1の構造体を拡張して以下を使う。
#  struct SEISEKI {
#  char name[50];
#  int kokugo;
#  int sugaku;
#  int kokugo_gokaku;
#  int sugaku_gokaku;
#  }

'国語と数学の2科目のテストの成績を処理するプログラムを作る。成績を3人分キーボードから入力した後、それを表示する' :-
        成績を3人分キーボードから入力した後(L),
        'それぞれの成績が閾値で表される成績を上回っているか否かを判定して、合格なら1不合格の場合は0の値を返す'(L,L2),
        表示する(L2).

成績を3人分キーボードから入力した後([[_氏名_1,_国語_1,_数学_1,_合否判定_1],[_氏名_2,_国語_2,_数学_2],[_氏名_3,_国語_3,_数学_3]]) :-
        write('氏名 国語得点 数学得点をスペース区切りで横に3人分入力しなさい : '),
        get_line(Line),
        split(Line,[' '],[_氏名_1,_国語_1,_数学_1,_氏名_2,_国語_2,_数学_2,_氏名_3,_国語_3,_数学_3]),!.

'それぞれの成績が閾値で表される成績を上回っているか否かを判定して、合格なら1不合格の場合は0の値を返す'([[_氏名,_国語,_数学]|R1],[[_氏名,_国語,_数学,_国語合否,_数学合否]|R2]) :-
        合否線(国語,_国語合否線),
        合否線(数学,_数学合否線),
        合否判定(_国語,_数学,_国語合否線,_数学合否線,_国語合否,_数学合否),
        'それぞれの成績が閾値で表される成績を上回っているか否かを判定して、合格なら1不合格の場合は0の値を返す'(R1,R2).

合否判定(_国語,_数学,_国語合否線,_数学合否線,合格,合格) :-
        _国語 >= _国語合否線,
        _数学 >= _数学合否線,!.
合否判定(_国語,_数学,_国語合否線,_数学合否線,合格,不合格) :-
        _国語 >= _国語合否線,
        _数学 < _数学合否線,!.
合否判定(_国語,_数学,_国語合否線,_数学合否線,不合格,合格) :-
        _国語 < _国語合否線,
        _数学 >= _数学合否線,!.
合否判定(_国語,_数学,_国語合否線,_数学合否線,不合格,不合格) :-
        _国語 < _国語合否線,
        _数学 < _数学合否線,!.

表示する([]).
表示する([[_氏名,_国語,_数学,_国語合否,_数学合否]|R]) :-
        writef('氏名:%t\n国語:%t %t\n数学:%t %t\n',[_氏名,_国語,_国語合否,_数学,_数学合否]),
        表示する(R).