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 :

Avis sur initialisation de durée


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    fdghg
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : fdghg
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Par défaut Avis sur initialisation de durée
    Hello, voici le constructeur de ma classe Duree

    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 "Duree.h"
     
    using namespace std;
     
    Duree::Duree(int heures, int minutes, int secondes) : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
    {
    	if (m_secondes > 59)
    	{
    		m_minutes += m_secondes / 60;
    		m_secondes %= 60;
    	}
     
    	if (m_minutes > 59)
    	{
    		m_heures += m_minutes / 60;
    		m_minutes %= 60;
    	}
    }
    Déjà, je pense que 80% du travail est fait, car le code fait ce que je veux.
    J'aimerais juste vos avis sur ma façon de ranger les secondes dans les minutes et dans les heures. Y'a peut-être + optimisé ? merci bonne soirée

    Question 2 :
    C'est une bonne chose d'utiliser la liste d'initialisation et ensuite d'utiliser les variables ? Où si j'utilise mes variables il ne faut PAS que j'utilise la liste ?

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Tu peux surement tout faire directement dans la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Duree::Duree(int heures, int minutes, int secondes) 
      : m_heures(heures+(minutes+secondes/60)/60)
      , m_minutes((minutes+secondes/60)%60)
      , m_secondes(secondes%60)
    { }
    Quelque chose dans ce goût là.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    pour la question 2, c'est mitigé.
    Tu ne devrais pas assigner les membres, sauf les ressources à gérer (mémoire?).
    Par contre tu peux les vérifier.

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par nostrora Voir le message
    Question 2 :
    C'est une bonne chose d'utiliser la liste d'initialisation et ensuite d'utiliser les variables ? Où si j'utilise mes variables il ne faut PAS que j'utilise la liste ?
    Pour ma part je ne vois aucune contre-indication à ce que tu fais dans ton code. De toutes façons, la liste d'initialisation est toujours préférable à l'initialisation dans le constructeur (c'est un raccourci mais bon, disons que ce n'est jamais plus mauvais).

    Quant à l'optimisation, à ce niveau là, tu ne feras pas mieux que ton compilateur, donc ça ne sert à rien de faire la "chasse au cycle".

  5. #5
    Membre actif
    Homme Profil pro
    fdghg
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : fdghg
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Par défaut
    Merci pour vos réponses

    Comment s'appelle ce qu'on fait avant de developpez ?

    Par exemple moi, pour mon constructeur j'ai du d'abord réfléchir.. :

    Dans une minute, il-y-à 60 secondes ALORS je vais pouvoir divisé mes trop grosses secondes pour les ajouter aux minutes.

    Comment s’appelle cette réflexion ? J'aimerais m'amélioré dans ce domaine, savoir réfléchir vite et bien(pas forcément vite, mais au moins bien )

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par nostrora Voir le message
    Merci pour vos réponses

    Comment s'appelle ce qu'on fait avant de developpez ?

    Par exemple moi, pour mon constructeur j'ai du d'abord réfléchir.. :

    Dans une minute, il-y-à 60 secondes ALORS je vais pouvoir divisé mes trop grosses secondes pour les ajouter aux minutes.

    Comment s’appelle cette réflexion ? J'aimerais m'amélioré dans ce domaine, savoir réfléchir vite et bien(pas forcément vite, mais au moins bien )
    Il y a plusieurs choses.
    En fait, construire un programme ne se réduit pas à l'écriture du code, loin de là.

    En général, tout ce qui est avant le développement, on appelle ça la "conception" (design en anglais). Le problème c'est qu'on y met plein de choses dans ce mot. Cela va de la définition des "briques" du programme ainsi que les façons dont elles vont interagir entre elles, à la définition des algorithmes, en passant par les "use cases", l'interface graphique, etc.

    Si c'est de cela dont tu veux parler, alors je te conseille de t'intéresser de près à l'UML.

  7. #7
    Membre actif
    Homme Profil pro
    fdghg
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : fdghg
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Par défaut
    Merci, cependant je connais déjà UML.

    Moi je parle vraiment du coté intelligence pour réussir à réfléchir..
    C'est à dire comprendre que 1 minutes = 60 secondes.. et qu'il faut faire une division pour arrivé au résultat.

    Si c'est un pathfinding, réussir à réfléchir pour faire un algorithme qui ne se prend pas des arbres

    être intelligent quoi....

    Désolé c'est compliqué à expliquer ce que je demande ^^

    Je vais m'entrainer à utiliser UML et à réfléchir

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    C'est peut-être juste l'algorithmique?

  9. #9
    Membre actif
    Homme Profil pro
    fdghg
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : fdghg
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Par défaut
    Oui surement.

    J'aimerais plus facilement réussir à trouver des solutions à un ou des problèmes

  10. #10
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Oui, on se rapproche de plus en plus de la définition de "intelligence"
    Mais là, on risque de partir dans des considérations philosophiques sur "qu'est-ce que l'intelligence exactement?", "et la nature humaine dans tout ça?", "quel est l'age de la fille du capitaine?"...

    Sinon, tu vas à la préfecture, tu fais ajouter "EN" devant ton nom et peut-être qu'en te réveillant le matin tu sauras résoudre de tête des problème np-complets...

  11. #11
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Alors là, une seule solution.
    Chercher.

    Chercher sur développez.com, sur internet en général, et surtout avec un crayon.

    les algorithmes s'appliquent soit à des protocoles, soit à des problème de "choix du meilleur", soit à un tri selon un critère de "meilleur".

    Il n'y a qu'a regarder ce que propose l'en-tête standard <algorithm>: des tris d'ensembles, des explorations d'ensembles et des modifications d'ensembles.

    Par contre, il y a une recette miracle, que je profère souvent:
    Citation Envoyé par Boileau
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire viennent facilement
    En pratique, cela peut se dire aussi: "avec les bonnes structures de données, le problème est trivial"
    ou encore "si c'est trop difficile, représente le autrement"

    Ce qui te ramène à la conception. Il faut apprendre à découper les données du problème en classes, et donc pratiquer.

    Et rappele-toi, la plus sotte des questions est celle que l'on ne pose pas.

  12. #12
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Lire des livres (de bons livres, et faire l'effort de bien tout comprendre) est également une bonne chose, car ça nous forme, sans qu'on s'en rende compte, à penser de la bonne façon. Lors d'une mission où je faisait plus de la figuration qu'autre chose, j'en ai profité pour me lire toute la série des "effective c++", plus quelques autres bons livres, en quelques semaines, et en étant sûr de comprendre chaque mot. Ça m'a fait gagner 10 niveaux en compétence "développement logiciel" (et pas uniquement en c++).

    Et oui, le papier et le crayon est ton meilleur ami en ce qui concerne l'algorithmique. Après un bon IDE est pratique pour vérifier si ta solution est la bonne, mais rien de tel que le bon vieux cahier.

  13. #13
    Membre actif
    Homme Profil pro
    fdghg
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : fdghg
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Par défaut
    effective c++ c'est pas trop dur à lire ?

    Il y en a 2:

    Le vieux en français : Le C++ efficace

    ou le nouveau en anglais : Effective C++ (3ème édition)
    Je prend lequelle ?

  14. #14
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Et si tu cherches des petits exos pour t’entraîner, jette un œil au Google Code Jam.

    Les problèmes de tous les concours passés sont dispo, ya des choses très simples, et d'autres beaucoup moins

  15. #15
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Concernant les livres, je te conseilles les 3 de scott meyers:
    - effective c++ (3eme édition donc, c'est toujours mieux les éditions les plus récentes pour les ouvrages techniques)
    - more effective c++
    - effective STL

    Je te conseilles également de les lire en anglais, car bien que le forum c++ de developpez.com soit très bien, la grande majorité des informations concernant le c++ sont en anglais, il est donc toujours bon de s'y habituer.

    Quant à la complexité des ouvrages, elle ne dépend que de l'énergie que tu voudras bien y dépenser

  16. #16
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Pour les livres, il y a les critiques sur Effective C++ et Effective STL

    Mais personnellement, même si c'est de très bons livres (à lire un jour donc, tout comme Modern C++ Design ou Accelerated C++), je te conseillerais des livres plus récents avec C++11, par exemple C++ Primer, The C++ Programming Language (qui sort en mai), The C++ Standard Library et Professional C++

  17. #17
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Avant d'investir dans les Effective C++ ou les Exceptionnal C++ je te conseil de kire les GotW disponibles sur internet, ces livres sont des collection d'item ayant la même "forme" que les GotW. Tu pourras voir si ca te plaît ou non.

    Dans les livres cités par gbdivers tous ne sont pas dans la même veine :
    - MC++D est centré sur un sujet et n'est pas orienté débutant (par contre je le trouve très plaisant à lire). Si tu connais bien le langage, la raisonnement qu'il suit dans le livre constitue une très belle leçon de conception (en plus de présenter les classes de politique, qui est le sujet de fond)
    - PPUC++, Primer C++, AC++ sont plus orientés apprentissage (sans nécessairement se contenter des bases, cf table des matières).
    - C++ The programming langage n'est pas connu pour son côté pédagogique, mais plus comme bible.
    - Les EffC++ et ExC++ sont des collections d'item sur différents sujet, il n'y a pas reelement d'ordre pour les lire, et pour peu que tu connaises les bases du langage, chaque item est l'occasion d'apprendre quelque chose. Par contre si tu connais déjà bien le langage, certain item ne vont rien t apprendre.

    Si tu as une bibliothèque spécialisé à proximité de chez toi, tu devrais trouver certains de ces livres. En les feuilletant tu pourras voir ce qui te semble le plus adapté, AMA.

  18. #18
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    De manière générale, j'aurais tendance à faire la distinction entre le temps et la durée.

    Pourquoi me demanderez vous sans doute ?

    Simplement parce qu'on utilise le temps et la durée de manière tout à fait différente:

    Le temps, c'est quelque chose qu'on affiche ou qu'on transmet ( X heures Y minutes Z secondes), alors que la durée, c'est quelque chose que l'on manipule : on l'augmente de X, on la multiplie par Y, on en soustrait Z, ...

    Alors, bien sur, comme il existe une relation forte entre le temps et la durée, il faudra prévoir le moyen de convertir l'un en l'autre et réciproquement, mais le fait de bien faire la distinction entre les deux faciliterait énormément les chose.

    Je m'explique:

    On peut représenter le temps sous la forme d'une structure simple proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Time
    {
        int hour;
        int minut;
        int second;
    };
    C'est simple et efficace lorsqu'il s'agit "simplement" de l'afficher ou de transmettre l'information.

    Mais si on utilise ce genre de structure pour représenter une durée, on arrive rapidement à des algorithmes complexes pour des choses finalement toutes simples:

    Considérez, par exemple, le simple fait de soustraire une seconde avec des valeurs égales à 4 pour hour , 0 pour minut et 0 pour second.

    Ou considérez le test qu'il vous faudra effectuer pour vérifier que l'on n'a pas atteint la fin du temps imparti.

    ou encore, considérez l'algorithme à mettre en place pour multiplier une durée par 10.

    Ces algorithmes n'ont rien de compliqué en soi, mais il faut avouer que si l'on pouvait se contenter d'un "duree -= 1", d'un "if(duree == 0) ou d'un "duree *=10", ce serait quand meme plus facile, non

    Vous l'aurez sans doute remarqué dans les exemple que je viens de citer: le type idéal pour représenter la durée est, somme toutes, fort proche d'une valeur numérique entière

    Nous pourrions donc nous contenter d'un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // long long int pour avoir la plage de valeur maximale ;)
    typedef long long int duration; //C++03
    using duration = long long int; //C++11
    et de la structure présentée plus haut pour représenter le temps.

    Il nous faudrait juste prévoir deux fonctions de conversion supplémentaires: de durée en temps et de temps en durée.

    Elles seraient particulièrement simple au demeurant car elles pourraient ressembler à
    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
     
    duration toDuration(Time const & time)
    {
        duration temp(time.hour *3600 + time.minut*60+time.second);
        return temp;
    }
    Time toTime(Duration duration)
    {
         Time temp;
         temp.second = duration % 60;
         duration = duration / 60;
         temp.minut = duration % 60;
         duration = duration / 60;
         temp.hour = duration;
         return temp;
    }
    A partir de là, le reste devient enfantin:
    • Vous convertissez systématiquement tous les temps en durée s'il faut les manipuler
    • Vous ne manipulez systématiquement des durées et non des temps
    • vous convertissez vos durées en temps lorsque vous devez les représenter d'une manière ou d'une autre (à moins que la représentation sous forme de durée ne vous agrée)


    My 2 cents
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  2. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48
  3. [Débat] Votre avis sur la section "Dev Web"
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 31
    Dernier message: 03/03/2004, 20h55
  4. Votre avis sur 1 livre SVP
    Par cab dans le forum DirectX
    Réponses: 4
    Dernier message: 17/09/2003, 10h39
  5. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50

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