このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1276810079/340
#  [1] 授業単元: プログラミング開発基礎 
#  [2] 問題文 複数ありますのでこちらで 
#  http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10764.txt 
#  
# 1 問題1
# 整数値を読み込んで,その数が10 で割り切れるかどうかを表示するプログラムを作成せよ.
# なお,表示後に,もう一度続けるかの確認を促し,それに応じて何度でも繰り返せるようにすること
# 
# 2 問題2
# 非負の整数値を読み込んで,その桁数を表示するプログラムを作成せよ.
# なお,負の値を読み込んだ場合は,再入力を促すメッセージを表示すること.
#
# 3 問題3
# 二つの整数値を読み込んで,小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ.
# 4 問題4
# 9999 を読み込むまで次々と整数値を読み込んでいき,合計値および平均値を表示するプログラムを作成せよ.なお,最後に読み込んだ9999 は合計には加えないものとする


'整数値を読み込んで,その数が10 で割り切れるかどうかを表示する' :-
        催促付き整数入力('整数値を入力してください : ',N),
        '10で割り切れるか判定する'(N),
        write('入力を続けますか y or n : '),get_line(Line),
        Line = y,
        '整数値を読み込んで,その数が10 で割り切れるかどうかを表示する'.
'整数値を読み込んで,その数が10 で割り切れるかどうかを表示する'.

'10で割り切れるか判定する'(N) :- 0 is N mod 10,
        write_formatted('あなたの入力した数%tは10で割り切れます\n',[N]),!.
'10で割り切れるか判定する'(N) :-
        write_formatted('あなたの入力した数%tは10で割り切れません\n',[N]),!.

'非負の整数値を読み込んで,その桁数を表示する' :-
        催促付き整数入力('非負の整数値を入力してください : ',N),N >= 0,
        入力された整数の桁数を表示する(1,N),
        write_formatted('入力を続けますか y or n : '),get_line(Line),
        Line = y,
        '非負の整数値を読み込んで,その桁数を表示する'.
'非負の整数値を読み込んで,その桁数を表示する'.

入力された整数の桁数を表示する(M,N) :-
        truncate(10 ^ M) > N,write_formatted('入力された非負整数は%桁です\n',[M]),!. 
入力された整数の桁数を表示する(M1,N) :- M2 is M1 + 1,入力された整数の桁数を表示する(M2,N).

二つの整数値を読み込んで,小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示する :-
        write('整数値をカンマで区切り二つ読み込みます : '),
        get_split_line([','],[N1,N2]),
        小さい順に(N1,N2,N3,N4),
        findsum(N,for(N3,N,N4),Sum1),
        Sum is truncate(Sum1),
        write_formatted('%t以上%t以下のすべての整数の和は%tです。\n',[N3,N4,Sum]).

小さい順に(N1,N2,N1,N2) :- N1 =< N2,!.
小さい順に(N1,N2,N2,N1) :- N1 > N2,!.

'9999 を読み込むまで次々と整数値を読み込んでいき,合計値および平均値を表示する' :-
        findall(N,(repeat,get_integer(N),(N=9999,!,fail;true)),L),
        length(L,Len),\+(Len=0),
        合計値および平均値(L,Len,0,_合計値,_平均値),
        write_formatted('合計値 = %t, 平均値 = %t\n',[_合計値,_平均値]).

合計値および平均値([],Len,_合計値,_合計値,_平均値) :- _平均値 is _合計値 / Len,!.
合計値および平均値([N|R],Len,_合計値1,_合計値,_平均値) :-
        _合計値2 is _合計値 + N,
        合計値および平均値(R,Len,_合計値2,_合計値,_平均値).