このディレクトリの索引

#  [1]授業単元: 関数入門
#  [2]問題文:

#  100点満点の試験を入力して、5段階評価を返す関数 hyouka を作成せよ。
#  5段階評価は、100〜90までは5、89〜80は4、79〜70は3、69〜60は2、60未満は1とする。
#  この関数を利用して、学生10人の試験の点数を入力して、
#  それぞれの5段階評価を求め一覧表を表示するプログラム quality.cpp を作成せよ。

'学生10人の試験の点数を入力して、それぞれの5段階評価を求め一覧表を表示する' :-
        '学生10人の試験の点数を入力して'(_10人の試験の点数),
        それぞれの5段階評価を求め(_10人の試験の点数,_評価ならび),
        一覧表を表示する(_評価ならび).

'学生10人の試験の点数を入力して'(_10人の試験の点数) :-
        length(_10人の試験の点数,10),
        学生番号・点数を入力(_10人の試験の点数).

学生番号・点数を入力(_10人の試験の点数) :-
        findall([_学生番号,_点数],
                    append(_,[_|_],_10人の試験の点数),
                    学生番号を入力(_学生番号),
                    点数を入力(_点数)),
                _10人の試験の点数).

学生番号を入力(_学生番号) :-
        write('学生番号を入力してください : '),
        get_line(_学生番号).

点数を入力(_点数) :-
        get_line(Line),
        点数入力診断(Line,_点数),!.
点数を入力(_点数) :- 点数を入力(_点数).

点数入力診断(Line,_点数) :-
        atom_to_term(Line,_点数,_),
        integer(_点数),
        _点数 >= 0,
        _点数 =< 100,!.
点数入力診断(Line,_点数) :-
        writef('入力された%tから点数が得られません。再入力をお願いします。[Line]),
        fail.

それぞれの5段階評価を求め(_10人の試験の点数,_評価ならび) :-
        findall([_学生番号,_試験の点数,_5段階評価],(
          append(_,[[_学生番号,_試験の点数]|_],_10人の試験の点数),
                    '5段階評価'(__100点満点の試験の点数,_5段階評価)),
                _評価ならび).

'5段階評価'(_試験の点数,5) :-
        '5段階評価は、100〜90までは5'(_試験の点数).
'5段階評価'(_試験の点数,4) :-
        '5段階評価は、89〜80は4'(_試験の点数).
'5段階評価'(_試験の点数,3) :-
        '5段階評価は、79〜70は3'(_試験の点数).
'5段階評価'(_試験の点数,2) :-
        '5段階評価は、69〜60は2'(_試験の点数).
'5段階評価'(_試験の点数,1) :-
        '5段階評価は、60点未満は1'(_試験の点数).

'5段階評価は、100〜90までは5'(_試験の点数) :-
        _試験の点数 >= 90,
        _試験の点数 =< 100,!.

'5段階評価は、89〜80は4'(_試験の点数) :-
        _試験の点数 >= 80,
        _試験の点数 =< 89,!.

'5段階評価は、79〜70は3'(_試験の点数) :-
        _試験の点数 >= 70,
        _試験の点数 =< 79,!.

'5段階評価は、69〜60は2'(_試験の点数) :-
        _試験の点数 >= 60,
        _試験の点数 =< 69,!.

'5段階評価は、60点未満は1'(_試験の点数) :-
        _試験の点数 < 60.

一覧表を表示する(_評価ならび) :-
        見出し表示,
        それぞれの評価を表示する(_評価ならび).

見出し表示 :-
        writef('%12r %12r %12r\n',[学生番号,試験成績,'5段階の評価']).

それぞれの評価を表示する([]).
それぞれの評価を表示する([[_学生番号,_試験の成績,_5段階の評価]|R]) :-
        writef('%12r %12r %12r\n',[_学生番号,_試験の成績,_5段階の評価]),
        それぞれの評価を表示する(R).