stock_exchange / genereerinstantie.cc
genereerinstantie.cc
Raw
// Genereert random beurskoersen en rentestanden tussen bepaalde,
// door de gebruiker op te geven grenzen.
// De gebruiker geeft ook waarden op voor
// * tw: het aantal dagen waarna de belegger de balans wil opmaken
// * n:  het aantal bedrijven waarvoor koersen worden gegenereerd
// * p:  het provisie percentage
// * b0: het geldbedrag waarmee de belegger start
// De opgegeven en gegenereerde waardes worden naar het scherm geschreven.

#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iomanip>
#include "standaard.h"
using namespace std;

const int MaxTw = 100;
const int MaxN = 8;
const double MinProvisie = 0.00;
const double MaxProvisie = 50.0; // maximaal 50%
const double MinB0 = 0.00;
const double MinKoers = 0.00;   // koers moet GROTER zijn dan MinKoers
const double MaxKoers = 100.00;
const double MinRente = -10.00;  // -10% rente dus, kan tegenwoordig
const double MaxRente = 100.00;  // 100% rente dus

//****************************************************************************

bool invoerOK (int tw, int n, double p, double b0, double mijnMinKoers,
               double mijnMaxKoers, double mijnMinRente, double mijnMaxRente)
// Controleer of de invoer van de gebruiker OK is.
{ bool OK;

  OK = true;

  if (!integerInBereik ("tw", tw, 1, MaxTw))
    OK = false;

  if (!integerInBereik ("n", n, 1, MaxN))
    OK = false;

  if ((p<MinProvisie) || (p>MaxProvisie))
  { cout << "Er moet gelden: " << MinProvisie << " <= p <= " << MaxProvisie
         << endl;
    OK = false;
  }

  if (b0 < MinB0)
  { cout << "Er moet gelden: b0 >= " << MinB0 << endl;
    OK = false;
  }
  
  if ((mijnMinKoers<=MinKoers) || (mijnMaxKoers<mijnMinKoers) ||
      (mijnMaxKoers>MaxKoers))
  { cout << "Er moet gelden: " << MinKoers
         << " < minimale koers <= maximale koers <= " << MaxKoers << endl;
    OK = false;
  }

  if ((mijnMinRente<MinRente) || (mijnMaxRente<mijnMinRente) ||
      (mijnMaxRente>MaxRente))
  { cout << "Er moet gelden: " << MinRente
         << " <= minimale rente <= maximale rente <= " << MaxRente << endl;
    OK = false;
  }

  return OK;

}  // invoerOK

//****************************************************************************

void genereerWaardes (int tw, int n, double p, double b0, double mijnMinKoers,
               double mijnMaxKoers, double mijnMinRente, double mijnMaxRente)
// Genereer waardes tussen de opgegeven grenzen, en schrijf alles naar
// het scherm.
{ int t, i;

  cout << tw << ' ' << n << endl;
  schrijfDouble (p, 2, true);
  schrijfDouble (b0, 2, true);

  for (t=0;t<=tw;t++)
    for (i=1;i<=n;i++)
    { schrijfDouble (randomDouble (mijnMinKoers, mijnMaxKoers), 2, false);
      if (i<n)
        cout << ' ';
      else
        cout << endl;
    }

  for (t=0;t<tw;t++)
    schrijfDouble (randomDouble (mijnMinRente, mijnMaxRente), 2, true);

}  // genereerWaardes

//****************************************************************************

int main ()
{ int tw, n;
  double p,
        b0,
        mijnMinKoers, mijnMaxKoers,
        mijnMinRente, mijnMaxRente;

  cout << endl;
  cout << "Geef een waarde voor tw: ";
  cin >> tw;
  cout << "Geef een waarde voor n: ";
  cin >> n;
  cout << "Geef een waarde voor p: ";
  cin >> p;
  cout << "Geef een waarde voor b0: ";
  cin >> b0;
  cout << "Geef een ondergrens voor de koersen: ";
  cin >> mijnMinKoers;
  cout << "Geef een bovengrens voor de koersen: ";
  cin >> mijnMaxKoers;
  cout << "Geef een ondergrens voor de rentepercentages: ";
  cin >> mijnMinRente;
  cout << "Geef een bovengrens voor de rentepercentages: ";
  cin >> mijnMaxRente;

  if (invoerOK (tw, n, p, b0,
                mijnMinKoers, mijnMaxKoers, mijnMinRente, mijnMaxRente))
    genereerWaardes (tw, n, p, b0,
                     mijnMinKoers, mijnMaxKoers, mijnMinRente, mijnMaxRente);

  return 0;

}