このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/144
#  [1] 授業単元:プログラム設計応用 
#  [2] 問題文:入力した点数の合計(gokei)を表示 
#  人数は3、点数は80、70、60と入力し、最終的に「3名の合計点は210です。」と 
#  表示させるために、【___】に当てはまる式を答えよ 
#   
#  #include <stdio.h> 
#  main() 
#  { 
#   int n, ten, i, 【______】; 
#   printf("人数を入力:"); 
#   scanf("%d",&n); 
#   for(i=1;i<=n;i++){ 
#    printf("点数を入力:"); 
#    scanf("%d",&ten); 
#    if(ten>=80) 
#     printf("点数は %d 点です。合格です。\n",ten); 
#    else 
#     printf("点数は %d 点です。不合格です。\n",ten); 
#    【______】 
#   } 
#   【______】; 
#  } 
#    
#  
#  「合格者は2名で合計点は170です。不合格者は2名で合計点は80です。」 
#  と表示させるためにはどう書き換えたらいいのでしょうか。 
#   
#  ちなみに 
#   
#  合格者人数 g_n 
#  合格者合計 g_gokei 
#  不合格者人数 f_n 
#  不合格者合計 f_gokei 
#   
#  と、指定するとします。 
# 

'入力した点数の合計を表示。人数は3、点数は80、70、60と入力し、最終的に「3名の合計点は210です。」と表示させる' :-
        入力した点数の合計(_人数,_合格者人数,_合格者合計,_不合格者人数,_不合格者合計,_入力した点数の合計),
        表示(_人数,_合格者人数,_合格者合計,_不合格者人数,_不合格者合計,_入力した点数の合計).

入力した点数の合計(_人数,_合格者人数,_合格者合計,_不合格者人数,_不合格者合計,_入力した点数の合計) :-
        人数は(_人数),
        点数は(_人数,_合否付き点数ならび),
        点数の合計(_合否付き点数ならび,_合格者人数,_合格者合計,_不合格者人数,_不合格者合計,_入力した点数の合計).

人数は(_人数) :-
        write('入力する人数は : '),
        get_line(Line),
        入力する人数診断(Line,_人数),!.
人数は(_人数) :-
        人数は(_人数).

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

点数は(_人数,_点数ならび) :-
        length(_点数ならび,_人数),
        findall([_点数,_判定],(
                    append(L0,[_|_],_点数ならび),
                    点数入力([_|L0],_点数),
                    合否判定(_点数,_判定)),
                _点数ならび).

点数入力(Ln,_点数) :-
        length(Ln,N),
        writef('%t人目の点数 : ',[N]),
        get_line(Line),
        点数入力診断(Line,_点数),!.
点数入力(Ln,_点数) :-
        点数入力(Ln,_点数).

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

合否判定(_点数,合格) :-
        _点数 >= 80.
合否判定(_点数,不合格) :-
        _点数 < 80.

点数の合計(_合否付き点数ならび,_合格者人数,_合格者合計,_不合格者人数,_不合格者合計,_入力した点数の合計).
点数の合計([],0,0,0,0,0).
点数の合計([[_点数,合格]|R],_合格者人数,_合格者合計,_不合格者人数,_不合格者合計,_入力した点数の合計) :-
        点数の合計(R,_合格者人数_1,_合格者合計_1,_不合格者人数,_不合格者合計,_入力した点数の合計_1),
        点数と人数を加算する(_点数,_合格者人数_1,_合格者合計_1,_合格者人数,_合格者合計).
点数の合計([[_点数,不合格]|R],_合格者人数,_合格者合計,_不合格者人数,_不合格者合計,_入力した点数の合計) :-
        点数の合計(R,_合格者人数,_合格者合計,_不合格者人数_1,_不合格者合計_1,_入力した点数の合計_1),
        点数と人数を加算する(_点数,_不合格者人数_1,_不合格者合計_1,_入力した点数の合計_1,_不合格者人数,_不合格者合計,_入力した点数の合計).

点数と人数を加算する(_点数,_人数_1,_点数の合計_1,_入力した点数の合計_1,_人数,_点数の合計,_入力した点数の合計) :-
        _人数 is _人数_1 + 1,
        _点数の合計 is _点数の合計_1 + _点数,
        _入力した点数の合計 is _入力した点数の合計_1 + _点数,!.

表示(_人数,_合格者人数,_合格者合計,_不合格者人数,_不合格者合計,_入力した点数の合計) :-
        writef('%t名の合計点は%tです。\n\n',[_人数,_入力した点数の合計]),
        writef('合格者人数 %t\n合格者合計 %t\n不合格者人数 %t\n不合格者合計 %t\n',[_合格者人数,_合格者合計,_不合格者人数,_不合格者合計]).