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 :

8x11=0 !! problème fonction puissance


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut 8x11=0 !! problème fonction puissance
    Bonjour !
    Voila j'ai un problème que je n'arrive pas résoudre dans la boucle d'une fonction puissance, quand je rentre 8 puissance 11 le programme me donne 0...
    J'utilise comme outil de développement Microsoft Visual C++ 6.
    Voilà la source:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #include <stdio.h>
    int a,b,res;
    int puissance(int a,int b)
    {
    	res=1;
    	while(b>0)
    		{
    			res=res*a;
    			b=b-1;
    		}
    	res=a*b;
    	return res;
    }
    void main()
    {
    	while(1)
    	{
    		printf("saisissez une entier positif:\n",a);
    		scanf("%d",&a);
    		printf("saisissez la puissance(positive):\n",b);
    		scanf("%d",&b);
    		res=puissance(a,b);
    		printf("le resultat est:%d\n",res);
    	}
    }

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 56
    Points : 47
    Points
    47
    Par défaut
    utilise autre chose que des int ...

  3. #3
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Salut,

    8 puissance 11 dans un entier ??? Un peu petit non ?
    Essaye avec un long.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long puissance(int a,int b)
    Bye.

    [edit] Effectivement, même un long ne fait pas l'affaire

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: 8x11=0 !! problème fonction puissance
    Citation Envoyé par Renesis57
    #include <stdio.h>

    • main() retourne int. Toujours.
    • C'est quoi ces horreurs de variables globales et cette indentation catastrophique ?
    • Une boucle blanche ? Comment on quitte ? Ctrl-break ? C'est moche...
    • scanf() ? Tape a<enter> pour voir ...
    • C'est quoi ces ,a et ,b dans les printf() ?


    Essaye ça...

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include <stdio.h>
    #include <stdlib.h>
     
    unsigned long puissance(unsigned long a,unsigned long b)
    {
        int res = 1;
        while(b>0)
        {
            res*=a;
            b--;
        }
        return res;
    }
     
    int main(void)
    {
        int end=0;
     
        while(!end)
        {
            char s[16];
     
            printf("saisissez une entier positif (ou <enter> pour quitter) : ");
            fflush (stdout);
            fgets(s, sizeof s, stdin);
     
            end = *s=='\n';
     
            if (!end)
            {
                unsigned long a;
                unsigned long b;
                unsigned long res;
                a = strtoul(s, NULL, 10);
     
                printf("saisissez la puissance (positive) : ");
                fflush (stdout);
                fgets(s, sizeof s, stdin);
                b = strtoul(s, NULL, 10);
     
                res = puissance(a,b);
     
                printf("le resultat est:%lu\n",res);
            }
        }
        return 0;
    }

  5. #5
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Points : 62
    Points
    62
    Par défaut
    Il y a aussi un pb d'algo. Tu sors de ta boucle while quand b vaut 0. Et tu fais res=a*b...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    merci pour votre aide je ferais gaffe à la balise code la prochaine fois
    @Jack69: j'ai pas compris ce que tu voulais dire
    Edit: Si j'ai compris mais pour l'instant je me limite aux puissances positives pour pas trop compliquer la chose, c'est explicité dans les "printf"

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Re: 8x11=0 !! problème fonction puissance
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Renesis57
    #include <stdio.h>

    • main() retourne int. Toujours.
    • C'est quoi ces horreurs de variables globales et cette indentation catastrophique ?
    • Une boucle blanche ? Comment on quitte ? Ctrl-break ? C'est moche...
    • scanf() ? Tape a<enter> pour voir ...
    • C'est quoi ces ,a et ,b dans les printf() ?
    les ,a ,b dans printf c'est les variables qu'on veut afficher

    @ Elijha: J'ai essayé avec un long, ça me donne toujours 0 , pendant 2 heures au bahut je me suis pris la tete la dessus et je trouve toujours pas...

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut Re: 8x11=0 !! problème fonction puissance
    Citation Envoyé par Renesis57

    les ,a ,b dans printf c'est les variables qu'on veut afficher
    Je veux bien mais tu veux afficher quoi la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     printf("saisissez une entier positif:\n",a);
    Ca affiche literalement
    saisissez une entier positif:
    Il n'y a pas de variables a afficher

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Re: 8x11=0 !! problème fonction puissance
    Citation Envoyé par Skyrunner
    Citation Envoyé par Renesis57

    les ,a ,b dans printf c'est les variables qu'on veut afficher
    Je veux bien mais tu veux afficher quoi la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     printf("saisissez une entier positif:\n",a);
    Ca affiche literalement
    saisissez une entier positif:
    Il n'y a pas de variables a afficher
    Oups, erreur d'inattention sorry

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    8**11 = (2**3)**11 = 2**(3*11) = 2**33
    -> trop grand pour un nombre 32 bits, tel qu'un int ou un long
    Si ton compilateur supporte les long long, ça devrait marcher...

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    En fait je croyais que c'était un cas que j'avais oublié a traiter dans la boucle comme ça me donnait "0", en fait c'est une erreur d'overflow
    Merci
    Voilà la source juste:
    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
    18
    19
    20
    21
    22
    23
     
    #include <stdio.h>
    int puissance(int a,int b)
    {
    	int res;
    	res=1;
    	while(b>0)
    		{
    			res=res*a;
    			b=b-1;
    		}
    	return res;
    }
    void main()
    {
    		int a,b,res;
    		printf("saisissez une entier positif:\n");
    		scanf("%d",&a);
    		printf("saisissez la puissance(positive):\n");
    		scanf("%d",&b);
    		res=puissance(a,b);
    		printf("le resultat est:%d\n",res);
    }

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Renesis57
    Voilà la source juste:
    Non. Ca sert à quoi que je poste des articles si tu ne les lis pas ?

  13. #13
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Renesis57
    Voilà la source juste:
    Non. Ca sert à quoi que je poste des articles si tu ne les lis pas ?
    +1

    Deja dis

    int main(void)

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Skyrunner
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Renesis57
    Voilà la source juste:
    Non. Ca sert à quoi que je poste des articles si tu ne les lis pas ?
    +1

    Deja dis

    int main(void)
    On m'a appris a faire comme ça en cours , maintenant si je mets "int main(void)", cela voudrait dire que la procedure principal renverais un entier, c'est ça?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 81
    Points
    81
    Par défaut
    Le probleme ne vient pas, les autres je sais pas si vous avez trop fumez ou quoi mais... un nombre * 0 donnera toujours 0.

    ET OOOOO !!!! un nombre * 0 = 0 reveille toi....

    Pis fais la en recursif c nettement plus cours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int     my_power_rec(int nb, int power)
    {
      if (power == 0)
        return (1);
      if (nb < 0)
        return (0);
      return (nb * my_power_rec(nb, power - 1));
    }
    Ne gere pas les unsigned int donc pas en de chiffre en dessous de 0...

    Franchement revoie ton code les variables globales sont a proscrire dans la majeur partie des cas, scanf aussi et je dirai meme printf parcequ'il peut corriger des bugs...

  16. #16
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Renesis57
    Voilà la source juste:
    Non. Ca sert à quoi que je poste des articles si tu ne les lis pas ?
    Peut être qu'une url comme celle ci que j'allais lui envoyer sur les saisies:
    http://emmanuel-delahaye.developpez....tes.htm#saisie evite scanf() pour l'utilisation que tu fais.
    EDIT: pardon Emmanuel j'avais pas lu ton code tu as bien mis des fgets() alors pourquoi il a remis des scanf()????Pourquoi tes long sont unsigned stp?

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Renesis57
    On m'a appris a faire comme ça en cours ,
    Alors fait lire ça à ton prof (et lit le par la même occasion).

    http://emmanuel-delahaye.developpez....s.htm#typemain

    Si il ne veut rien savoir, quitte le cours et fait toi rembourser...
    maintenant si je mets "int main(void)", cela voudrait dire que la procedure principal renverais un entier, c'est ça?
    Oui, c'est le comportement standard sur une application hébergée par un système. Le système attend une valeur lorsque l'application s'arrête. Une valeur erronée entraine un comportement indéfini.

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Je vois que mes erreurs viennent du fait que je n'ai pas assez de connaissance en C, je ne connaissais pas les fonctions "fgets" et "fgetc". Pour info j'utilise MS Visual Studio C++ 6.
    Merci pour votre aide

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Gnux
    Pourquoi tes long sont unsigned stp?
    Parce qu'il est question "d'entiers positifs".

Discussions similaires

  1. [Turbo Pascal] Problème avec la fonction puissance
    Par aurelie0192 dans le forum Turbo Pascal
    Réponses: 18
    Dernier message: 03/08/2013, 09h48
  2. Problème fonction PL/SQL
    Par SSJ17Vegeta dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/10/2005, 21h14
  3. Problème fonction et trigger sous 7.2
    Par anoukhan dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/06/2005, 22h53
  4. Réponses: 2
    Dernier message: 20/08/2004, 17h10
  5. [LG]fonction puissance en pascal
    Par le 27 dans le forum Langage
    Réponses: 8
    Dernier message: 13/12/2003, 23h21

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