このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/611
#  [1] 授業単元: C言語 
#  [2] 問題文(含コード&リンク):  
#  http://ime.nu/www1.axfc.net/uploader/File/so/55622 ←問題文です 
#  http://ime.nu/www1.axfc.net/uploader/File/so/55623 ←datファイルです 
#  
#   (1) C言語における各文の基本機能に対する設問。						
#    (例えば、下記の様なもの)						
#     ・変数の宣言、型						
#     ・代入文 (四則演算、剰余、演算子等を含む)						
#     ・if文 						
#     ・while文 						
#     ・for文						
#     ・switch/case文						
#  						
#   (2) 課題による実際のプログラミング。						
#     ・hドライブのogawaフォルダ配下のkyuuyo.datからデータを入力し、そのデータを						
#      金額とした時の金種の一覧を表示するプログラムを作成せよ。						
#    但し、kyuuyo.datファイルはint型の複数データが格納されたバイナリファイルとする。						

'hドライブのogawaフォルダ配下のkyuuyo.datからデータを入力し、そのデータを金額とした時の金種の一覧を表示するプログラムを作成せよ。但し、kyuuyo.datファイルはint型の複数データが格納されたバイナリファイルとする。' :-
        'hドライブのogawaフォルダ配下のkyuuyo.datからデータを入力し'(_金額ならび),
        write(',給与,一万円,五千円,千  円,五百円,百  円,五十円,十  円,五  円,一  円\n'),
        'そのデータを金額とした時の金種の一覧を表示する'(1,_金額ならび,0,_,[0,0,0,0,0,0,0,0,0],_).

'hドライブのogawaフォルダ配下のkyuuyo.datからデータを入力し'(_金額ならび) :-
        open('h:\\ogawa\\kyuuyo.dat',read,instream,[type(binary)]),
        データを入力(Instream,L),
        close(Instream).

データを入力(Instream,[]) :- at_end_of_stream(Instream),!.
データを入力(Instream,[N|R]) :-
        '4byteづつ入力する'(Instream,[N1,N2,N3,N4]),
        N is N1 * 256 * 256 * 256 + N2 * 256 * 256 + N3 * 256 + N4,
        データを入力(Instream,R).

'4byteづつ入力する'(Instream,[]) :- !.
'4byteづつ入力する'(Instream,[N|R]) :-
        get_byte(Instream,N),
        '4byteづつ入力する'(Instream,R).

'そのデータを金額とした時の金種の一覧を表示する'(_,[],_金額合計,_金額合計,LS,LS) :-
        金種表示(' ',_金額合計,LS),!.
'そのデータを金額とした時の金種の一覧を表示する'(N,[_金額|R],_金額合計1,_金額合計,LS1,LS) :-
        _金額合計2 is _金額合計1 + _金額,
        金種計算(_金額,_金種ならび,LS1,LS2),
        金種表示(N,_金額,_金種ならび),
        N2 is N + 1,
        'そのデータを金額とした時の金種の一覧を表示する'(N2,R,_金額合計2,_金額合計,LS2,LS).

金種計算(_金額,_金種ならび,LS1,LS) :-
        金種計算(_金額,[10000,5000,1000,500,100,50,10,5,1],_金種ならび,LS1,LS).

金種計算(_,[],[],[],[]) :- !.
金種計算(K,[K1|R1],[K2|R2],[S1|R3],[S2|R4]) :-
         K2 is K // K1,
         K3 is K mod K1,
         S2 is S1 + K2,
         金種計算(K3,R1,R2,R3,R4).

金種表示(N,_金額,_金種ならび) :-
        write_formatted('%t,%t,%t,%t,%t,%t,%t,%t,%t,%t,%t\n',[N,_金額|_金種ならび]).