Browse Source

task part 3

221V 3 years ago
parent
commit
8cdd359f99
1 changed files with 65 additions and 0 deletions
  1. 65 0
      src/test3.pl

+ 65 - 0
src/test3.pl

@@ -0,0 +1,65 @@
+:-module(test3,
+  [bonus_check/4,
+   test/0]).
+
+
+/*
+
+3. Описать правило акции супермаркета, используя Пролог.
+  Правило: если покупатель купил товар с кодом 5111 акционной группы 565,
+  то ему начисляются двойные бонусы на счет за данный товар.
+  Сумма покупки - 50 грн.
+  Описание вида: bonus_check(GroupProduct, ProductID, CostProduct, Bonus).
+
+*/
+
+% bonus_check(GroupProduct, ProductID, CostProduct, Bonus). % CostProduct в копійках
+bonus_check(565, 5111, 50_00, _Bonus).
+
+
+% для акційного товару бонус (% від суми) подвоюється
+test() :- 
+  Items = [[1, 2, 5_00, 5], [1, 3, 10_00, 5], [2, 5, 150_00, 5],
+    [2, 255, 7_500_00, 5], [565, 5171, 50_00, 10], [565, 5111, 50_00, 10]],
+  test1(Items).
+
+test1([]) :- true.
+test1([V|T]) :- 
+  [G, P, C, B] = V,
+  bonus_check(G, P, C, B),
+  format("~w -> ~w", [bonus_check(G, P, C, B), true]),
+  bonus_calc(true, B, C),
+  test1(T);
+  % bonus false
+  format("bonus_check(~w,~w,~w,~w) -> false", V),
+  [_G, _P, C, B] = V,
+  bonus_calc(false, B, C),
+  test1(T).
+
+bonus_calc(true, B, C) :- 
+  Bonus_Value is floor((B * 2 * C) / 100),
+  format(" ; Bonus value = ~w~n", [Bonus_Value]).
+bonus_calc(_D, B, C) :- 
+  Bonus_Value is floor((B * C) / 100),
+  format(" ; Bonus value = ~w~n", [Bonus_Value]).
+
+
+/*
+
+$ prolog
+
+?- consult(test3).
+true.
+
+?- test().
+bonus_check(1,2,500,5) -> false ; Bonus value = 25
+bonus_check(1,3,1000,5) -> false ; Bonus value = 50
+bonus_check(2,5,15000,5) -> false ; Bonus value = 750
+bonus_check(2,255,750000,5) -> false ; Bonus value = 37500
+bonus_check(565,5171,5000,10) -> false ; Bonus value = 500
+bonus_check(565,5111,5000,10) -> true ; Bonus value = 1000
+true
+
+*/
+
+