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
    Nouveau 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
    Points : 1
    Points
    1
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ordarrondi= roundf(ord);
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    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.

  3. #3
    Nouveau 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
    Points : 1
    Points
    1
    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