このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 159代目 #463 # 休み中の課題なのですが、わからないので教えて頂きたいです。 # # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): http://ime.nu/ideone.com/vb7pZ # # 飲食店の6月分の帳簿データbook-6.datがテキストで書かれてあり、中身を見てみると #  左端から、日付 支出(1)/収入(0) 商品名 単価 数量 #  20120601 1 meat 125 10000 #  20120602 1 rice 2000 10 #  20120603 0 uriage 500 100 #  20120603 1 beer 140 24 # となっているものとする。  ただし、支出は1、収入は0とする。 # このようなデータを読み取って残高を計算するプログラムを作りたい。以下のプログラムをコンパイルが通り、 # 目的の動作をするように直接書き込んで補いなさい。(どこを補うべきかも考えること) # ただし、商品名は空白を含まない文字列とし、繰り越し金はキーボードから入力し、変数kurikoshikinに代入するが、 # 入力後、その金額に間違いがないか確認するものとし、間違いがあるならば何度でも入力しなおすことができるものとする。 '飲食店の6月分の帳簿データbook-6.datからテキストデータを読み取って残高を計算する。ただし、商品名は空白を含まない文字列とし、繰り越し金はキーボードから入力し、変数kurikoshikinに代入するが、入力後、その金額に間違いがないか確認するものとし、間違いがあるならば何度でも入力しなおすことができるものとする。'(_残高表,_残高) :- '飲食店の6月分の帳簿データbook-6.datからテキストデータを読み取って'(_全行区切りならび), '繰り越し金はキーボードから入力し、変数kurikoshikinに代入するが、入力後、その金額に間違いがないか確認するものとし、間違いがあるならば何度でも入力しなおすことができるものとする。'(_繰越金), 繰越金を付加して残高を計算する(_全行区切りならび,_繰越金,_残高表,_残高). '飲食店の6月分の帳簿データbook-6.datからテキストデータを読み取って'(_全行区切りならび) :- 全行区切り入力('book-6.dat',[' ',','],_全行区切りならび). '繰り越し金はキーボードから入力し、変数kurikoshikinに代入するが、入力後、その金額に間違いがないか確認するものとし、間違いがあるならば何度でも入力しなおすことができるものとする。'(_繰越金) :- 整数を得る(繰越金,_繰越金候補), '入力後、その金額に間違いがないか確認するものとし、間違いがあるならば何度でも入力しなおすことができるものとする。'(_繰越金候補,_繰越金),!. '入力後、その金額に間違いがないか確認するものとし、間違いがあるならば何度でも入力しなおすことができるものとする。'(_繰越金候補,_繰越金) :- writef('入力された繰越金 %t で間違いありませんか?\n間違いがなければ改行\n間違っていたら 正しい繰越金を入力してください : ',[_繰越金候補]), 行入力(_行), 間違いがあるならば何度でも入力しなおす(_行,_繰越金候補,_繰越金),!. 間違いがあるならば何度でも入力しなおす('',_繰越金,_繰越金) :- !. 間違いがあるならば何度でも入力しなおす(_行,_,_繰越金) :- 間違いがある, read_term_from_atom(_行,_繰越金候補,[variable_names(_variable_names),varables(_variables)]), integer(_繰越金候補), '入力後、その金額に間違いがないか確認するものとし、間違いがあるならば何度でも入力しなおすことができるものとする。'(_繰越金候補,_繰越金). 間違いがある. 繰越金を付加して残高を計算する(_全行区切りならび,_繰越金,[[_日付,0,繰越金,0,0,_繰越金]|_残高表],_残高) :- _全行区切りならび = [[_日付|_]|_], 残高を計算する(_全行区切りならび,_繰越金,_残高表,_残高). 残高を計算する([],_残高,[],_残高). 残高を計算する([[_日付,_支出または収入区分,_商品名,_単価,_数量]|R1],_残高_1,[[_日付,_支出または収入区分,_商品名,_単価,_数量,_残高_2]|R2],_残高) :- 支出または収入区分に従って行の計算(_残高_1,_支出または収入区分,_単価,_数量,_残高_2), 残高を計算する(R1,_残高_2,R2,_残高). 支出または収入区分に従って行の計算(_残高_1,1,_単価,_数量,_残高_2) :- _残高_2 is _残高_1 - _単価 * _数量. 支出または収入区分に従って行の計算(_残高_1,0,_単価,_数量,_残高_2) :- _残高_2 is _残高_1 + _単価 * _数量. 全行区切り入力(_ファイル,_区切り文字列ならび,_全行区切りならび) :- 全行入力(_ファイル,_行ならび), findall(_区切り行,( member(_行,_行ならび), 区切り(_行,_区切り文字列ならび,_区切り行)),_全行区切りならび) . 全行入力(_ファイル,_行ならび) :- open(_ファイル,read,_入力), 行入力(_入力,_行), 行入力ならび(_入力,_行ならび), close(_入力). 行入力ならび(_入力,[]) :- at_end_of_stream(_入力),!. 行入力ならび(_入力,[_行|R]) :- 行入力(_入力,_行), 行入力ならび(_入力,R). 行区切り入力(_区切り文字列ならび,_語彙ならび) :- 行入力(_行), 区切り(_行,_区切り文字列ならび,_語彙ならび). 行入力(_行) :- read_line_to_codes(current_input,Codes), atom_codes(_行,Codes). 行入力(Instream,_行) :- read_line_to_codes(Instream,Codes), atom_codes(_行,Codes). 区切り('',_,[]) :- !. 区切り(_文字列,_区切り文字列ならび,[_前文字列|R]) :- member(_区切り文字列,_区切り文字列ならび), 副文字列(_文字列,_前文字列,_区切り文字列,_後文字列), 区切り(_後文字列,_区切り文字列ならび,R),!. 区切り(_文字列,_区切り文字ならび,[_文字列]) :- \+(member(_文字列,_区切り文字ならび)),!. 区切り(_,_,[]). 副文字列(_文字列,_前文字列,_適合文字列,_後文字列) :- atom_concat(_前文字列,_残り文字列,_文字列), atom_concat(_適合文字列,_後文字列,_残り文字列).