このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 128代目 #764 # [2] 問題文(含コード&リンク): # 問3:1週間の売り上げ一覧を表示するプログラムを作成せよ。 #    実行例  野菜の1週間の売り上げた合計数量と合計金額 #                             合計  合計 #         種類 単価 月 火 水 木 金 土 日 数量  金額 #         レタス 150 50 55 60 65 70 75 80 455  68250 #         トマト  50 20 25 30 35 40 45 50 245  12250 #         もやし  20 10 15 20 25 30 35 40 175  3500 #         ナスビ  40 5  10 15 20 25 30 35 140  5600 週計表(_起点日付,_起点曜日,_終点日付,_終点曜日) :- 週計表見出し表示(_起点日付,_起点曜日,_終点日付,_終点曜日), forall( 週計表商品表示順(_商品名), 週計表明細表示(_商品名,_起点日付,_起点曜日,_終点日付,_終点曜日)). 週計表見出し表示(_起点日付,_起点曜日,_終点日付,_終点曜日) :- write('種類 単価'), 曜日見出し文字列(_起点日付,_起点曜日,_終点日付,_終点曜日,_曜日文字列), writef('%w 数量合計 金額合計\n',[_曜日文字列]). '数量・金額合計と平均単価を得る'(_商品名,_起点日付,_終点日付,_数量合計,_金額合計,_平均単価) :- 商品別数量合計(_商品名,_起点日付,_終点日付,_数量合計), 数量合計が0でなければ金額合計と平均単価を得る(_数量合計,_金額合計,_平均単価). 数量合計が0でなければ金額合計と平均単価を得る(_数量合計,_金額合計,_平均単価) :- 数量合計が0でなければ(_数量合計), 金額合計と平均単価を得る(_数量合計,_金額合計,_平均単価). 数量合計が0でなければ(_数量合計) :- \+('0である'(_数量合計)). '0である'(0). '0である'(0.0). 金額合計と平均単価を得る(_数量合計,_金額合計,_平均単価) :- 商品別金額合計(_商品名,_起点日付,_終点日付,_金額合計), _平均単価 is truncate(round(_金額合計 / _数量合計)). 週計表明細表示(_商品名,_起点日付,_起点曜日,_終点日付,_終点曜日) :- '数量・金額合計と平均単価を得る'(_商品名,_起点日付,_終点日付,_数量合計,_金額合計,_平均単価), writef('%10w %4r ',[_商品名,_平均単価]), 曜日別数量表示(_商品名,_起点日付,_起点曜日,_終点日付,_終点曜日), writef('%6r %6r\n',[_数量合計,_金額合計]),!. 曜日別数量表示(_商品名,_日付,_曜日,_日付,_曜日) :- !. 曜日別数量表示(_商品名,_日付,_曜日,_終点日付,_終点曜日) :- 日計売上(_日付,_商品名,_数量), writef('%4r ',[_数量]), '前日・今日'(_日付,_曜日,_翌日,_翌日の曜日), 曜日別数量表示(_商品名,_翌日,_翌日の曜日,_終点日付,_終点曜日). 商品別数量合計(_起点日付,_終点日付,_数量合計) :- findsum(_数量,( 日計売上(_商品名,_日付,_数量), _日付 @>= _起点日付, _日付 @=< _終点日付)), _数量合計浮動小数点数), _数量合計 is truncate(_数量合計浮動小数点数). 商品別金額合計(_起点日付,_終点上限,_金額合計) :- findsum(_金額,( 日計売上(_商品名,_日付,_数量), _日付 @>= _起点日付, _日付 @=< _終点日付), 単価取得(_商品名,_日付,_単価), _金額 is _数量 * _単価)), _金額合計浮動小数点数), _金額合計 is truncate(_金額合計浮動小数点数). 単価取得(_商品名,_商品名,_日付,_単価) :- 単価(_商品名,_日付下限,_日付上限,_単価), _日付 @>= _日付下限, _日付 @=< _日付上限,!. 単価取得(_商品名,_商品名,_日付,_単価) :- 既定単価(_商品名,_単価). 曜日見出し文字列(_終点日付,_終点曜日,_終点日付,_終点曜日,_文字列) :- concat_atom([' ',_終点曜日,' '],_文字列),!. 曜日見出し文字列(_日付,_曜日,_終点日付,_終点曜日,_文字列) :- concat_atom([' ',_曜日,' '],文字列1), '前日・今日'(_日付,_曜日,_翌日,_翌日の曜日), 曜日見出し文字列(_翌日,_翌日の曜日,_終点日付,_終点曜日,_文字列2). concat_atom([_文字列1,_文字列2],_文字列). 日計売上(2009 / 6 / 29,もやし,10). 日計売上(2009 / 6 / 29,トマト,20). 日計売上(2009 / 6 / 29,ナスビ,5). 日計売上(2009 / 6 / 29,レタス,50). 日計売上(2009 / 6 / 30,もやし,15). 日計売上(2009 / 6 / 30,トマト,25). 日計売上(2009 / 6 / 30,ナスビ,10). 日計売上(2009 / 6 / 30,レタス,55). 日計売上(2009 / 6 / 30,ルッコラ,10). 日計売上(2009 / 7 / 1,もやし,20). 日計売上(2009 / 7 / 1,トマト,30). 日計売上(2009 / 7 / 1,ナスビ,15). 日計売上(2009 / 7 / 1,レタス,60). 日計売上(2009 / 7 / 2,もやし,25). 日計売上(2009 / 7 / 2,トマト,35). 日計売上(2009 / 7 / 2,ナスビ,20). 日計売上(2009 / 7 / 2,レタス,65). 日計売上(2009 / 7 / 2,ルッコラ,5). 日計売上(2009 / 7 / 3,もやし,30). 日計売上(2009 / 7 / 3,トマト,40). 日計売上(2009 / 7 / 3,ナスビ,25). 日計売上(2009 / 7 / 3,レタス,70). 日計売上(2009 / 7 / 4,もやし,35). 日計売上(2009 / 7 / 4,トマト,45). 日計売上(2009 / 7 / 4,ナスビ,30). 日計売上(2009 / 7 / 4,レタス,75). 日計売上(2009 / 7 / 5,もやし,40). 日計売上(2009 / 7 / 5,トマト,50). 日計売上(2009 / 7 / 5,ナスビ,35). 日計売上(2009 / 7 / 5,レタス,80). 週計表商品表示順(レタス). 週計表商品表示順(トマト). 週計表商品表示順(ルッコラ). 週計表商品表示順(ルバーブ). 週計表商品表示順(ナスビ). 週計表商品表示順(もやし). 単価(レタス,2009/6/1,2009/6/30,150). 単価(レタス,2009/7/1,2009/7/10,120). 単価(トマト,2009/6/1,2009/7/3,50). 単価(トマト,2009/7/4,2009/7/10,60). 単価(もやし,2009/6/1,2009/7/10,20). 単価(ナスビ,2009/6/1,2009/7/10,40). 単価(ルッコラ,2009/6/1,2009/7/3,80). 単価(ルッコラ,2009/7/4,2009/7/10,100). 単価(ルバーブ,2009/6/1,2009/7/10,120). 既定単価(レタス,150). 既定単価(トマト,50). 既定単価(もやし,20). 既定単価(ナスビ,40). 既定単価(ルッコラ,80). 既定単価(ルバーブ,120). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '前日・今日'(_前日の年 / 12 / 31,_前日の曜日,_年 / 1 / 1,_曜日) :- 一つ違い(_前日の年,_年), 曜日連鎖(_前日の曜日,_曜日),!. '前日・今日'(_年 / 2 / 29,_前日の曜日,_年 / 3 / 1,_曜日) :- うるう年(_年), 曜日連鎖(_前日の曜日,_曜日),!. '前日・今日'(_年 / 2 / 28,_前日の曜日,_年 / 3 / 1,_曜日) :- \+('うるう年'(_年)), 曜日連鎖(_前日の曜日,_曜日),!. '前日・今日'(_年 / _前月 / 30,_前日の曜日,_年 / _月 / 1,_曜日) :- 一つ違い(_前月,_月), member(_前月,[4,6,9,11]), 曜日連鎖(_前日の曜日,_曜日),!. '前日・今日'(_年 / _前月 / 31,_前日の曜日,_年 / _月 / 1,_曜日) :- 一つ違い(_前月,_月), member(_前月,[1,3,5,7,8,10,12]), 曜日連鎖(_前日の曜日,_曜日),!. '前日・今日'(_年 / _月 / _前日,_前日の曜日,_年 / _月 / _日,_曜日) :- 一つ違い(_前日,_日), 曜日連鎖(_前日の曜日,_曜日),!. '前日・今日'(_前日の年 / 12 / 31,_年 / 1 / 1) :- 一つ違い(_前日の年,_年),!. '前日・今日'(_年 / 2 / 29,_年 / 3 / 1) :- 'うるう年'(_年),!. '前日・今日'(_年 / 2 / 28,_年 / 3 / 1) :- \+('うるう年'(_年)),!. '前日・今日'(_年 / _前月 / 30,_年 / _月 / 1) :- 一つ違い(_前月,_月), member(_前月,[4,6,9,11]),!. '前日・今日'(_年 / _前月 / 31,_年 / _月 / 1) :- 一つ違い(_前月,_月), member(_前月,[1,3,5,7,8,10,12]),!. '前日・今日'(_年 / _月 / _前日,_年 / _月 / _日) :- 一つ違い(_前日,_日),!. 一つ違い(M,N) :- integer(M), !, N is M + 1 . 一つ違い(M,N) :- integer(N), !, M is N - 1 . 曜日連鎖(月曜,火曜). 曜日連鎖(火曜,水曜). 曜日連鎖(水曜,木曜). 曜日連鎖(木曜,金曜). 曜日連鎖(金曜,土曜). 曜日連鎖(土曜,日曜). 曜日連鎖(日曜,月曜). うるう年(_年文字列) :- atom(_年文字列), atom_to_term(_年文字列,_年整数,_), !, うるう年(_年整数). うるう年(_年) :- 0 is _年 mod 400,!. うるう年(_年) :- 0 is _年 mod 100, !, fail. うるう年(_年) :- 0 is _年 mod 4,!. うるう年(_年) :- \+(0 is _年 mod 4), fail.