// Dit programma vraagt de gebruiker om een twee niet-negatieve gehele 
// getallen N en k (met k <= N).
// Bij een correcte invoer worden vervolgens N! en de binomiaal-coefficient
// `N boven k' berekend.
// Bij een niet-correcte invoer volgt een foutmelding.

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

#include <iostream>
using namespace std;

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

void Foutmelding ()
{
  cout << "Helaas, u heeft weer iets doms gedaan...\n";

}  // Foutmelding

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

int Faculteit (int N)
 // berekent N!
{ int Product = 1;

  while (N>=1)
  { Product *= N;
    N --;
  }

  return Product;

}  // Faculteit

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

int BinCoef (int N, int k)
 // berekent de binomiaal coefficient `N boven k'
{
  return (Faculteit (N) / (Faculteit (k) * Faculteit (N-k)) );
    // N.B.: deling gaat altijd goed

}  // BinCoef

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

int main ()
{ int N, k;

  cout << endl;
  cout << "Geef een niet-negatief geheel getal N: ";
  cin >> N;
  if (N < 0)
    Foutmelding ();

    // N.B.: eigenlijk heeft het geen zin om nog naar k te vragen
    //   als N < 0; we doen echter net of onze neus bloedt
  cout << "Geef een geheel getal k met 0 <= k <= " << N << ": ";
  cin >> k;
  if ((k < 0) || (k>N))
    Foutmelding ();

  if (N>=0)
  { cout << endl;
    cout << "N! = " << Faculteit (N) << ".\n";
    if ((k >= 0) && (k<=N))
    {   // accolades niet per se nodig
      cout << "N boven k = " << BinCoef (N, k) << ".\n";
    }
  }

  return 0;

}  // main

