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 :

Calcul d'une nouvelle valeur bloquée à la valeur initiale


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    dev
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Par défaut Calcul d'une nouvelle valeur bloquée à la valeur initiale
    Bonjour à tous,

    Je fais appel à une fonction qui doit me calculer la nouvelle position d'un mobile en fonction du temps initial et de la vitesse initiale. Pour cela, j'ai crée une classe T et une instance de cette classe T1.
    Dans cette classe, j'ai défini la méthode frein qui prend en entrée 2 variable : le temps initial et la vitesse initiale. Cette méthode (ou fonction membre) doit me donnée la nouvelle valeur de l'attribut Position.
    Or je constate que la Position reste bloquée à la valeur initiale ....

    Voici des extraits de code...

    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
    class T
    {
        public:
        T();
        T(double pos);
        T(double pos, double circul, double accel, double frein);
        double frein(int t1, double v);
     
        //Accesseur
        double const GetPosition();
         double const GetVitesse();
        //Mutateur
        void SetPosition(double pos);
     
        private:
        double Position;
     
    };

    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
     
    #include <iostream>
    #include "T.h"
    int DeltaT=1;
     
    //T::T(){Position=0;}
    T::T(double pos): Position(pos){}
    T::T(double pos, double circul, double accel, double frein): Position(pos), v_circul(circul), a_accel(accel) , a_frein(frein){}
     
     
     
     
    //double const T::GetVitesse(){return Vitesse;}
    double const T::GetPosition(){return Position;}
    void T::SetPosition(double pos){Position=pos;}
     
    double T::circul(){Position=Position+DeltaT*v_circul*1000/3600;}
    double T::frein(int tt1, double vv){Position=Position+0,5*(-1)*(2*tt1+1)*1+vv*1000/3600*1;}
    main()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
         V1=V1-DeltaT*0.001*3600 ;
                 std::cout <<T1.frein(t1,V1) << std::endl;

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    On va laisser de côté les remarques désobligeantes que mériterait ces horribles "Accesseurs/Mutateurs" tout droit sortis d'un mauvais cours de JAVA mal dégrossi.
    (il y a aussi pas mal de trucs comme les const mal placés, etc... )

    Le code que vous nous montrez ne devrait même pas compiler.
    Votre "double T::frein(int tt1, double vv)" doit retourner un double mais il n'y pas un seul "return" dans votre implémentation.

    Relisez votre cours ou, peut-être plus probablement, changez de cours (donc sans ces cochonneries de "Accesseurs/Mutateurs") et qui montre rapidement comment se servir d'un débugeur.

  3. #3
    Membre confirmé
    Homme Profil pro
    dev
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Par défaut
    Bonjour,

    Merci pour vous être penché sur le problème. Il est un fait que je maîtrise assez moyennement la syntaxe (difficile à retenir dans un premier temps car les possibilités sont tellement nombreuses en c++...), et d'autres choses.

    Le mode debug ne me signale rien et le return Position (effectivement nécessaire), que j'ai rajouté ne m'a pas permis de résoudre le problème. Je code avec Qt sous linux. Masquerait-il des problèmes ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    Il est un fait que je maîtrise assez moyennement la syntaxe
    C'est pas un problème de syntaxe, c'est un problème de conception.
    Soit vous êtes un développeur JAVA qui n'a pas assez de recul sur la POO, soit vous suivez un cours pourri sur le C++ (ils sont légion, malheureusement).

    Le mode debug
    Le compilateur, debug ou pas, ne doit accepter que du code valide.
    Pensez à correctement le configurer pour qu'il vous aide au maximum à faire un code valide.

    ne me signale rien et le return Position (effectivement nécessaire), que j'ai rajouté
    Si vous ne nous donnez pas le vrai code, on pourra difficilement vous aider.

    que j'ai rajouté ne m'a pas permis de résoudre le problème.
    Le vrai code SVP.

    Je code avec Qt sous linux. Masquerait-il des problèmes ?
    C'est qui "il" ?
    Pour moi, celui qui masque, c'est vous en ne nous donnant pas le "vrai" code.

    Autre truc, si vous avez bien utilisé "0,5" à la place de "0.5", c'est "se prendre les pieds dans le tapis" de belle manière.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    C++ n'est pas une excuse ici, JAVA (et une bonne partie des langages à vraie dire) a aussi un mot-clé return, et un type de retour sur les fonctions, et il me semble que tout cela fonctionne de la même façon.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre confirmé
    Homme Profil pro
    dev
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Par défaut
    Citation Envoyé par bacelar Voir le message
    C'est pas un problème de syntaxe, c'est un problème de conception.
    Soit vous êtes un développeur JAVA qui n'a pas assez de recul sur la POO, soit vous suivez un cours pourri sur le C++ (ils sont légion, malheureusement).


    Le compilateur, debug ou pas, ne doit accepter que du code valide.
    Pensez à correctement le configurer pour qu'il vous aide au maximum à faire un code valide.


    Si vous ne nous donnez pas le vrai code, on pourra difficilement vous aider.


    Le vrai code SVP.


    C'est qui "il" ?
    Pour moi, celui qui masque, c'est vous en ne nous donnant pas le "vrai" code.

    Autre truc, si vous avez bien utilisé "0,5" à la place de "0.5", c'est "se prendre les pieds dans le tapis" de belle manière.
    Ne cherchons pas plus, à mon avis c'est le , au lieu du .

    Pour le code, j'ai eu un soucis à l'instant de backup et je ne l'ai pas sauvé au final ....Je vais re-coder ça proprement et je re-testerai le "." Versus "," . Cela ne peut être que ça à mon avis.
    Je confirmerai dès que possible.

    Merci !

    Sinon pour info j'ai assez peu de connaissances en prog (j'ai fait du VBA en mode bourrin et là je cherche, pour m'entraîner, à reprendre toutes les fonctions et à les développer en C++, et à passer petit à petit en POO.
    Je pense que votre serviteur est plus à incriminer que le type de cours suivi (ou les ressources consultées).
    Je dois avouer avoir du mal à comprendre l'intérêt de l'encapsulation. Et entre les anti "getters" et les "non opposés aux getters", j'avoue m'y perdre un peu.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    Je dois avouer avoir du mal à comprendre l'intérêt de l'encapsulation.
    L'intérêt majeur de l'encapsulation, c'est de ne pas avoir à tout reprendre quand on change quand on change l'implémentation de composants de plus bas-niveau d’abstraction.
    Le jour où vous voulez utiliser d'autres choses que "pos, circul, accel, et frein" pour implémenter les fonctionnalités offertes par le type "T", vous serez bien emmerdé pour ne avoir à tout retoucher, code client compris.
    Non, parce que, "accel + frein" c'est accès étrange comme approche.


    Et tant qu'on n'y est, faites gaffe aux divisions entières comme "1000/3600" qui donne 0.

  8. #8
    Membre confirmé
    Homme Profil pro
    dev
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Par défaut
    Entendu, c'est bien noté ! Je vous remercie pour l'explication.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une fonction qui ne fonctionne pas dans les deux sens
    Par patricktoulon dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 14/02/2018, 18h34
  2. [AC-2010] fonctions Droite et Gauche qui ne fonctionnent pas dans une requête
    Par samy35 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/03/2014, 10h14
  3. [Javascript] Fonction qui ne fonctionne pas sous Opera et Safari
    Par frechy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/02/2007, 10h04
  4. Fonction DISTINCT ne fonctionne pas sur une date
    Par cramouille dans le forum Access
    Réponses: 5
    Dernier message: 25/10/2006, 15h42
  5. La fonction CurrentDb() ne fonctionne pas dans une requête
    Par Sébastien Le Goyet dans le forum Access
    Réponses: 8
    Dernier message: 24/11/2005, 17h46

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