[C] probleme de variable ....

probleme de variable .... [C] - C++ - Programmation

Marsh Posté le 15-10-2002 à 22:48:43    

bon voila mon code :
 
#include <stdio.h>
#include <conio.h>
void main (void)
{
int n,factor;
long valeur;
clrscr();
while(1==1)
{
 
n=0;
valeur=0;
factor=0;
printf("Saisissez le nombre dont on veut calculer la factorielle : " );
scanf("%d",&n);
valeur=n;
factor=n;
if(n<0)
 printf("\nOn ne peut calculer la factorielle d'un chiffre negatif !\n" );
else    if(n==0)
  printf("\nLa factorielle de 0 est : 0\n" );
 else    if(n==1)
   printf("\nLa factorielle de 1 est : 1\n" );
  else
   {
   do
    {
    n--;
    valeur=valeur*n;
    }
   while(n>=2);
   printf ("\nLa factorielle de %d est : %ld\n",factor,valeur);
   }
}
}
 
le but du prog est de calculer la factorielle d'un chiffre donné...
mais arrivé à 13, le resultat n'est pas bon ... :heink:  
faut que je mette quoi comme type pour ma var valeur ???
help, je debute en C ;) :jap:  


---------------
powered by 1700+ JIUHB 0251 F @ 2450 / 1.74v :ange: et rock stable !!!! :sol:
Reply

Marsh Posté le 15-10-2002 à 22:48:43   

Reply

Marsh Posté le 15-10-2002 à 23:06:01    

c'est a cause d'un dépassement de capacite.
 
le mieux que tu puisses faire c'est déclarer tes variables comme float/double, c'est une représentation des nombres réels assez imprécise, mais elle te permettra de passer outre cette limitations sur les types entiers.
 
float f;
scanf("%f", &f);
 
edit:
et le while(1==1) tu peux tout simplement mettre while(1), ca economise un test!


Message édité par Taz@PPC le 15-10-2002 à 23:07:24

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 17-10-2002 à 17:24:55    

Sinon pour augmenter un peu, tu peux utiliser le type __int64 sous Windows pour repousser un peu la limitation si la précision est importante pour toi (et je le pense, si tu veux calculer un factoriel c'est pour avoir sa valeur précise!).
 
Après, le seul moyen et d'utiliser des libraries qui gèrent des nombres de taille infinie comme http://www.swox.com/gmp/, ou la Miracl librairie. Avec des libraries comme ça, tu calcules le factoriel de 1000 sans problème (faut juste de la place pour afficher la chaine de caractère qui représente le nombre!  :D )


Message édité par YungMakko le 17-10-2002 à 17:25:20

---------------
In tartiflette, we trust!
Reply

Marsh Posté le 17-10-2002 à 17:30:32    

cela dit si tu veux calculer la factorielle d'un grand nombre, le mieux c'est d'utilsier la formule de Stirling


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 17-10-2002 à 17:37:59    

Taz@PPC a écrit a écrit :

cela dit si tu veux calculer la factorielle d'un grand nombre, le mieux c'est d'utilsier la formule de Stirling




 
:jap:


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 17-10-2002 à 17:53:38    

Taz@PPC a écrit a écrit :

 
edit:
et le while(1==1) tu peux tout simplement mettre while(1), ca economise un test!




 
 :non:  On ne met jamais while(1) pour une boucle infinie, mais

Code :
  1. for(;;)


L'existance du '1' n'est pas justifiée.


Message édité par YungMakko le 17-10-2002 à 17:54:00

---------------
In tartiflette, we trust!
Reply

Marsh Posté le 17-10-2002 à 18:01:20    

!0


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 17-10-2002 à 18:55:54    

ou while(true) :-)

Reply

Marsh Posté le 17-10-2002 à 19:08:12    

leneuf22 a écrit a écrit :

ou while(true) :-)




 
qui comme chacun sait n'est pas du C


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 17-10-2002 à 19:44:11    

Ben si !  :bounce:  

Code :
  1. typedef int BOOL;
  2. #define TRUE  1
  3. #define FALSE 0
  4. #define forever() for(;;)
  5. ...
  6. forever() {   // On aurait tout aussi bien pu
  7.    ....       // écrire "while (TRUE)"
  8. }


 :ange:

Reply

Marsh Posté le 17-10-2002 à 19:44:11   

Reply

Marsh Posté le 17-10-2002 à 20:15:44    

dites , moi je commence un peu le C et j'ai pas compris a quoi sert le "%d" lorsqu'on fait un scanf par exemple ....


Message édité par tssstare le 17-10-2002 à 20:16:06
Reply

Marsh Posté le 17-10-2002 à 20:17:04    

Tssstare a écrit a écrit :

dites , moi je commence un peu le C et j'ai pas compris a quoi sert le "%d" lorsqu'on fait un scanf par exemple ....




 
achetes un livre s'il te plait. comme le K&R 2eme edition isbn 2-10-005116-4


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 18-10-2002 à 04:58:26    

Taz@PPC a écrit a écrit :

qui comme chacun sait n'est pas du C


Si... du C99  :ange:


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 18-10-2002 à 09:43:00    

Musaran a écrit a écrit :

Si... du C99  :ange:  




 
oui c'est dans <stdbool.h>  :p


---------------
du bon usage de rand [C] / [C++]
Reply

Sujets relatifs:

Leave a Replay

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