#include <iostream.h>
#include <stdio.h>
#include <conio.h>

int main() // written by A. Schiffler, Name: fuechse.cpp
{
//Deklaration der Konstanten
const int min_fuechse = 2, max_fuechse = 1000;
const int min_abschuss = 0, max_abschuss = 100;
const int min_vermehrungsrate = -10, max_vermehrungsrate = 20;
const int max_jahre = 20;

//Deklaration der Variablen
int wahl, jahr, abschuss;
char wiederholung;
float max_bestand, fuechse, zuwachsrate;

do
  {
  jahr = 1;
  cout <<"\nMit diesem Programm kann der Fuchsbestand vorhergesagt werden\n";

  //Einlesen des anfänglichen Fuchsbestandes
  do
    {
    cout<<"\nGeben Sie bitte den derzeitigen Fuchsbestand an: ";
    cin >> fuechse;
    if ( fuechse > max_fuechse || fuechse < min_fuechse)
       {
      cout<<"\n Der Wert muss zwischen "<<min_fuechse<<" und "<<max_fuechse<<" liegen!\n";
       }
    }
  while (fuechse > max_fuechse || fuechse < min_fuechse);

  //Einlesen der Abschussrate
  do
    {
    cout<<"\nGeben Sie bitte die jaehrliche Abschussrate ein: ";
    cin >> abschuss;
    if ( abschuss < min_abschuss || abschuss > max_abschuss )
       {
       cout<<"\n Der Wert muss zwischen "<<min_abschuss<<" und "<<max_abschuss<<" liegen!\n";
       }
    }
  while ( abschuss < min_abschuss || abschuss > max_abschuss );

  //Einlesen der Vermehrungsrate
  do
    {
    cout<<"\nGeben Sie bitte die jaehrliche Vermehrungsrate in Prozent ein: ";
    cin >> zuwachsrate;
    if ( zuwachsrate < min_vermehrungsrate || zuwachsrate > max_vermehrungsrate )
      {
      cout<<"\n Der Wert muss zwischen "<<min_vermehrungsrate<<" und "<<max_vermehrungsrate<<" liegen!\n";
      }
    }
  while ( zuwachsrate < min_vermehrungsrate || zuwachsrate > max_vermehrungsrate );

  max_bestand = 2*fuechse;

  cout<<"\nWaehlen Sie die Darstellungsart: Tabelle (1) oder Text (andere Eingabe): ";
  cin>>wahl;

  if (wahl != 1) //Darstellungsart Text
    {
    printf("\nFuchsbestand am Anfang des 1. Jahres: %4.0f\n", fuechse);

     do
        {
        fuechse = fuechse - abschuss;
        fuechse = fuechse * ( 1 + zuwachsrate / 100 );
        jahr++;
        if ( fuechse < 0 ) fuechse = 0;
        printf("Fuchsbestand am Anfang des %i. Jahres: %4.0f\n", jahr, fuechse);
        }
     while ( fuechse < max_bestand && fuechse > 0 && jahr <= max_jahre );
    }//if (wahl != 1) Darstellungsart Text

  else //Darstellungsart Tabelle
    {
    printf("\n\t\tJahr\t\tAnzahl Fuechse\n"); //Tabellenüberschrift ausgeben
    printf("\t\t%2.0i\t\t %4.0f\n", jahr, fuechse);
    do
        {
        fuechse -= abschuss;
        fuechse *= ( 1 + zuwachsrate / 100 );
        jahr++;
        if ( fuechse < 0 ) fuechse = 0;
        printf("\t\t%2.0i\t\t %4.0f\n", jahr, fuechse);
        }
    while ( fuechse < max_bestand && fuechse > 0 && jahr <= max_jahre );
    }//else Darstellungsart Tabelle

  //Es wird festgestellt, weshalb die Schleife verlassen wurde

  //wurde Scheife verlassen, weil sich die Anzahl der Fuechse verdoppelt hat?
  if ( fuechse >= max_bestand )
     {
     cout <<"\nDer Fuchsbestand hat sich innerhalb von "<< (jahr - 1 );
     cout <<" Jahren verdoppelt\n";
     }

  //wurde Scheife verlassen, weil es keine Fuechse mehr gibt?
  if ( fuechse <= 0 )
      {
      cout <<"\nNach "<< ( jahr - 1 ) <<" Jahren gibt es keine Fuechse mehr";
      }

  cout<<"\nMoechten Sie eine neue Berechnung durchfuehren lassen? (j/n) ";
  cin>> wiederholung;
  }
while(wiederholung == 'j');

getch();
return 0;
} // end of main