IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

atol et fonction factorielle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 1
    Par défaut atol et fonction factorielle
    bonjour,

    premier post sur ce forum que je ne connais pas du tout, et voici pour commencer :
    j'ai fait une petite fonction pour calculer la factorielle d'un nombre, que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <stdio.h>
    #include <stdlib.h>
     
    long int fact(long int n)
    {
       if (n == 1) return n;
       else return n*fact(n-1);
    }
     
    int main(int argc, char **argv)
    {
      if (atoi(argv[1]) == 0) 
        printf("0");
      else
        printf("%l",fact(atol(argv[1])));
      return 0;
    }
    voici les erreurs que j'ai avec gcc :
    ./fact.c: In function ‘main’:
    ./fact.c:15: warning: conversion lacks type at end of format
    ./fact.c:15: warning: too many arguments for format

    au départ, et pour l'exercice, j'avais utilisé le type int. Seulement celui-ci est très rapidement mis hors contexte (fact 20 devient négatif, 21 dépasse allègrement).

    je ne vois pas où est l'erreur... Je crois que les types sont bons, que printf et atol sont bien utilisés... Avec le type int, la fonction fact marchait parfaitement...

    Des idées ? Merci

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    1. C'est %ld et non %l (qui n'est même pas un code valide, d'où les warnings) pour long int (et %lu pour unsigned long int). C'est tout pour les warnings.

    2. Le type long n'est pas forcément plus grand que le type int, mais il est au minimum égal à ce type. Les détails dépendent essentiellement du processeur utilisé.

    3. Que se passe t-il si j'appelle : fact(0) ?

    4. 0! = 1 et non 0.

    5. Ajouter un '\n' à la fin des printf (ex : printf("0\n")).

Discussions similaires

  1. Fonction factoriel d'un nombre
    Par Arketran dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/01/2013, 20h13
  2. Fonction factorielle qui bug
    Par sk8trasher dans le forum Débuter
    Réponses: 12
    Dernier message: 02/06/2012, 09h14
  3. Aide Fonction factorielle
    Par Bibibis dans le forum Débuter
    Réponses: 40
    Dernier message: 03/09/2010, 14h10
  4. [Turbo Pascal] Pile d'exécution pour la fonction factorielle récursive
    Par HASALGO dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 27/12/2009, 12h57
  5. Réponses: 27
    Dernier message: 23/03/2008, 23h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo