このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/2
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文:単価と数量を入力するごとに金額を表示し、データ入力終了後合計金額と、千円札のみで払う場合の枚数と釣り銭を表示しなさい。なお、入力データのの終わりは単価0とする。 
#  実行例 
#  300 2         <ーーデータ入力 
#  300*2=600円     <ー表示 
#  250 5 
#  250*5=1250円 
#  100 1 
#  100*1=100円 
#  1500 2 
#  1500*2=3000円 
#  350 4 
#  350*4=1400円 
#  0 0         <ーーデータの終わり 
#  合計金額 6350円   <ーー合計表示 
#  1000円札 7枚     <ーー1000円札の枚数表示 
#  釣り銭 650円     <ーー釣り銭の金額表示 
#   
#  

単価と数量を入力するごとに金額を表示し、データ入力終了後合計金額と、千円札のみで払う場合の枚数と釣り銭を表示しなさい。なお、入力データのの終わりは単価0とする。 :-
        単価と数量の入力(_単価,_数量),
        '単価と数量を入力(入力データの終わりは単価0とする)するごとに金額を表示し、'(_単価,_数量,_合計金額),
        データ入力終了後合計金額と、千円札のみで払う場合の枚数と釣り銭を表示しなさい。

'単価と数量を入力(入力データのの終わりは単価0とする)するごとに金額を表示し、'(0,_,0) :- !.
'単価と数量を入力(入力データのの終わりは単価0とする)するごとに金額を表示し、'(_単価,_数量,_合計金額) :-
        _金額 is _単価 * _数量,
        write_formatted('%t * %t = %t円\n',[_単価,_数量,_金額]),
        単価と数量の入力(_単価_2,_数量_2),
        '単価と数量を入力(入力データのの終わりは単価0とする)するごとに金額を表示し、'(_単価_2,_数量_2,_合計金額_2).
        _合計金額 is _合計金額_2 + _金額,!.

単価と数量の入力(_単価,_数量) :-
        get_line(Line),
        単価と数量の入力(Line,_単価,_数量).

単価と数量の入力(Line,0,0) :- split(Line,[' '],[0]),!.
単価と数量の入力(Line,_単価,_数量) :- split(Line,[' '],[_単価,_数量]).

データ入力終了後合計金額と、千円札のみで払う場合の枚数と釣り銭を表示しなさい。(_合計金額) :-
        0 is _合計金額 mod 1000,
        _千円札の枚数 is _合計金額 // 1000,
        write_formatted('合計金額 %t円\n千円札の枚数 %t枚,釣り銭 %t円\n',[_合計金額,_千円札の枚数,0]),!.
データ入力終了後合計金額と、千円札のみで払う場合の枚数と釣り銭を表示しなさい。(_合計金額) :-
        \+(0 is _合計金額 mod 1000),
        _千円札の枚数 is (_合計金額 // 1000) + 1,
        _釣り銭 is 1000 * _千円札の枚数 - _合計金額,
        write_formatted('合計金額 %t円\n千円札の枚数 %t枚,釣り銭 %t円\n',[_合計金額,_千円札の枚数,0]),!.