{
      Improved Cash Register Program
}
Program CashRegister2 (input, output);

uses crt;

var
   Num_items : integer;    {number of items the customer buys}
   Price,                  {price of one item}
   Bill,                   {total bill}
   Amt_Payed,              {amount payed by the customer}
   Change :                {amount of change they customer gets}
   real;                   {penny...}
   p,
   n,
   d,
   q,
   o,
   f,
   t,
   tw:                     {...through twenty}
   integer;
const
   Tax = 0.0775;          {sales tax rate}

Procedure GetInfo (var Num_items: integer; var Price, Amt_Payed: real);

   begin
      ClrScr;
      Write('How many items were bought? ');
      Readln(Num_items);
      Write('How much did each item cost? $');
      Readln(Price);
      Write('How much did the customer pay? $');
      Readln(Amt_Payed);

   end;      {GetInfo}

Procedure CalcBill (Num_items: integer; Price, Tax: real; var Bill: real);
   begin
      Bill := (Num_items * Price) * (Tax + 1);
      Change := Amt_Payed - Bill;
   end;      {CalcBill}

Procedure ComputeCoins (MoneyVal: integer; var Number, Amt_left: integer);
   begin
      Number := Amt_left div MoneyVal;
      Amt_left := Amt_left mod MoneyVal;
   end;      {ComputeCoins}


Procedure CalcChange (var p, n, d, q, o, f, t, tw : integer; Change: real);
   var Amt_Left: integer;     {Remaining change to compute}
   begin
      Amt_Left := Round(Change * 100);
      ComputeCoins (2000, tw, Amt_left);   {Twenty}
      ComputeCoins (1000, t,  Amt_left);   {Ten}
      ComputeCoins (500,  f,  Amt_left);   {Five}
      ComputeCoins (100,  o,  Amt_left);   {One}
      ComputeCoins (25,   q,  Amt_left);   {Quarter}
      ComputeCoins (10,   d,  Amt_left);   {Dime}
      ComputeCoins (5,    n,  Amt_left);   {Nickle}
      p := Amt_left;                       {Penny}

   end;      {CalcChange}

Procedure DispChange (var p, n, d, q, o, f, t, tw: integer);
   begin
      Writeln;
      Writeln('-----Change-----');
      Writeln('Twenties: ', tw);
      Writeln('Tens:     ', t);
      Writeln('Fives:    ', f);
      Writeln('Ones:     ', o);
      Writeln('Quarters: ', q);
      Writeln('Dimes:    ', d);
      Writeln('Nickels   ', n);
      Writeln('Pennies:  ', p);
      Writeln('----------------');
   end;       {DispChange}
begin

   GetInfo (Num_items, Price, Amt_Payed);
   CalcBill (Num_items, Price, Tax, Bill);


   Writeln;
   Writeln('Amount payed: $' , Amt_Payed:6:2);
   Writeln('Bill: $', Bill:6:2);
   Writeln('Change: $', Change:6:2);

   CalcChange(p, n, d, q, o, f, t, tw, Change);
   DispChange(p, n, d, q, o, f, t, tw);

   Writeln('Press any key to continue');
   Readkey;
end.          {Program cashregister}

    Source: geocities.com/siliconvalley/park/3889

               ( geocities.com/siliconvalley/park)                   ( geocities.com/siliconvalley)