A soft drink vending machine accepts coins for a variety of products.
When the amount of money deposited into the machine is equal to or greater than
the price of any of its available products, the respective product selection
buttons will be enabled for the user to make the selection .After the user has
made a valid selection, the machine wil dispense the soft drink, together with
the change (if applicable). Draw the Activity Diagram for this vending machine.
State clearly about assumptions and limitations you have considered during your
design.
Algorithm Name: Vending Machine
Assumptions:
- only
dispense change in coins (5, 10, 25 cents)
- different
items could have different costs
- users
can press a button for requested item type, or to return all input money
- there
is a message window, can call "print(string)" and it will
display.in LED
- there
is a "dispense(item type)" function
- assume
that machine will reject all coins except US nickel, dime, or
quarter
- it is
our responsibility to update Bal and coins[C], but the
machine will keep track of available[X] for us
Representation:
- there
is a counter called "Bal" that keeps track of total of
coins input so far
- cans
could have different costs: cost[X]
- available[X]
is a boolean variable that indicates whether there is ³1
of X left
- the
internal reservoir of coins is
represented by coins[C] where C is 5, 10, or 25 and returns an
ordinal number for how many coins of that type there are inside
Strengths
- if
machine is completely out of requested choice (or all cans), user can ask
for their money back
- algorithm
is guaranteed never to give back more than the balance
- if the
user just asks for their money, back we can guarantee to always make
change (at least by using the coins
they input, but not necessarily)
Limitations:
- it is
possible that this algorithm might by unable to make change, for
example, in the case where a user puts in $1.00 (4 quarters), buys an item
that costs $0.90, and we have no dimes or nickels to start with
Pseudocode:
if user inputs a legal
coin C (e.g. 5, 10, or 25):
coins[C] = coins[C]+1
Bal = Bal+C
if user presses the 'return
change' button:
make_change(Bal)
Bal = 0
if user presses
button for can of type X:
if available[X]=False:
print("unavailable, make another
choice")
else if Bal<cost(X):
print("insufficient funds, put in more
money")
else:
dispense(X) // machine will update
available[X]
make_change( Bal-cost(X))
Bal = 0
subroutine
make_change(Bal):
while Bal>0:
if Bal>25 and coins[25]>0:
dispense quarter
coins[25] = coins[25]-1
Bal = Bal-25
else if Bal>10 and coins[10]>0:
dispense dime
coins[10] = coins[10]-1
Bal = Bal-10
else if Bal>5 and coins[5]>0:
dispense nickel
coins[5] = coins[5]-1
Bal = Bal-5