Multiplication successive de puissance en C.. [Résolu/Fermé]

Signaler
Messages postés
33
Date d'inscription
lundi 24 septembre 2012
Statut
Membre
Dernière intervention
30 mars 2013
-
Messages postés
33
Date d'inscription
lundi 24 septembre 2012
Statut
Membre
Dernière intervention
30 mars 2013
-
Bonjour tout le monde.

Voilà, depuis hier je me prend la tete sur un programme sur lequel je ne trouve aucunes solutions.

L'ennoncé est pourtant clair :

Calculer par multiplications successives la puissance N d'un nombre X. N et X sont entrés au
clavier et doivent être positifs.

Voilà comment j'essaye de faire moi

#include<stdio.h>
#include<math.h>
#include<conio-bis.h>

int main ()
{
int N,i,ok;
int X, puissance=0;

printf("Entrez la base de la puissance : ");
scanf("%d",&X);
printf("\nEntrez l'exposant de la puissance : ");
scanf("%d",&N);
do
{
ok=0;
if ((X<0)||(N<0))
{
ok=1;
}
} while (ok==1);


for (i=0;i<=N+1;i++)
{
puissance=pow(X,1)*pow(X,N--);
getch();
printf("%d\n",puissance);
}

printf("\nLe resultat est de %d\n",puissance);





getch(); getch();
return 0;
}


Premiere partie du programme, je verifie si les nombres entrées sont positifs.
Apres j'essaye de trouver une formule pour que je puisse faire une multiplication successive du genre 2^3 * 2^2 * 2^1 = 64. Mais depuis deux jours aucunes formules ne marche..

Qui pourrait essayer de m'aider ? Essayer le programme là sur son pc et me dire qu'est ce qui cloche, qu'est ce qui ne va pas ?

Bonne soirée à tous !

2 réponses

Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
86
if ((X<0)||(N<0))
Je me trompe peut-être .. je lis : SI ((X est plus petit que 0) OU (N est plus petit que 0)) .. dans ce cas "OK" est égal à 1
Et ensuite tu dis "TANT QUE (OK est égal à 1)
?? C'est normal
1
Merci

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

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
33
Date d'inscription
lundi 24 septembre 2012
Statut
Membre
Dernière intervention
30 mars 2013

Cela veut dire que si ok = 1 on ne sort pas de la boucle et on reste dedans.. ^^
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 756
Le but de l'exercice est de ne pas utiliser la fonction pow().
Il faut donc l'oublier (et donc tu peux enlever <math.h>)
L'énoncé dit qu'il faut calculer X puissance N, c'est-à-dire : X*X...*X (N fois).

do
{
ok=0;
if ((X<0)||(N<0))
{
ok=1;
}
} while (ok==1);

Si l'utilisateur rentre un nombre négatif, cela fait une boucle infinie...
Il faudrait plutôt l'inviter à rechoisir un autre nombre (scanf()).
Il te suffit de mettre une boucle while sur scanf("%d",&X); et une autre sur scanf("%d",&Y);

A la place de getch(), utilise plutôt getchar() qui est portable. Ou sinon system("Pause");

Une fois que t'as corrigé tout ça, poste ton code entre deux balises "code" (à droite du bouton "souligné").

Cdlt,
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 756
Pour les scanf, il vaut mieux plutôt les mettre chacun dans un while différent.
Par exemple :
int X=-1; 
int N=-1; 
int resultat=1; 
while(X<=0) { 
   printf("X : "); 
   scanf("%d", &X); 
} 

Ensuite, tu fais pareil pour N.
J'ai supposé que X et N devaient être strictement positif. Cela sera plus simple pour éviter de gérer les cas comme 0 puissance 0.

Pour la multiplication, tu cherches trop compliqué. C'est vraiment simple.
Tu dois faire X*X*X (N fois). C'est-à-dire, tu fais une simple boucle for pour faire N itération. A chaque itération tu multiplies resultat par X et tu stockes le résultat dans la variable resultat.

Et vire moi aussi : #include<conio-bis.h> ;-).
Messages postés
33
Date d'inscription
lundi 24 septembre 2012
Statut
Membre
Dernière intervention
30 mars 2013

#include<stdio.h>

int main ()
{
int N,ok,i,cpt;
int X, puissance=0;

do
{
ok=0;
printf("Entrez la base de la puissance : ");
scanf("%d",&X);
printf("\nEntrez l'exposant de la puissance : ");
scanf("%d",&N);
if ((X<=0)||(N<=0))
{
ok=1;
printf("Entrez des nombres positifs s'il vous plait !\n\n");
}
} while (ok==1);

for (i=0;i<=N;i++)
{
cpt=cpt+1;
puissance=X*X;
}

printf("\nLe resultat est de %d\n",puissance);





getchar(); getchar();
return 0;
}


Comme ca pour la mutiplication ?
Pour les scanf je prefere faire ainsi, je trouve cela plus simple..
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 756
Pour la multiplication, c'est mieux.
Déjà, tu peux enlever cpt, il te sert vraiment à rien.
Ensuite pour ta variable puissance : puissance=puissance*X; serait beaucoup mieux. Ou plus concis : puissance*=X;
Et là ça devrait marcher.
N'oublie pas de systématiquement utiliser les balises "code" pour mettre un code. Cela peut paraître contraignant, mais cela nous aide grandement la tâche pour lire un code. D'ailleurs ton indentation est à revoir. Ce n'est que du style, mais on s'y retrouve beaucoup mieux et les autres te remercieront (moi le premier ;-)).
Messages postés
33
Date d'inscription
lundi 24 septembre 2012
Statut
Membre
Dernière intervention
30 mars 2013

C'est gentil pour ces conseils, mais ca m'a trop casser la tete.. J'avais pas compris l'enoncé dans ce sens là moi. On m'aurait parlé d'une somme je l'aurais fait les yeux fermés mais ici non je pensais carrement qu'il fallait faire un programme qui calculerais 4^1*4^2*4^3 si l'utilisateur entre 4 comme base et 3 pour exposant.
Merci beaucoup :D

(Je ferais attention pour mes code ^^ )
Messages postés
33
Date d'inscription
lundi 24 septembre 2012
Statut
Membre
Dernière intervention
30 mars 2013

#include<stdio.h>
#include<conio-bis.h>

int main ()
{
    int N,ok,i,cpt,resultat=0;
    int X, puissance=1;

    do
    {
    ok=0;
    printf("Entrez la base de la puissance : ");
    scanf("%d",&X);
    printf("\nEntrez l'exposant de la puissance : ");
    scanf("%d",&N);
    if ((X<=0)||(N<=0))
    {
    ok=1;
    printf("Entrez des nombres positifs s'il vous plait !\n\n");
    }
    } while (ok==1);
    
  for (i=0;i<N;i++)
  {
      puissance=puissance*X;
      textcolor(RED);
      printf("%d\n",puissance);
  }
      printf("\nLe resultat est de %d\n",puissance);

    
    
    
    
    getchar(); getchar();
    return 0;
}



Voilà le resultat final ! Un grand merci maintenant sa marche :D