?- 'a##'. c159-130#
このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1342966104/130
#   
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク): 
#  学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し、 
#  平均点より20点以上を                S 
#                +20点未満+10点以上をA 
#                +10点未満平均点以上をB 
#                平均点未満-20点以上をC 
#        -20点未満を                F 
#  と評価し、学籍番号とその得点をS〜Fの評価によって分けて出力するプログラムを作成してください。 
#   
#  

'学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し、平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し、学籍番号とその得点をS〜Fの評価によって分けて出力する' :-
        '学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し'(_学籍番号_得点ならび),
        '平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し、学籍番号とその得点をS〜Fの評価によって分けて出力する'(_学籍番号_得点ならび).

'学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し'(_学籍番号_得点ならび) :-
        '学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し'([],_学籍番号_得点ならび).

'学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し'(LL,LL) :-
        at_end_of_stream(user_input),!.
'学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し'(LL_1,LL) :-
        整数を得る('学籍番号(数字1〜10)',(_学籍番号>=1,_学籍番号=<10),_学籍番号),
        \+(member([_学籍番号,_],LL_1)),
        整数を得る(得点を得る,(_得点>=0,_得点=<100),_得点),
        '学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し'([[_学籍番号,_得点]|LL_1],LL).
'学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し'(LL_1,LL) :-
        '学籍番号(数字1〜10)と、それぞれの学籍番号ごとの得点を入力し'(LL_1,LL).

'平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し、学籍番号とその得点をS〜Fの評価によって分けて出力する'(_学籍番号_得点ならび) :-
        平均点を得る(_学籍番号_得点ならび,_平均点),
        member(_評価,['S','A','B','C','F']),
        member([_学籍番号,_得点],_学籍番号_得点ならび),
        '平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し'(_得点,_平均点,_評価),
        writef('評価: %t, 学籍番号: %t 得点: %t\n',[_評価,_学籍番号,_得点]),
        fail.
'平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し、学籍番号とその得点をS〜Fの評価によって分けて出力する'(_).

'平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し'(_得点,_平均点,'S') :-
        '平均点より20点以上をS'(_得点,_平均点,_).
'平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し'(_得点,_平均点,'A') :-
        '+20点未満+10点以上をA'(_得点,_平均点,_).
'平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し'(_得点,_平均点,'B') :-
        '+10点未満平均点以上をB'(_得点,_平均点,_).
'平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し'(_得点,_平均点,'C') :-
        '平均点未満-20点以上をC'(_得点,_平均点,_).
'平均点より20点以上をS +20点未満+10点以上をA +10点未満平均点以上をB 平均点未満-20点以上をC -20点未満をF と評価し'(_得点,_平均点,'F') :-
        '-20点未満をF'(_得点,_平均点,_).

平均点を得る(_学籍番号_得点ならび,_平均点) :-
        findavg(_得点,(
                    member([_,_得点],_学籍番号_得点ならび)),
                _平均点).

'平均点より20点以上をS'(_得点,_平均点,'S') :-
        _得点 >= _平均点 + 20,!.

'+20点未満+10点以上をA'(_得点,_平均点,'A') :-
        _得点 < _平均点 + 20,
        _得点 >= _平均点 + 10,!.

'+10点未満平均点以上をB'(_得点,_平均点,'B') :-
        _得点 < _平均点 + 10,
        _得点 >= _平均点,!.

'平均点未満-20点以上をC'(_得点,_平均点,'C') :-
        _得点 < _平均点,
        _得点 >= _平均点 - 20,!.

'-20点未満をF'(_得点,_平均点,'F') :-
        _得点 < _平均点 - 20,!.