このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/621
#  [1] C言語演習 
#  [2]  http://ime.nu/codepad.org/QMwiwwtp を改良して、 
#    80〜100:優 70〜 79:良 60〜 69:可 0〜 59:不可 
#   の分布グラフを表示するプログラムを作成しなさい。 
#  【実行結果】 
#  点数を入力してください。 
#   1番:17 
#   2番:38 
#   3番:100 
#   4番:95 
#   5番:23 
#  □ 分布グラフ □ 
#   優:** 
#   良: 
#   可: 
#  不可:*** 
#  ◆´,魏造して、「不可一覧表」も表示できるようにしなさい。 
#  【実行結果】 
#  ,離廛蹈哀薀爐硫爾 
#  不可一覧表 
#   1番 ( 17点) 
#   2番 ( 38点) 
#   5番 ( 23点) 
#  と表示させる。 
#   配列を利用して、23番目までのフィボナッチ数列を画面に整列させた状態で表示させなさい。 
#  1,1,2,3,5,8,13,21,34,…  
#   [3.1] Windows7 
#   [3.3] C言語 
#  [4] 木曜19時まで 
#  [5] 配列まで  
#  わかる方どうかよろしくお願いします。 
# 
# 

'入力する人数を得て、その人数分の点数を入力する。それを80〜100:優 70〜 79:良 60〜 69:可 0〜 59:不可 の分布グラフとして表示しなさい。さらに不可一覧表も表示しなさい' :-
        入力する人数を得る(_人数),
        n人分の点数を得る(_人数,_点数ならび),
        グラフ分布(_点数ならび,L1,L2,L3,L4),
        グラフ表示(L1,L2,L3,L4),
        不可一覧表表示(_点数ならび).

入力する人数を得る(_人数) :-
        write('入力する人数を入れてください : '),
        get_line(Line),
        入力する人数診断(Line,_人数),!.
入力する人数を得る(_人数) :- 入力する人数を得る(_人数).

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

n人分の点数を得る(_n人分,_点数ならび) :-
        length(_点数ならび,_n人分),
        findall(_点数,(
                    append(_,[_点数|_],_点数ならび),
                    点数を入力してください(_点数)),
                _点数ならび).

点数を入力してください(_点数) :-
        writef('点数を入力してください : '),
        get_line(Line,_点数,_),
        点数入力診断(Line,_点数),!.
点数を入力してください(_点数) :- 点数を入力してください(_点数).

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

グラフ分布([],[],[],[],[]).
グラフ分布([_点数|R],[*|L1],L2,L3,L4) :-
        _点数 >= 80,_点数 =< 100,
        グラフ分布(R,L1,L2,L3,L4).
グラフ分布([_点数|R],L1,[*|L2],L3,L4) :-
        _点数 >= 70,_点数 =< 79,
        グラフ分布(R,L1,L2,L3,L4).
グラフ分布([_点数|R],L1,L2,[*|L3],L4) :-
        _点数 >= 60,_点数 =< 69,
        グラフ分布(R,L1,L2,L3,L4).
グラフ分布([_点数|R],L1,L2,L3,[*|L4]) :-
        _点数 >= 0,_点数 =< 59,
        グラフ分布(R,L1,L2,L3,L4).

グラフ表示(L1,L2,L3,L4) :-
        concat_atom(L1,_優),
        concat_atom(L2,_良),
        concat_atom(L3,_可),
        concat_atom(L4,_不可),
        writef(' 優: %t\n 良: %t\n 可: %t\n不可: %t\n',[_優,_良,_可,_不可]).

不可一覧表表示(_点数ならび) :-
       append(L0,[_点数|_],_点数ならび),
       _点数 < 60,
       length([_|L0],_n番目),
       writef('[%t番目] %t点\n',[_n番目,_点数]),
       fail.
不可一覧表表示(_点数ならび).