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

Bapppi Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
Vicking54 Messages postés 95 Statut Membre -
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

2 réponses

  1. ydurce Messages postés 81 Statut Membre 18
     
    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
  2. Vicking54 Messages postés 95 Statut Membre 26
     
    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
    1. ydurce Messages postés 81 Statut Membre 18
       
      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
    2. Vicking54 Messages postés 95 Statut Membre 26
       
      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
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    4. ydurce Messages postés 81 Statut Membre 18
       
      tout a fait ou k=0 si on met ++k
      0
    5. ydurce Messages postés 81 Statut Membre 18
       
      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