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 :

Class Duree hh:mn


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut Class Duree hh:mn
    Bonsoir.
    J'ai honte de poster ça (car mon niveau C++ est plutôt C--) mais impossible, même après lecture des cours, de trouver ce qui pèche dans ce qui suit.

    Sous avec Devc++ Windows.
    J'imagine que les pros du C vont bien rire, mais sauront m'éviter des heures de recherches de débutant ...


    Programmes duree :


    duree.h
    -------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef _DUREE
    #define _DUREE
    #include <iostream>
    class Duree
    {	friend class DateHeure;
    		private:
    		long jour; int heure, minute;
     
    		public:
    		Duree();
    		Duree(long,int,int);
    		Duree(long);//Constructeur de conversion en minutes en Durée
    		long dureeEnMinute();//Conversion d'une Duree en minutes
    }
    duree.cpp
    ---------
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include "duree.h"
    #include <iostream>
    using namespace std;
     
    Duree::Duree()
    { jour=0 ; heure=0 ; minute=0;}
     
    Duree::Duree(long a, int b, int c)
    { jour=a ; heure=b; minute=c; }
     
    Duree::Duree(long a)
    {
    	minute=a%60;
    	a-=minutes;
    	heure=(a/60)%24;
    	jour=((a/60)-heure)/24;
    }
     
    long Duree::dureeEnMinutes()
    {
    	long somme;
    	somme = minute + (60*heure) + (24*60*jour);
    	return somme;
    }
     
    Duree Duree::operator+(Duree d)
    {
    		return Duree(dureeEnMinute()+d.dureeEnMinute());
    }
     
    Duree Duree::operator-(Duree d)
    {
    	long a,b;
    	a=dureeEnMinute();
    	b=d.dureeEnMinute();
    	if (a>b) {return Duree(a-b)};
    	else {return Duree(b-a)};
    }
     
    Duree::operator long()
    {
    	return dureeEnMinutes();
    }
     
    istream & operator >> (istream & entree, Duree & d)
    {
    	entree>>d.jour>>d.heure>>d.minute;
    	return entree;
    }
     
    ostream & operator  << (ostream & sortie, Duree d)
    {
    	sortie<<"Jour: " << d.jour<<" heure: "<<d.heure<<" Minute: "<<d.minute;
    	return sortie;
    }

  2. #2
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Il manque un point virgule à la fin la déclaration de la classe duree
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Duree
    {
    //...
    };
    Le reste m'a l'air d'être surtout des erreurs de frappe...

  3. #3
    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,

    Une petite question au passage...

    Pourquoi ne fais tu pas l'inverse, à savoir, maintenir la durée sous la forme la plus petite qui puisse t'intéresser: la minute

    En effet, lorsque tu veux effectuer des opérations mathématiques entre deux durées, tu dois:
    1. calculer le résultat (en minutes) de la première
    2. calculer le résultat (en minutes) de la seconde
    3. faire l'opération qui t'intéresse
    4. convertir tout cela en jour, heure, minutes (pour que ta classe telle qu'elle se présente pour l'instant reste cohérente).

    En maintenant, au niveau de ta classe, la durée sous la forme d'un nombre unique représentant les minutes, il devient facile de faire les différentes opérations mathématique: YAKA enregistrer le résultat de l'opération, et basta...

    Si tu trouve intéressant de pouvoir récupérer le nombre d'heures entières ou de jours entiers que représente cette durée, les deux fonctions membres qu'il te faut créer sont relativement simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int Duree::nombreJour() const{return val/(24*60);}
    int Duree::nombreHeure() const{return val/60;}
    Et si, enfin, tu veux récupérer une structure proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct DureeLisible
    {
        int jours;
        int heures;
        int minutes;
    };
    parce que cela peut s'avérer intéressant "par ailleurs", il t'est toujour possible de créer un opérateur de conversion, voir d'utiliser le constructeur de DureeLisible qui prendra... un nombre de minutes (potentiellement supérieur à 60) qui agira comme tel

    Mais ce qu'il faut comprendre, c'est que les deux structures / classes ont, chacune, leur intérêt particulier:

    La première (telle que je l'ai présentée) n'a comme seule utilité d'effectuer des calculs, l'autre n'a comme seule utilité de permettre de les représenter de manière "humainement lisible"... à toi de choisir, quand tu veux travailler avec des durées, celle qui correspond à tes besoins
    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

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Par défaut
    Après faut voir les contraintes que tu as mais sinon y'a déjà tout ça dans boost date_time (boost::posix_time::time_duration pour les durées, boost::posix_time::ptime pour les dates, ... avec tout ce qu'il faut pour l'affichage et la lecture personnalisées en fonction des formats)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Bonjouir,
    Il manque un point virgule à la fin la déclaration de la classe duree
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Duree
    {
    //...
    };
    Le reste m'a l'air d'être surtout des erreurs de frappe...
    Je n'avais même pas vu, merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut duree en jours/heures/minutes
    Bonsoir.
    Ta solution est effectivement plus censée.
    C'est juste que je m'attache au texte de petits exercices qui m'aident à progresser en C++
    La solution d'utiliser la forme la plus petite simplifie, est donc plus maligne, mais s'écarte de l'exercice tel qu'il est écrit.
    Je retiens néanmoins ton idée pour écrire une deuxième version qui me convient mieux

    Merci.

    Citation Envoyé par koala01 Voir le message
    Salut,

    Une petite question au passage...

    Pourquoi ne fais tu pas l'inverse, à savoir, maintenir la durée sous la forme la plus petite qui puisse t'intéresser: la minute

    En effet, lorsque tu veux effectuer des opérations mathématiques entre deux durées, tu dois:
    1. calculer le résultat (en minutes) de la première
    2. calculer le résultat (en minutes) de la seconde
    3. faire l'opération qui t'intéresse
    4. convertir tout cela en jour, heure, minutes (pour que ta classe telle qu'elle se présente pour l'instant reste cohérente).

    En maintenant, au niveau de ta classe, la durée sous la forme d'un nombre unique représentant les minutes, il devient facile de faire les différentes opérations mathématique: YAKA enregistrer le résultat de l'opération, et basta...

    Si tu trouve intéressant de pouvoir récupérer le nombre d'heures entières ou de jours entiers que représente cette durée, les deux fonctions membres qu'il te faut créer sont relativement simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int Duree::nombreJour() const{return val/(24*60);}
    int Duree::nombreHeure() const{return val/64;}
    Et si, enfin, tu veux récupérer une structure proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct DureeLisible
    {
        int jours;
        int heures;
        int minutes;
    };
    parce que cela peut s'avérer intéressant "par ailleurs", il t'est toujour possible de créer un opérateur de conversion, voir d'utiliser le constructeur de DureeLisible qui prendra... un nombre de minutes (potentiellement supérieur à 60) qui agira comme tel

    Mais ce qu'il faut comprendre, c'est que les deux structures / classes ont, chacune, leur intérêt particulier:

    La première (telle que je l'ai présentée) n'a comme seule utilité d'effectuer des calculs, l'autre n'a comme seule utilité de permettre de les représenter de manière "humainement lisible"... à toi de choisir, quand tu veux travailler avec des durées, celle qui correspond à tes besoins

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut
    Bonsoir Cedric.
    Le but de l'exercice n'est pas d'utiliser ce qui existe déjà, mieux écrit que je ne saurais le faire, mais bien de réussir, avec des éléments réduits, à réécrire moi-même des fonctions simples pour apprendre les bases du langage.
    C'est vrai que je n'avais pas précisé. Je m'en excuse.

    Merci en tout cas de vos réponses à tous
    Je n'ai pas encore nettoyé toutes les erreurs de mon source, mais vos aides ont aidées à en corriger plusieurs.


    Citation Envoyé par CedricMocquillon Voir le message
    Après faut voir les contraintes que tu as mais sinon y'a déjà tout ça dans boost date_time (boost::posix_time::time_duration pour les durées, boost::posix_time::ptime pour les dates, ... avec tout ce qu'il faut pour l'affichage et la lecture personnalisées en fonction des formats)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut
    Je vais peut-être transgresser un peu l'exercice, et retenir la suggestion de Koala qui me plait bien ... la solution, ... même si j'aime assez l'animal aussi

    Bien que j'indique la rubrique comme résolue, si l'un ou l'autre à une solution de mes sources "nettoyées" des erreurs, je suis preneur. Inscris en cours soir en plus de mon taff normal, je dispose de peu de temps pour faire du codage comme je le souhaiterais.

    Merci de vos conseils.

  9. #9
    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
    [Tout à fait HS et autodérision]HiHi... personne n'a remarqué que, pour moi, l'heure d'un jour ne dure pas aussi longtemps que l'heure "simple" qui fait... 64 minutes...

    Je corrige cette erreur...
    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

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/10/2012, 16h34
  2. MODELE DE COX PHREG classer les duree en classe
    Par foutah123 dans le forum SAS STAT
    Réponses: 2
    Dernier message: 05/05/2010, 10h26
  3. classe temporaire : étendre la durée de vie
    Par screetch dans le forum C++
    Réponses: 9
    Dernier message: 05/12/2008, 10h31
  4. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  5. [AS2] durée de vie d'une classe (extends movieclip)
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 23/07/2005, 13h33

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