```//
//

struct termvals {
double termstock;
double termwealth;};
^
|
The new type termvals is designed to allow a function to return both the final
wealth in a portfolio simulation and the final stock price.

class aa {
public:
aa(double ttm=1.0,int nper=120,double r=.05,double mean=.15,double stddev=.2);
int restart(double ttm,int nper,double r,double mean,double stddev);
^
|
Restart allows us to change the parameters specified by the constructor.

termvals fixprops(double inrisky,double initstock=0.0,double initcash=100.0);
^
|
The function fixprops simulates a portfolio strategy of investing a
fixed proportion inrisky of wealth in the risky asset and the rest
(in ``cash'') at a fixed interest rate.

private:
int npers;
double tinc, r1per, mean1per, std1persqrt12, wealth, stockpos, cash, stockP, stockret;
double stocktotret();};

//
// simu1test.cc Asset Allocation test file
//
#include
#include "simu1.h"

main() {
int i;
aa sim1;
termvals y;
for(i=0;i<100;i++) {
y = sim1.fixprops(.5);
cout << y.termstock << " " << y.termwealth << endl;}
^
|
This part is simpler than in previous assignments.  We are simply running
the simulation 100 times and printing out the terminal stock price and wealth
each time.  If the output can be copied and pasted to a spreadsheet, the test
program is fine as is.  Otherwise, this should be sent to a file that will be

return(0);}

//
// simu1.cc Asset Allocation Simulation
//
#include
#include
#include
#include "simu1.h"
#define unifrand() ((double) rand()/((double) RAND_MAX))
^
|
This macro simulates a uniform random variable.  Type declaration and
the definition of RAND_MAX are in .

aa::aa(double ttm,int nper,double r,double mean,double stddev) {
restart(ttm,nper,r,mean,stddev);}
^
|
The constructor simply calls restart, a function that defines or redefines the
internal parameters

int aa::restart(double ttm,int nper,double r,double mean,double stddev) {
npers = nper;
tinc = ttm/(double) nper;
r1per = 1.0 + r*tinc;
mean1per = 1.0 + mean*tinc;
^
|
In the risk-neutral probabilities, the mean return is the riskless rate.
We want to work in actual probabilities to simulate actual performance.

std1persqrt12 = sqrt((double) 12)*stddev*sqrt(tinc);
^
|
The square root of 12 is the reciprocal of the standard deviation of
a random variable that is uniform on [0,1].  It is computed here to avoid
computing it each time through the loop.

//  cout << " " << npers << " " << tinc << " " << r1per << " "
//    << mean1per << " " << std1persqrt12 << endl;
^
|
I used this and subsequent commented-out print statements during
debugging.  (Similar print statements in previous programs were
commented out before distribution.)  These print statements allow
me to step through the programs and isolate errors.

return(0);}

termvals aa::fixprops(double inrisky,double initstock,double initcash) {
int i;
termvals x;
^
|
a place to store the results before returning

stockpos = initstock;
cash = initcash;
stockP = 100.0;
^
|
initializing the stock position, cash position, and stock price

//  cout << npers << endl;
for(i=0;i
```