problème dans un prog

problème dans un prog - C++ - Programmation

Marsh Posté le 08-10-2004 à 21:23:28    

bonjour, jai besoin de votre aide... on a fait un programme ce matin en td de c++ et j'essai de le faire fonctionner :)

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4. double CalculPi(int nMax)
  5. {
  6.     int nmax=0;
  7.     double pi=0;
  8.     int k=1;
  9.    
  10.     for (int n=0;n<=nMax;n++)
  11.     {
  12.         pi+= + k/(double(2*n+1));
  13.         k=-k;
  14.     }
  15.     pi *=4;
  16.     return pi;
  17. }
  18. double CalculPi(double epsilon)
  19. {
  20.     double pi=0;
  21.     double k=1;
  22.     int n=0;
  23.    
  24.     while(4/(double(2*n+1))>epsilon)
  25.     {
  26.         pi+=4*(k/(2*n+1));
  27.         k=-k;
  28.         n++;
  29.     }
  30.     return pi;
  31. }
  32. int menu()
  33. {
  34.   int choix;
  35.   do{
  36.       cout<<"1->Calculer Pi en donnant Nmax"<<endl;
  37.       cout<<"2->Calculer Pi en donnant Epsilon"<<endl;
  38.       cout<<"3->Quitter le programmme"<<endl;
  39.       cout<<"Votre choix :";
  40.       cin>>choix;
  41.   }while(choix<1||choix>3);
  42.   return choix;
  43. }
  44. int main()
  45. {
  46.     int c;
  47.     int nMax;
  48.     double epsilon;
  49.     do{
  50.         c=menu();
  51.         if(c==1)
  52.         {
  53.             do{
  54.                 cout<<"Entrer nMax :";
  55.                 cin>>nMax;
  56.             }while(nMax<2);
  57.             cout<<"Pi="<<CalculPi(nMax)<<endl;
  58.         }
  59.         if(c==2)
  60.         {
  61.             do{
  62.                 cout<<"Entrer un Epsilon :";
  63.                 cin>>epsilon;
  64.             }while(epsilon<=0);
  65.             cout<<"Pi="<<CalculPi(epsilon)<<endl;
  66.           }while(c!=3);
  67.  
  68.   system("PAUSE" );
  69.   return 0;
  70. }


il me dit qu'il y a une erreur dans la fonction main. une erreur de syntaxe à la fin de input... :??:  
je seche ...

Reply

Marsh Posté le 08-10-2004 à 21:23:28   

Reply

Marsh Posté le 08-10-2004 à 21:27:15    

cout<<"Entrer un Epsilon :" << flush
 
 
<cstdlib>
 
 
et t'as oublié de fermer ton if

Reply

Marsh Posté le 08-10-2004 à 21:31:53    

lequel de if?
parce que j'ai essayé de fermer les if dans main, mais ça ne marche pas mieux...
 
et c'est quoi flush après un cout?
 
merci de l'aide :jap:


Message édité par toutsec le 08-10-2004 à 21:32:53
Reply

Marsh Posté le 08-10-2004 à 21:32:57    

le dernier :o

Reply

Marsh Posté le 08-10-2004 à 21:34:33    

exact, ça marche :)
merci beaucoup :)

Reply

Marsh Posté le 08-10-2004 à 21:36:33    

alors, autre problème...
quand je mets un chiffre tres grand pour nMax, il plante, et pareil quand je mets un chiffre tres petit dans epsilon...
:??:

Reply

Marsh Posté le 08-10-2004 à 21:40:39    

si nmax est INT_MAX tu as une boucle infinie

Reply

Marsh Posté le 08-10-2004 à 21:48:06    

j'ai pas compris... ce que tu voulais dire par ça :P

Reply

Marsh Posté le 08-10-2004 à 21:54:14    

si nmax est égal au plus grand entier possible, par définition, il n'existe aucun entier tel que  
 
x <= nmax est évalué à faux

Reply

Marsh Posté le 08-10-2004 à 22:11:19    

oui, mais c'est quoi la limite de nmax?

Reply

Marsh Posté le 08-10-2004 à 22:11:19   

Reply

Marsh Posté le 08-10-2004 à 22:15:41    

ben c'est INT_MAX


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-10-2004 à 22:31:51    

ce qui correspond à un chiffre genre 1*10^5 ?

Reply

Marsh Posté le 08-10-2004 à 22:35:24    

ca correspond à INT_MAX

Reply

Marsh Posté le 08-10-2004 à 22:49:39    

cool

Reply

Marsh Posté le 08-10-2004 à 22:52:38    

la macros est definie dans limits.h

Reply

Marsh Posté le 08-10-2004 à 23:21:03    

Citation :

ce qui correspond à un chiffre genre 1*10^5 ?


Ca correspond à la valeur maximale que peut prendre un nombre de type INT, dans la mesure ou le type int n'est pas standard (il peut varier en fonction du compilateur ou de la plateforme), ben il n'y a pas de valeur fixe à INT_MAX (contrairement aux types char, short, long (et llong?) qui, si je ne m'abuse, sont définis et standardisés sur toutes les implémentations


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-10-2004 à 23:25:12    

non, pour tous il n'y a pas de limites. Justes des contraintes  de minimum et une relation d'ordre

Reply

Marsh Posté le 08-10-2004 à 23:32:22    

Taz a écrit :

non, pour tous il n'y a pas de limites. Justes des contraintes  de minimum et une relation d'ordre


arf :pfff:  
je pensais que char short long llong étaient fixés à 1 2 4 8 octets :/


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-10-2004 à 23:33:28    

surtout pas !

Reply

Marsh Posté le 08-10-2004 à 23:34:16    

ben non on en a parlé recemment
 
char est la plus petite entité adressable, donc sur certains systemes ca peut etre autres chose que 8 bits

Reply

Marsh Posté le 08-10-2004 à 23:38:23    

exemplde contrainte : un signed char doit pouvoir représenter l'inverval [-127; 127]

Reply

Marsh Posté le 08-10-2004 à 23:45:38    

cris56 a écrit :

ben non on en a parlé recemment
 
char est la plus petite entité adressable, donc sur certains systemes ca peut etre autres chose que 8 bits


j'ai du rater celui là, link?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-10-2004 à 23:47:15    

Reply

Marsh Posté le 08-10-2004 à 23:53:06    

Taz a écrit :

exemplde contrainte : un signed char doit pouvoir représenter l'inverval [-127; 127]


 
-128. C'est du complément à 2.

Reply

Marsh Posté le 09-10-2004 à 00:01:25    

Lam's a écrit :

-128. C'est du complément à 2.

toi je t'attendais ... non. D'ailleurs si t'avais un peu de culture C, tu saurais que la philosophie du C c'est d'imposer le moins possible de contrainte d'implémentation.

Reply

Marsh Posté le 09-10-2004 à 00:10:07    


Arf je suis arrivé dessus au 3e ou au 4e post et j'y suis jamais retourné, j'aurais du continuer à le consulter :pfff:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-10-2004 à 21:11:20    

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4. int main(int argc, char *argv[])
  5. {
  6.   int n=1;
  7.   float P=1;
  8.   float S=1;
  9.   float eps;
  10.   cout<<"Epsilon?";
  11.   cin>>eps;
  12.   while(2*S>eps)
  13.   {
  14.       S*=n*(1/(2*n+1));
  15.       P=S+P;
  16.       n++;
  17.   }
  18.   P=2*P;
  19.   cout<<"valeur : "<<P<<endl;
  20.   system("PAUSE" );
  21.   return 0;
  22. }


jai fait un nouveau prog, mais là, je ne comprends pas...
à la fin de l'éxécution, il me sort toujours 2.
quand j'enlève l'affectation de P, il me sort un chiffre en 10^-39...
jai essayé pas mal de trucs, mais là, je ne comprends pas :(

Reply

Marsh Posté le 11-10-2004 à 21:20:33    

#  cout<<"Epsilon?";
#   cin>>eps;
 
 
->  
 
#  cout<<"Epsilon?" << flush;
#   cin>>eps;

Reply

Marsh Posté le 11-10-2004 à 21:21:40    

ok je vais essayer, mais, quelle est la fonction de flush?

Reply

Marsh Posté le 11-10-2004 à 21:21:41    

Je suis pas sûr, mais il me semble bien que (1/2*n+1), ça vaut 0+1==1. Il faudrait que tu caste l'un de ces opérandes en float, où que n sois du type float, sinon le compilateur effectue l'opération en arithmétique entière.

Reply

Marsh Posté le 11-10-2004 à 21:23:15    

et ça change pas grand chose...
 
je pense que le soucis viens des affectations de P et S... mais jai essayé pas mal de choses, et ça ne change rien... :(

Reply

Marsh Posté le 11-10-2004 à 21:23:18    

toutsec a écrit :

ok je vais essayer, mais, quelle est la fonction de flush?

elle t'assure que ton invite est affiché AVANT la saisie :)

Reply

Marsh Posté le 11-10-2004 à 21:24:47    

Lam's a écrit :

Je suis pas sûr, mais il me semble bien que (1/2*n+1), ça vaut 0+1==1. Il faudrait que tu caste l'un de ces opérandes en float, où que n sois du type float, sinon le compilateur effectue l'opération en arithmétique entière.


exact c'est ça!
bravo :)
la prochaine fois, je ne mettrai que des types float comme ça, pas de soucis...
 
merci encore à toi!

Reply

Marsh Posté le 11-10-2004 à 21:25:55    

Taz a écrit :

elle t'assure que ton invite est affiché AVANT la saisie :)


ok, merci  :jap:

Reply

Marsh Posté le 11-10-2004 à 21:26:25    

juste écris tes constantes comme il faut.
 
0.0 // double
0.0f // float

Reply

Marsh Posté le 20-11-2004 à 11:41:03    

salut à tous!
 
jai de nouveau un problème... :(  
sauf, que c'est un exercice qui risque de tomber à l'exam de mardi...
et jai beau chercher, je ne vois pas ou se situ l'erreur...
 
le code est ici, car  il est un peu long à quoter dans la réponse...
c'est pas une errreur de compilation, c'est une erreur quand j'execute le prog...
quand le prog affiche les résultats des "calculs" il me sort des résultats exotiques... avec des trucs allant à l'infini etc...
 
voila, j'ai surment codé comme mes pieds mais bon  :o  
merci pour votre aide :]


Message édité par toutsec le 20-11-2004 à 11:44:55
Reply

Marsh Posté le 20-11-2004 à 12:08:32    

Maintenant que tu codes un peu, il va te falloir apprendre à utiliser le deuxième outil du développeur : le débogueur.
Et ensuite le 3e outil sera le débogueur mémoire.

Reply

Marsh Posté le 20-11-2004 à 12:09:45    

et la cafetiere, c'est lequel d'outils ?

Reply

Marsh Posté le 20-11-2004 à 12:26:47    

el muchacho a écrit :

Maintenant que tu codes un peu, il va te falloir apprendre à utiliser le deuxième outil du développeur : le débogueur.
Et ensuite le 3e outil sera le débogueur mémoire.


bah je veux bien apprendre à m'en servir si je savais ou c'est[:joce]
pi, à la fac, ils nous ont pas dit que ça existait...
(je vais chercher)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed