Programme C puissance d'un entier [Fermé]

Signaler
Messages postés
10
Date d'inscription
dimanche 21 février 2010
Statut
Membre
Dernière intervention
11 mars 2010
-
Messages postés
1
Date d'inscription
mardi 17 janvier 2017
Statut
Membre
Dernière intervention
27 janvier 2017
-
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");
}

13 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 686
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,
11
Merci

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

CCM 61394 internautes nous ont dit merci ce mois-ci

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();


}
#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*/
Messages postés
23761
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 855
Ce sera faux...
Messages postés
23761
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 855
Salut,

tu saisis p, et tu fais des calculs avec q que tu initialises tout le temps à 1, donc c'est normal...
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)
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 686
Par contre, ce n'est pas void main() mais bien int main(void) pour le prototype de main sans arguments.

Cdlt,
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 !!
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

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
23761
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 855
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...
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 686
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> ^^
Messages postés
23761
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 855 >
Messages postés
11066
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

Alors que dois-je faire ??
Messages postés
23761
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 855
arrêter d'initialiser q=1 même quand la puissance est différente de 0...
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 474
Salut,

q au lieu de res ;-)
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 686
En effet ;-))).
bjr, que veux dire while(p--)?
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 686
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

Ce programme n'affiche rien !!
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 686
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

Merci ça marche super bien !!!!!!!!!
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 ;)
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 686
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...