IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

probleme de conversion float en int


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 2
    Par d�faut probleme de conversion float en int
    bonjour a tous, je ne sais pas si je m'exprime correctement dans le titre mais le probleme est la.


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
       float ord;
         int ordfinal; 
         float abs;
         int ordarrondi;
         float eps=0.0001;      
         for(int i=0;i<80;i=i+1){
             if (i=0)
               abs=-3.9;
               else
                  abs=(i/10)-3.9;      
             ord=f(abs);
             ordarrondi= roundf(ord);
             ordfinal=-ordarrondi+40;
             if(fprime(i)>eps)              
                g[i][ordfinal]='/';
                else if(fprime(i)<eps)
                       g[i][ordfinal]='\\';
                     else
                       g[i][ordfinal]='_';     
                       }
    au pr�alable, j'ai utilis� math.h et la fonction float roundf(float x)
    j'ai �galement d�finit
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    float f(float x){
          float y;
          y=(2*x*x*x)-(2*x*x)-(18*x)+18;
          return y;
          }
    float fprime(float x){
          float yprime=(6*x*x)-(4*x)-18;
          return yprime;
          }
    je part donc au debut avec un "numero de case de matrice" entier, que je convertit en la valeur de x (je dois en fait ecrire un code me permettant de tracer le graphe d'une fonction math�matique)
    cette valeur de x est l'absisse (d�cimale) avec quoi je trouve l'ordonn� (d�cimale �galement). j'avais donc d�clar� float ord. mais ensuite pour trouver la case de matrice correspondante, je dois arrondir, ce qui me donne ordarrondi, que j'ai d�clar� lui en int puisque je l'utilise par apres dans la matrice.

    mon erreur de compilation se trouve donc au niveau de la ligne
    cette erreur dit :
    [Warning] converting to `int' from `float'



    je ne vois pas comment faire autrement puisque je ne peux pas utiliser de float dans une matrice
    merci de trouver un solution

  2. #2
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    O� vois-tu une erreur de compilation ?

    Le compilateur te dis seulement : Attention, convertir un float en entier implique une perte d'information. Est-ce bien ce que tu voulais faire ?

    Si c'est bien le cas (�a en a tout l'air), tu peux ignorer ce warning.

    Maintenant, c'est une bonne habitude de compiler sans warnings, ne serait-ce que parce que si on ne le fait pas, on ne verra pas le warning utile au milieu des 1000 inutiles. Donc il vaut mieux trouver une m�thode qui indique � ton compilo que tu sais ce que tu fais. La il ne s'agit plus de c++, mais d'une bonne connaissance du/des compilo(s) que tu utilise.

    Quelques pistes :
    - Expliciter le cast :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    ordarrondi= static_cast<int>(roundf(ord)); // ou encore :
    ordarrondi= static_cast<int>(ord);
    - Faire taire ton compilo � l'aide de #pragma (sp�cifiques � un compilateur), qui d�sactivent le warning au d�but de la ligne pour les r�activer � la fin.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 2
    Par d�faut
    merci, je ne savais pas que je pouvais les ignorer.
    je suis plus bas que novice en informatique, je dois realiser ce programme pour un cours obligatoire, qui , je trouve, n'est vraiment pas bien donn�.


    j'ai maintenant un autre probl�me

    je dois utiliser une fonction pour initialiser le graphe, c-a-d remplir une matrice de blancs, puis avec les axes.

    ensuite il me faut utiliser la fonction dans le main, et j'ai l'impression que je ne le fais pas du tout comme il faut.
    voici ma fonction:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    void initgraph(char g[70][80]){
     
         for (int j=0; j<70; j++)
             for (int i=0; i<80; i++)
             {
                 if (i==39)
                 {       
                      if (j!=40)
                          g[i][j]='|';
                      else
                          g[i][j]='+';
                 }       
                 else if (j==40)
                          g[i][j]='-';
                      else 
                          g[i][j]=' ';
             }
     
         g[39][0]='^';
         g[79][40]='>';  
     
    }
    et ce que j'ai mis dans le main:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    int main(int argc, char* const argv [])
     
    {
         int x=80, y=70;
         char g[y][x];
     
        initgraph(g[y][x]);
        tracegraph(g[y][x]);
        affichgraph(g[y][x]);
     
     
     
         int z;
          cin>>z;       
         return 0;
    }
    ou tracegraph et affich graph sont des fonctions similaires.
    au niveau de:
    avec comme erreur:
    invalid conversion from `char' to `char (*)[80]'
    et la je ne sais meme pas ce que ca veut dire

Discussions similaires

  1. Conversion float en int
    Par nikobordx dans le forum C++
    R�ponses: 12
    Dernier message: 24/12/2014, 13h03
  2. Conversion float vers int
    Par jeremy75 dans le forum C++
    R�ponses: 2
    Dernier message: 20/05/2014, 16h54
  3. Conversion float en int?
    Par romain1 dans le forum D�buter avec Java
    R�ponses: 1
    Dernier message: 06/09/2008, 18h44
  4. Conversion du type int � float
    Par @yoyo dans le forum D�buter
    R�ponses: 9
    Dernier message: 16/01/2008, 12h22
  5. Conversion float vers int
    Par vargasvan dans le forum C
    R�ponses: 2
    Dernier message: 05/10/2005, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo