Factoriel

mohamed -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,j'aimerai qu'on m'aide à ecrire en c un programme permettant de calculer le factoriel d'un entiers compris entre 0 et 20.cet antier sera saisi au clavier.merci
Configuration: Windows XP Internet Explorer 6.0

2 réponses

  1. nabil07 Messages postés 161 Statut Membre 64
     
    Bonjour,

    void main(){
    float result = 1; // 0!=1
    int i,lim;

    printf(" Factoriel de 20\n");
    printf("Entrer un entier pour calculer le factoriel:");
    scanf("%i",lim);
    if(lim>0){
    for(i=1;i<=lim;i++){
    result=result*i;
    }
    }
    printf("%i! = %f",lim,result);
    }
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Salut,
      void main()
      void main() est un mauvais prototype. main renvoie un int.
      float result = 1; Vaut mieux prendre des entiers pour calculer sous peine d'avoir des erreurs d'arrondis.
      scanf("%i",lim); Il faut mettre l'adresse de lim, soit &lim et non lim.
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,

    Voici un exemple :
    #include <stdio.h>
    
    int fact(int nb) {
        int res=1;
    
        if(nb<0) return -1;
    
        while(nb)
            res*=nb--;
    
        return res;
    }
    
    int main(void) {
        int nb;
        int res;
    
        puts("Calcul de factoriel");
        printf("Nombre: ");
        fflush(stdout);
        scanf("%d",&nb);
    
        res=fact(nb);
        if(res==-1) {
            fputs("nombre negatif\n",stderr);
            return 1;
        }
    
        printf("%d!=%d\n",nb,res);
    
        return 0;
    }
    

    Si t'as des questions, n'hésite pas.
    Cdlt,
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      attention, l'auteur du sujet voulait pouvoir calculer des factorielles jusqu'à 20! . Avec des int il y aura très probablement un problème de taille de variable (dès 13! il me semble, sur la plupart des machines).

      Ce problème est bien sûr aisément contournable si on utilise un long, mais il faut encore vérifier que ça joue.
      (En pratique, pour du calcul scientifique on utiliserait probablement des flottants d'ailleurs)
      0
      1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        Très juste. J'avais même pas fait attention.

        Ce problème est bien sûr aisément contournable si on utilise un long, mais il faut encore vérifier que ça joue.
        Pour les long, ça ne marchera pas non plus, car comme tu dis "sur la plupart des machines", le long équivaut au int.

        Par contre, il est tout à fait possible d'utiliser le type long long (C99). Cela marchera très bien.

        En pratique, pour du calcul scientifique on utiliserait probablement des flottants d'ailleurs
        Pas pour les calculs justes. Les flottants introduisent des erreurs d'arrondis. Par exemple pour la cryptographie, jamais on utilisera des flottants.
        Pour le calcul de factoriels (à moins de chercher qu'un arrondi...), on utiliserait plutôt les BIG Num qu'on utilisera facilement via une bibliothèque (comme libssl).
        0
      2. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        merci pour la correction (long long) !
        0