Erreur de compilation , explication de source

sylvie -  
MissZaza Messages postés 149 Statut Membre -
Bonsoir , voici le code d'un programme :

#include <stdio.h>
int puiss(int m, int n);

int main(void)

{

int i;

for( i = 0; i < 10; i++)
printf("%d %d %d\n", i, puiss(2,i), puiss(-3,1));
return 0;

}

{

int i, p;

p = 1;
for(i = 1; i <= n; ++i)
p = p*base;
return p;

}


alors j'ai 2 questions :

1. pour ce code ne compile pas , je l'ai recopié dans un livre ( j'utilise linux et gcc )

2. quelqu'un peut il m'expliquer comment la fonction puiss met base à la puissance n car je ne comprends vraiment pas le 2eme bloque , je vous remercie .

8 réponses

scol30 Messages postés 22 Statut Membre
 
Tu as du faire un mauvais copier/coller car tu a oublié de remettre la fonction lorsque tu la definie. ensuite tu passes 2 paramètres à puiss donc utilises les tous les 2. En fonction de tes arguments je suppose que tu veux faire m puissance n. Donc:

#include <stdio.h>

int puiss(int m, int n);

int main(void) {
int i;
for( i = 0; i < 10; i++)
printf("%d %d %d\n", i, puiss(2,i), puiss(-3,1));
return 0;
}

int puiss(int m, int n) {
int i, p;
p = 1;
for(i = 1; i <= n; ++i)
p *= m;
return p;
}

Stef
0
sylvie
 
ce que je cherche à savoir surtout c'est de comprendre çà :

int i, p;

p = 1;
for(i = 1; i <= n; ++i)
p = p*base;
return p;

je vois vraiment pas ici comment le nombre "base" est élevé à la puissance n , je ne comprends RIEN à cette partie du code ....
0
scol30 Messages postés 22 Statut Membre
 
en mathématique
2 puissance 3 = 2*2*2
donc tu fais une boucle for de 1 à la valeur de la puissance (ici 3)
dans cette boucle, le seul moyen de pouvoir faire 2*2*2 c'est de mémoriser les multiplications déjà faites donc tu initialises p à 1, puis p mémoriseras les valeurs des multplications de ta boucle for. Ici, pour 2 puiss 3

quand i=1
p = 2*1 = 2
puis i=2
p = 2*2 (valeur de p mémorisée quand n=1) = 4
puis n=3
p = 2 * 4

Stef
0
sylvie
 
c'est vraiment super compliqué , je comprends pas grand chose , moi je lis çà comme çà :

int i, p;

p = 1;
for(i = 1; i <= n; ++i)
p = p*base;
return p;


on déclare 2 entier i et p , et on dit que p vaut 1 , mais on ne sait ni ce que p ni ce que i représentent . le n dans la boucle on sait meme pas d'où il sort , bref on ne sait pas du tout ce que représentent les lettres , ni base , bref que dalle , moi je suis perdue , je sais pas comment tu as fait pour traduire en français ce code en C....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scol30 Messages postés 22 Statut Membre
 
il ne faut pas te baser sur le code que tu as mis dans ton premier post. Utilises celui que je t'ai mis et ca devrait être plus clair.

En effet, dans ce que tu as posté tu as oublié l'entête de la fonction. En fait tu doit avoir quelque chose comme ça:
int puiss(int m, int n) {
int i, p;
p = 1;
for(i = 1; i <= n; ++i)
p = p*m;
return p;
}

ici tu vois à quoi sert m et n car tu dois vouloir faire m puiss n

Stef
0
sylvie
 
le code que je t'ai montré au début c'est exactement recopié mot pour mot celui qui se trouve dans le livre le langage C norme ANSI de k&r , et il ne compile pas , j'ai rien oublié , ce n'est pas normal....
0
sylvie
 
après avoir relu 256 fois ton messages , je commence à mieux comprendre , mais une dernière question : comment fait p pour mémoriser le nombre de multiplications , et au fait dans la boucle je ne vois aucune multiplication , juste une variable i qui s'incrémente...
0
MissZaza Messages postés 149 Statut Membre 33
 
Si tu préfères, il aurait pu écrire :
int puiss(int m, int n) {
int i, p;
p = 1;
for(i = 1; i <= n; i++)
{
p = p*m;
}
return p;
}
Mais les accolades pour la boucle for sont inutiles car il n'y a qu'une seule instruction.
Bonne soirée.
0