Probleme c++, compatibilité pow(n,k) et %

Fermé
Bapppi Messages postés 3 Date d'inscription mercredi 8 septembre 2010 Statut Membre Dernière intervention 15 octobre 2010 - 15 oct. 2010 à 22:44
Vicking54 Messages postés 89 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 17 mai 2011 - 17 oct. 2010 à 18:54
Bonjour,
J'essaie de faire un programme en c++ mais je ne comprend pas ou est l'erreur,
___________________________________________________
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;

int nbrdechifr(int x)
{
int k = 1,;
while( x % pow(10,k) != x);
{ k == k+1; }
return k;
}
[...]
_____________________________________________________

L'erreur se trouve a la ligne ou se trouve le while, il me dit "invalid operands of types 'int' and 'double' to binary 'operator%' "

merci de votre aide
A voir également:

2 réponses

ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
15 oct. 2010 à 23:07
bonjour,

les opérandes de modulo (%) doivent être des types entiers et pow(x,y) retourne un type double.
attention à l'écriture:
un ; après le while signifie que l'instruction while est terminée. (donc votre while ne fait rien.)
une affectation en C (ou C++) est réalisée par un opérateur = (k=k+1)
l'opérateur == est un opérateur de comparaison.

cdlt
0
Vicking54 Messages postés 89 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 17 mai 2011 26
Modifié par Vicking54 le 16/10/2010 à 06:57
Voici ton code corrigé

int nbrdechifr(int x) 
{ 
int k = 1; 
// Ici le (int) est un cast pour utiliser le % sans soucis 
while( x % (int) pow(10.0,k) != x) 
{ 
     // Ici il faut utiliser =(affectation) au lieu de == (comparaison) 
    k = k+1;
} 
return k; 
} 
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
16 oct. 2010 à 09:32
en C (C++) k=k+1 est souvent délaissé au profit de l'incrémentation unaire ++k ou k++;
le code du while pourrait se résumer à
while(x % (int)pow (10.0,k++) != x) ;
0
Vicking54 Messages postés 89 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 17 mai 2011 26
16 oct. 2010 à 10:07
oui k++ serait avantagé mais bon c'est plus compréhensible pour quelqu'un qui débute. oui le while peut être aussi raccourci comme cela mais pour la même raison que j'ai cité tout à l'heure c'est mieux de bien développer pour mieux comprendre
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
16 oct. 2010 à 10:41
A ydurce,

Sauf que si tu fais ton while (... k++), il ne faut pas oublier de dire qu'il faut mettre return k-1; au lieu de return k...
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
16 oct. 2010 à 21:59
tout a fait ou k=0 si on met ++k
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
16 oct. 2010 à 22:20
pour vicking54:
l'opérateur ++ (ou --) est important en C ou C++ car il est associé à la notion de pointeur ou d'itérateur et doit être abordé et compris très tôt. D'autant que l'opérateur = est une aberration mathématique auquel on devrait substituer dans ce cas là l'opérateur +=.
pour le while, je suis d'accord avec toi sur le peu d'intérêt d'une contraction sinon à faire appréhender les notions de post ou pré incrément qui créent des différences importantes dans les résultats comme l'a justement noté fiddy.
0