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 :

problème de passage de paramètres dans une fonction


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 46
    Points : 28
    Points
    28
    Par défaut problème de passage de paramètres dans une fonction
    Salut

    j'ai un sérieux problème un truc bizarre que je comprend pas

    voila une méthode de la classe Point:
    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
        /**
           * get coordinates at the date
           * @param  double*    coordinate x
           * @param  double*    coordinate y
           * @param  double     date
           * @return boolean    true if there are coordinates
           *                    at the date, else false
           */
    bool 
    Point::get_coordinate(double* x,double* y,double d)
    {
       if (coordinates.find(d)==coordinates.end())
         return false;
      *x=(coordinates[d].first);
      *y=(coordinates[d].second);
      return true;
    }
    voilà coordinates est une map <double,Pair>
    et pair<double,double>

    mon problème est le suivant pour plusieurs de d ça marche mais pour certaine valeur de d ça marche pas
    Exemple coordinates[0.3] existe
    lorsque d prend la valeur 0.3 ça marche pas il ne trouve pas la clé.
    j'ai fais un teste qui affiche quelque chose si d=0.3 mais ça n'affiche rien.
    pourtant j'ai bien passé 0.3 en paramètre.
    d'autre valeur fonctionne bien et d'autre pas

    si quelqu'un peu m'aider merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Les nombre en virgule flottante souffrent d'imprécisions, utiliser l'égalité ou l'équivalence sur ces types mène toujours à ce genre de comportement. Tu devrais utiliser autre chose comme clé, ou introduire une fonction de comparaison des clés qui introduise un epsilon. Mais ça me paraît risqué, surtout si tu as des clés dont les valeurs peuvent être très proches.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    C'est ce que je pensais aussi.

    Je vai essayer de mettre ma clé en integer.

    Je tiens au courant

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    j'ai toujours le meme problème que ma clé soit en double ou en int

    c'est très bizarre

    car si je fais en supposant que ma clé est un int
    coordinates[3].first il m'affiche ma valeur

    mais si je fais un
    d=3;
    get_coordinate(x, y,d);

    et bien coordinates.find(d) me renvoie coordinates.end()

    Si quelqu'un a une idée elle est bien venu

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    As-tu bien modifié ta fonction pour qu'elle prenne en paramètre un int ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Points : 83
    Points
    83
    Par défaut
    Le problème d'imprécision sur les floattants est bien réel (d'ailleur il faut éviter de les utiliser comme clef),
    mais pour une valeur comme "0.3", cela doit fonctionner sans problème.

    Donne ton code pour l'écriture dans la map.
    C'est des dates juliennes que tu utilises ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    c'est le code pour l'écritur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void 
    Point::add_coordinate(double x,double y,int d)
    {
      coordinates[d].first=x;
      coordinates[d].second=y;
    }

    c'est quoi des dates juliennes?? en fait ce que je voulais faire c'était enregistrer dans ma map les coordonées d'un point à une date donnée.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Points : 83
    Points
    83
    Par défaut
    Tes fonctions (add et get), même si elle ne sont pas très optimisées, sont correctes.
    Es-tu certain de toujours manipuler la même map.

    Les dates juliennes sont juste une représentation de date sous forme d'entier.

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Affiche ce qui se trouve dans ta map avant de faire une recherche, si ça ne marche pas avec des entiers c'est qu'elle doit être vide.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Salut

    en fait je n'utilise pas de date julienne et on peut optimiser met fonction get add comment?

    J'ai aussi utiliser un itérateur pour afficher ma map mais toutes mes valeurs sont là et c'est ce que je ne comprend pas.

    sinon on a trouvé un notre moyen qui n'a plus rien avoir avec une map pour faire marché notre prog mais bon s'a m'interrese de savoir ce qui se passe et comment on peut optimser mé fonctions

    merci
    a+

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/03/2009, 12h40
  2. Passage de paramètres dans une fonction
    Par Mickael2604 dans le forum Langage
    Réponses: 6
    Dernier message: 07/12/2008, 23h42
  3. Réponses: 6
    Dernier message: 31/05/2008, 16h45
  4. problème de passage de valeur dans une fonction
    Par jeremie74 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 21/09/2007, 19h30
  5. Réponses: 3
    Dernier message: 20/03/2006, 18h46

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