```/*************************************************
FINANCIAL SIMULATION

You have a bank account whose annual interest
rate depends on the amount of money you have
in your account at the beginning of each year.
Your annual rate starts at 3%, and grows by an
additional half a percent for each thousand
dollars in your account up to, but not exceeding
8%. Interest in this account is compounded monthly
at the annual rate.  Each year you also make a
transaction (before the bank figures out what
your rate is).  Write a program that simulates
these financial interactions for 5 years.  At
the beginning of each year it should ask the
user whether he wants to make a deposit or
withdrawl and for how much.  At the end, it
should print out the balance at the end of the
5th year.
*************************************************/
#include <iostream>

double transaction(double);
double rate(double);
double compound(double);

int main()
{
// Simulate 5 years
double B = 0.0;
for(int i = 0; i < 5; i++)
{
B = transaction(B);
double r = rate(B);
B = B*compound(r);
}

// Print out final balance
cout << "Balance = "
<<  B << endl;

return 0;
}

/*******************************************
** Interacts with user to perform transaction
** and returns new balance.
*******************************************/
double transaction(double B)
{
// Get type of transaction
char act;
cout << "Enter w: withdrawl d:deposit ";
cin >> act;

// Get amount of transaction
double A;
cout << "Enter amount: ";
cin >> A;

// Get new Balance figure
if (act == 'w')
B = B - A;
else
B = B + A;

return B;
}

/*******************************************
** Computes iunterest rate based on Balance.
*******************************************/
double rate(double B)
{
// Get # of thousands
int T = B/1000;

// Calc rate
double r = 3 + T*0.5;
if (r > 8)
r = 8;

return r;
}

/*******************************************
** Gives the value of one dollar after a
** year of monthly compounded interest at
** annual rate r.
*******************************************/
double compound(double r)
{
// Sim. year with monthly compounding
double R = r/100, total = 1.0;
for(int i = 0; i < 12; i++)
total = total*(1 + R/12);