/*************************************************
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);
return total;
}