![]() |
Bienvenue invité ( Connexion | Inscription )
![]() |
![]()
Message
#1
|
|
![]() Groupe : Inscrit Messages : 76 Inscrit : 30-Sep-07 Lieu : Meudon, (Paris) Membre n° 1205 ![]() |
Bonjour,
je débute vraiment en programmation C++ donc je crée des petits programmes pour m'entraîner. Or j'essaye de calculer Pi a l'aide la méthode Monte Carlo (pour maîtriser les rand () ) et mon programme ne marche pas ... mais sans erreurs apparentes de compilation... CODE ##include <iostream> #include <stdlib.h> #include <time.h> #include <math.h> #include <iomanip> using namespace std ; int main () { cout << "Simulation de Pi\n" ; cout << "Entrez un nombre etier de simulations a effectuer.\n" ; int N ; cin >> N ; double X ; double Y ; double R ; int M ; int S ; srand ( time (0) ) ; while ( S < N ) { X = 2 * rand () - 1 ; Y = 2 * rand () - 1 ; R = sqrt ( X*X + Y*Y ) ; if ( R <= 1 ) { M++ ; S++ ; } else { S++ ; } } cout << "Approximation de Pi: \n" << 4 * ( M/N ) << setprecision (5) ; return 0; } EDIT 1 : Dans le debugger ça donne ca : CODE [Session started at 2007-11-20 18:25:20 +0100.] Simulation de Pi Entrez un nombre etier de simulations a effectuer. 10 Approximation de Pi: -6.4226e+08 The Debugger has exited with status 0. Qu'est ce qui ne va pas? Et que me conseillez vous pour apprendre a maîtriser le C++? ( Livres , sites ET idées de projets etc... ) Ce message a été modifié par Darknight670 - 20 Nov 2007, 18:44. |
|
|
![]() |
![]()
Message
#2
|
|
![]() Dr Mouse Groupe : Membre Messages : 2986 Inscrit : 19-May-06 Lieu : Béziers Membre n° 572 ![]() |
0) Initialisation de S indiqué par Gamoul
2) Le probleme: Pour la methode de monte carlo il faut avoir des nombres dans [O;1] la fonction rand() retourne des nombre entre 0 et RAND_MAX (grand entier) Pour avoir un rand entre 0 et 1 faire: CODE rand() / ((double) RAND_MAX); 3) test <=1 plutot <1 ici par rapport à l'algorithme utilisé (mais ce ne doit pas etre si important ici)4) Sinon pour la forme: etier => entier pour le if j'ecrirai CODE if ( R < 1 ) 5) Test avec debugger (ou affichage des variables au minimum) indiqué par dbsor{M++; } S++; 6) La fonction rand n'est pas terrible, pour une utilisation dans le cadre d'algo du type Monte carlo on utilise une fonction plus sophistiquée ( loi uniforme, loi normale ...) @+ Ce message a été modifié par appleseed - 21 Nov 2007, 08:52. -------------------- Bb
|
|
|
![]()
Message
#3
|
|
![]() Groupe : Inscrit Messages : 76 Inscrit : 30-Sep-07 Lieu : Meudon, (Paris) Membre n° 1205 ![]() |
0) Initialisation de S indiqué par Gamoul 2) Le probleme: Pour la methode de monte carlo il faut avoir des nombres dans [O;1] la fonction rand() retourne des nombre entre 0 et RAND_MAX (grand entier) Pour avoir un rand entre 0 et 1 faire: CODE rand() / ((double) RAND_MAX); 3) test <=1 plutot <1 ici par rapport à l'algorithme utilisé (mais ce ne doit pas etre si important ici)4) Sinon pour la forme: etier => entier pour le if j'ecrirai CODE if ( R < 1 ) 5) Test avec debugger (ou affichage des variables au minimum) indiqué par dbsor{M++; } S++; 6) La fonction rand n'est pas terrible, pour une utilisation dans le cadre d'algo du type Monte carlo on utilise une fonction plus sophistiquée ( loi uniforme, loi normale ...) @+ 2/ RAND_MAX doit être défini? ou pas besoin ? 4/ si on ne fait que if ( R < 1 ) il considerera que les pts a 1 cm du centre ne sont pas dans le cercle non? alors que si (d'après moi...)? Mais merci a vous tous Gamoul , Appleseed et " Celui qui a un nom imprononçable" Aterxexes |
|
|
![]() ![]() |
![]() |
Version bas débit | Nous sommes le : 6 Jul 2025 - 16:21 |