Bienvenue invité ( Connexion | Inscription )

> [Aide] Programme C++ [Aide]
Darknight670
posté 20 Nov 2007, 18:24
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.
Go to the top of the page
 
+Quote Post
 
Start new topic
Réponse(s)
Acid
posté 20 Nov 2007, 21:00
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 )
      {M++;
      }
S++;
5) Test avec debugger (ou affichage des variables au minimum) indiqué par dbsor
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
Go to the top of the page
 
+Quote Post
Darknight670
posté 22 Nov 2007, 10:46
Message #3





Groupe : Inscrit
Messages : 76
Inscrit : 30-Sep-07
Lieu : Meudon, (Paris)
Membre n° 1205



CITATION(appleseed @ 20 Nov 2007, 21:00) *
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 )
      {M++;
      }
S++;
5) Test avec debugger (ou affichage des variables au minimum) indiqué par dbsor
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
Go to the top of the page
 
+Quote Post

Les messages de ce sujet


Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 6 Jul 2025 - 16:21