program ChangeMaker; { changepr.pas } { This program inputs an item cost and an amount paid } { and calculates change in quarters, dimes, nickels, } { and pennies } { Author: Jerry Mead } { Date: Feb. 1993 } { Modified: Xiannong Meng } { 1. use procedures to divide the program } { into smaller pieces } { 2. use one common procedure for all types } { of coins } { 3. use procedures with parameters } { Sept. 1994 } uses WinCrt; const SalesTaxRate = 0.075; { sales tax rate is a constant } { Procedure declaration part } procedure ReadParameters( var ItemCost : integer; { price of the item } var AmountPaid : integer { amount attended } ); { This procedure reads input from user } begin { of ReadParameters } Write ('Specify cost (in cents) >> '); ReadLn (ItemCost); Write ('Specify amount paid (in cents) >> '); ReadLn (AmountPaid); end; { of ReadParameters } procedure CalculateChange( ItemCost : integer; { price of the item } AmountPaid : integer; { amount attended } var Amount2Return : integer { amount of change} ); { This procedure calculates various values } var TotalCost : integer; { compute item's cost including tax } begin { of CalculateChange } { Calcuate the total cost and the amount to return } TotalCost := round (ItemCost * (1 + SalesTaxRate)); Amount2Return := AmountPaid - TotalCost; WriteLn; { blank line before totals } WriteLn ('Total cost (sales tax incl.): ', TotalCost); WriteLn ('Amount remitted: ', AmountPaid); WriteLn ('Amount to return: ', Amount2Return); end; { of CalculateChange } procedure CalculateCoins( Value : integer; { value of the coin } var Coins2Return : integer; { number of coins } var Amount2Return : integer { change left } ); { This procedure calculates the number of a particular } { type of coin (Name) and return the partial result } begin { of CalculateCoins } { How many coins in the amount to return? } Coins2Return := Amount2Return div Value; { How much left? } Amount2Return := Amount2Return mod Value; end; { of CalculateCoins } procedure PrintResults ( Quarters2Return, { number of quarters } Dimes2Return, { number of dimes } Nickels2Return, { number of nickels } Pennies2Return : { number of pennies } integer ); { This procedure prints the results } begin { of PrintResults } { Display the results } WriteLn; WriteLn ('Quarters returned: ', Quarters2Return); WriteLn ('Dimes returned: ', Dimes2Return); WriteLn ('Nickels returned: ', Nickels2Return); WriteLn ('Pennies returned: ', Pennies2Return); WriteLn; end; { of PrintResults } { Variable declaration part } var AmountPaid :integer; { amount entered as paid for the item } Amount2Return :integer; { compute amount of change to return } ItemCost :integer; { amount entered as cost of the item } Quarters2Return :integer; { compute number of quarters to return } Dimes2Return :integer; { compute number of dimes to return } Nickels2Return :integer; { compute number of nickels to return } Pennies2Return :integer; { compute number of pennies to return } begin { ChangeMaker } { Input parameters} ReadParameters(ItemCost,AmountPaid); { Calculate the total change } CalculateChange(ItemCost,AmountPaid,Amount2Return); { Figure out quarters } CalculateCoins(25,Quarters2Return,Amount2Return); { Figure out dimes } CalculateCoins(10,Dimes2Return,Amount2Return); { Figure out nickels } CalculateCoins(5,Nickels2Return,Amount2Return); { Figure out pennies } CalculateCoins(1,Pennies2Return,Amount2Return); { Display the results } PrintResults(Quarters2Return,Dimes2Return, Nickels2Return,Pennies2Return); end. { ChangeMaker }