#include <iostream>
#include <time.h>
#define Val_PI 3.14159265
#include <math.h>

using namespace std;

double convertDegreeToRadian(double angle)
{
    return Val_PI * angle / 180;
}


int main()
{
    cout << "       ---------------------------------" << endl;
    cout << "                TAI  de Probabilites" << endl;
    cout << "       ---------------------------------" << endl << endl;

    /**
     * Déclaration des variables
    **/

    srand(time(NULL));
    int *tResults;
    int i, tmp, total = 0;
    int h = 4, l = 2, X;
    int lancers = 10000;
    double point;
    double moyenne = 0, mediane = 0;
    double angle, longueur;

    /*cout << "Entrez la longueur du spaghetti : ";
    cin >> l;
    cout << "Entrez la taille d'une latte de parquet : ";
    cin >> h;
    cout << "Entrez le nombre de lancers : ";
    cin >> lancers;
    cout << endl;*/

    tResults = new int[(l / h) + 1];

    for(i = 0; i <= (l / h) + 1; i++)
        tResults[i] = 0;


    /**
     * Génération des 100 cas
    **/

    for(i = 0; i < lancers; i++)
    {
        //cout << i << endl;
        point = rand() % (h * 1000);
        point = point / 1000;
        angle = rand() % 360;

        /* point = 0;
        angle = 310; */

        if(angle >= 0 && angle < 90)
            angle = convertDegreeToRadian(angle);
        else if(angle >= 90 && angle < 180)
            angle = convertDegreeToRadian(180 - angle);
        else if(angle >= 180 && angle < 270)
        {
            angle = convertDegreeToRadian(angle - 180);
            point = h - point;
        }
        else if(angle >= 270 && angle < 360)
        {
            angle -= 270;
            angle = convertDegreeToRadian(180 - angle);
            point = h - point;
        }

        longueur = sin(angle) * l;
        longueur += point;

        if(point == 0)
            X = longueur / h + 1;
        else
            X = (longueur / h);

        tResults[X]++;
        total++;
        X = longueur / h;
    }

    cout << endl << "Total : " << total << endl << endl;


    /**
     * Calcul de la moyenne
    **/

    for(i = 0; i <= (l / h) + 1; i++)
    {
        cout << "i : " << i << "    -> " << tResults[i] << endl;
        moyenne += tResults[i] * i;
    }

    cout << endl;

    moyenne = moyenne / total;
    cout << "Moyenne : " << moyenne << endl;


    /**
     * Calcul de la médiane
    **/

    int test = lancers / 2;
    i = 0;

    while(test >= 0)
    {
        test -= tResults[i];
        i++;
    }

    cout << "Mediane : " << i - 1 << endl;


    /**
     * Calcul du premier quartile
    **/

    tmp = lancers / 4;
    i = 0;

    while(tmp >= 0)
    {
        tmp -= tResults[i];
        i++;
    }

    cout << "Premier quartile : " << i - 1 << endl;


    /**
     * Calcul du troisieme quartile
    **/

    tmp =  (3 * lancers) / 4;
    i = 0;

    while(tmp >= 0)
    {
        tmp -= tResults[i];
        i++;
    }

    cout << "Troisieme quartile : " << i - 1 << endl << endl;


    /**
     * Calcul de Pi
    **/

    cout << "Pi = " << 1 / moyenne << endl;

    delete tResults;
    return 0;
}
