• Aucun résultat trouvé

Exemple de programmation possible en C

N/A
N/A
Protected

Academic year: 2022

Partager "Exemple de programmation possible en C"

Copied!
3
0
0

Texte intégral

(1)

16/01/07 Corrigé TP n° 3 1

Exemple de programmation possible en C ++

#pragma hdrstop

#pragma argsused

#include <stdlib.h>

// pour utiliser la fonction srand initialisant le générateur de nombres //aléatoires :

#include <time.h>

#include <iostream>

#include <iomanip>

using namespace std;

int a,b,n;

long int NbExp;

double Prob[100],Freq[100];

double EspTh,EspObs,VarTh,VarObs;

//--- début des fonctions --- void double combi(int x, int y)

{

double Res;

if ((y == x) || (y == 0)) Res = 1;

else

Res = (x/(double)y) * combi(x-1,y-1);

return Res;

}

voud Initialisation();

{ for (int k = 0 ; k <= n ; k++) {

Prob[k] = combi(a,k)*combi(b,n-k)/combi(a+b,n);

Freq[k] = 0;

} }

void Experiences();

{ int NoTires[100];

bool Tire;

for (long int j = 1 ; j <= NbExp ; j++) {

int NbBl=0;// Pour chaque expérience compteur des boules blanches tirées int No = rand()%(a+b)+1;

// rand()%(a+b) génère un entier de l'intervalle

[ 1 ... a+b [

NoTires[1]

=

No;

int NbT = 1; // nombre de boules tirées

while(NbT<n) // Tant qu'on n'a pas tiré n (boules) Nos différent(e)s {

Tire=true;

while (Tire) {

Tire=false;

(2)

16/01/07 Corrigé TP n° 3 2

No = rand()%(a+b)+1;

for(int i=1;i<=NbT;i++) {

if (No == NoTires[i]) Tire = true;

} }

NbBT++;

NoTires[NbBT] = No;

if ( No <= a ) // on compte les boules blanches NbBl++; // au fur et à mesure

}

Freq[NbBl]++;

}

// Mise à jour des fréquences relatives : for (int k = 0 ; k <= n ; k++)

Freq[k] = Freq[k] / NbExp;

}

void EsperancesVariances() {

EspTh = 0;

EspObs = 0;

VarTh = 0;

VarObs = 0;

for (int k=1;k<=n;k++) {

EspTh += k*Prob[k];

EspObs += k*Freq[k];

VarTh += k*k*Prob[k];

VarObs += k*k*Freq[k];

}

VarTh = VarTh -EspTh*EspTh;

VarObs = VarObs -EspObs*EspObs;

}

void Affichages()

{ cout << setw(9) << fixed << " X ";

for (int k = 0 ; k <= n ; k++) cout << setw(6)<< fixed << k;

cout << endl;

cout << setw(6)<<" Probas :";

for (int k = 0 ; k <= n ; k++)

cout << setw(6) << setprecision(3) << fixed << Prob[k];

cout << endl; <<

cout << setw(6)<<" Freq :";

for (int k = 0 ; k <= n ; k++)

cout << setw(6) << setprecision(3) << fixed << Freq[k];

cout << endl << endl;

EsperancesVariances();

cout<<" Esperance theorique : ";

cout<<setw(10)<<setprecision(5)<< fixed << EspTh << endl;

cout<<" Esperance observee : ";

(3)

16/01/07 Corrigé TP n° 3 3

cout<<setw(10)<<setprecision(5)<< fixed << EspObs << endl;

cout<<" Variance theorique : ";

cout<<setw(10)<<setprecision(5)<< fixed << VarTh << endl;

cout<<" Variance observee : ";

cout<<setw(10)<<setprecision(5)<< fixed << VarObs << endl;

}

//--- FIN des fonctions --- //--- début du programme principal --- int main(int argc, char* argv[])

{

srand(time(NULL));

cout << "Dans une boite on a A boules blanches er B boules noires";

cout<<"On tire au hasard n boules.";

cout<<" X est le nombre de boules blanches obtenues"

cout<<" X suit la loi hypergéométrique dont on fait la simulation par un grand nombre d'expériences simulant le tirage de n boules";

cout << "Nombre A de boules blanches : ";

cin >> a;

cout << "Nombre B de boules noires : ";

cin >> b;

cout << "Nombre de boules n a tirer (n<="<< A <<"et n<="<< B)<<" : ";

cin >> n;

cout << "Nombre de simulations du tirages de n boules ? ";

cin >> NbExp;

Initialisation();

Experiences();

Affichages();

cin.sync();

cin.get();

return 0;

}

Références

Documents relatifs

L’exemple ci-dessous est une liste chaînée dont chaque élément est constitué d’une donnée entière et d’un pointeur vers un autre élément de même type. Cependant,

Il est possible de passer des arguments (paramètres aussi) à une fonction donnée (lui fournir une valeur ou le nom d’une variable pour que cette dite fonction puisse effectuer

Par exemple, pour avoir de la documentation sur le printf de la librairie standard C, on tape : man 3 printf (attention, un simple man printf donne des informations sur le printf

Résultat attendu: L’étudiant sera capable de collecter correctement les informations et documents nécessaires à la production d’une déclaration fiscale d’un particulier

Une valeur droite est une expression qui peut se situer dans le membre droit d’une affectation (une valeur peut être lue depuis l’expression).. Note 1 : c’est le contexte qui permet

En règle générale, ce sont les éléments suivants dans les expressions qui produisent des effets secondaires :.. les

3- Je signe mon travail avec mon étiquette prénom en haut à gauche (dans la petite maison pour les

Une valeur droite est une expression qui peut se situer dans le membre droit d’une affectation (une valeur peut être lue depuis l’expression).. Note 1 : c’est le contexte qui permet