Programme C puissance d'un entier [Fermé]

Messages postés
10
Date d'inscription
dimanche 21 février 2010
Statut
Membre
Dernière intervention
11 mars 2010
- - Dernière réponse : malek_
Messages postés
1
Date d'inscription
mardi 17 janvier 2017
Statut
Membre
Dernière intervention
27 janvier 2017
- 17 janv. 2017 à 22:54
Bonsoir,
J'ai écrit un programme en C qui calcule la puissance d'un entier. Mais à la fin de l'exécution le programme m'affiche l'entier saisi sans calculer sa puissance. Merci de me corriger le programme:

#include<stdio.h>
void main () {
int i;
int p;
int q;
int a;
printf("saisir l'entier");
scanf("%d",&a);
printf("saisir la puissance");
scanf("%d",&p);
if (p=0)
q=1;

else

q=1;
{
for (i=1; i<=p ; i++);
q=q*a;
}
printf("%d\n",q);
system ("pause");
}
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1602
11
Merci
Bonsoir,
Tu peux simplifier l'algorithme.
En fait, juste besoin de mettre la variable q à 1 et d'un simple while. Même pas besoin de considérer le cas où l'exposant est nul.
Par exemple :
#include <stdio.h>

int main(void) {
    int a;
    int p;
    int q;
    printf("saisir l'entier : ");
    fflush(stdout);
    scanf("%d",&a);

    printf("saisir la puissance : ");
    fflush(stdout);
    scanf("%d",&p);

    q=1;
    while(p--)
        q*=a;

    printf("%d\n",res);
    return 0;
}

Si tu as des questions sur le reste du code, n'hésite pas.
Cdlt,

Dire « Merci » 11

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63900 internautes nous ont dit merci ce mois-ci

malek_
Messages postés
1
Date d'inscription
mardi 17 janvier 2017
Statut
Membre
Dernière intervention
27 janvier 2017
-
#include<stdio.h>
#include<math.h>
int puiss (int x,int y )
{
int q ; int i=0;
if(y==0)
q=1;
else
{
q=1;
while (i<y)
{
q=q*x;
i++;
}
}
return q;
}
int main()
{
int a;
int p; int waw;
printf("****Bonjour malek****");
printf("comment cv pas !");



printf("\n saisir l'entier x :\n ");
scanf("%d",&a);
printf("\n saisir la puissance p : \n ");
scanf("%d",&p);
/*calcule de puissance*/
waw=puiss(a,p);
printf("\n la puissance de %d ** %d est : %d \n",&a,&p,waw);
return 0;
getch();


}
2
Merci
#include<stdio.h>
#include<math.h>
int main()
{
int a;
int p; int q; int i;
printf("saisir l'entier");
scanf("%d",&a);
printf("saisir la puissance");
scanf("%d",&p);
/*calcule de puissance*/
if(p==0)
q=1
else
{
q=1;
while (i<=p)
{
q=q*a;
i++;
}
}
printf("la puissance de l'entier est %d",q);
return 0;
}
/*vous verifier avec la bibliothèque math.h si non vous l'enlevez,si sa ne marche pas mon voyez un mail sur khader.chiheb@gmail.com pour rechercher une autre solutios*/
blux
Messages postés
23911
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2663 -
Ce sera faux...
Messages postés
23911
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2663
1
Merci
Salut,

tu saisis p, et tu fais des calculs avec q que tu initialises tout le temps à 1, donc c'est normal...
1
Merci
void main () {
int i;
int p;
int q;
int a;
printf("saisir l'entier");
scanf("%d",&a);
printf("saisir la puissance");
scanf("%d",&p);
if (p==0)
q=1;

else

{
for (i=1; i<=p ; i++);
q=a*a;
}
printf("%d\n",q);
system ("pause");
}

tu as fait 3 erreurs,

1) tu a initialisé q=1 a chaque fois (apres le else) donc il faut l'enlever
2) comme je te l'ai dit quand on veut faire une condition si p vaut 0 on doit mettre 2 fois le signe == donc if(p=0) devient if (p==0).
3) 3 exposant 5 par exemple c'est 3 x 3 x 3 x 3 x 3 (5 fois) or toi tu fais for (i=1; i<=p ; i++);
q=q*a; ( le resultat = resultat x l'entier ) c'est FAUX. pour calculer un exposant il faut mettre q=a*a; (le resultat = l'entier x l'entier).

voila ce code marche et j'espere que mes expliquations sont claires, faut comprendre ce que tu écrit (traduit le dans ta tete par des phrases)
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1602 -
Par contre, ce n'est pas void main() mais bien int main(void) pour le prototype de main sans arguments.

Cdlt,
xkaiser88
Messages postés
10
Date d'inscription
dimanche 21 février 2010
Statut
Membre
Dernière intervention
11 mars 2010
-
Je crois plutot que c'est toi qui te trompe, ton programme calcul le carré d'un entier !!
0
Merci
salut,
oui comme l'a dit blux tu initialise tout le temps q=1, donc tu peux l'enlever le q=1 sous le else, et le " if (p=0) "
au fait ya 2 == pour signifier que " si la variable p VAUT 0 "
Messages postés
10
Date d'inscription
dimanche 21 février 2010
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
Après avoir fait les modifications indiqués le programme me fait une mulitplicationdu genre si je saisi 3 et 2,
le programme m'affiche 6 alors qu'il doit normalement afficher 9.
Messages postés
23911
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2663
0
Merci
Voui, mais multiplier quelque chose par 1, même une infinité de fois, ne suffit pas à faire changer sa valeur...

1 est l'élément neutre de la multiplication...
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1602 -
Voui, mais multiplier quelque chose par 1, même une infinité de fois, ne suffit pas à faire changer sa valeur...
<mode relou>Pourtant 1 puissance infini, ça ne vaut pas 1 :p</mode relou> ^^
blux
Messages postés
23911
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2663 > fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Et ça ferait dans les combien, sans compter l'inflation ?
Messages postés
10
Date d'inscription
dimanche 21 février 2010
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
Alors que dois-je faire ??
Messages postés
23911
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2663
0
Merci
arrêter d'initialiser q=1 même quand la puissance est différente de 0...
Messages postés
21510
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
8 octobre 2012
3370
0
Merci
Salut,

q au lieu de res ;-)
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1602 -
En effet ;-))).
bjr, que veux dire while(p--)?
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1602 -
while(p--) { 
   ... 
} 

signifie :
while(p!=0) { 
   p=p-1; 
   ... 
}
Messages postés
10
Date d'inscription
dimanche 21 février 2010
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
Ce programme n'affiche rien !!
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1602 -
J'imagine que c'est parce que t'es sur windows et que tu n'as pas lancé le programme en ligne de commandes. Ainsi la fenêtre se referme à la fin du programme et t'as l'impression que le programme n'affiche rien.
Rajoute un system("pause"); défini dans stdlib.h avant le return 0; final.

Cdlt,
Messages postés
10
Date d'inscription
dimanche 21 février 2010
Statut
Membre
Dernière intervention
11 mars 2010
0
Merci
Merci ça marche super bien !!!!!!!!!
0
Merci
Au pire mais vraiment au pire y a un petit truc dans la bibliothèque math.h qui s'appelle pow(a,b) et qui te le fait automatiquement ta puissance mais bon je dit ca je dit rien donc vaut mieux que je la ferme ;)
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1602 -
math.h n'est pas une bibliothèque.
Et pow() n'est pas adaptée pour la puissance de calcul d'entiers.
Surtout que l'énoncé est de le calculer...