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 :

Convertir un entier en unité de temps ?


Sujet :

C

  1. #1
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Convertir un entier en unité de temps ?
    Bonsoir,
    je veux créer une fonction capable de convertir un entier positif en une valeur de type temps . temps est le nom d'une structure contenant 3 champs entiers positifs: heures , minutes , secondes .

    j'ai nommé dans mon programme cette fonction comme "conver_valeur_time " . par exemple, lorsque je lui passe comme paramétre 135 , elle doit faire : temps.heures=0 temps.minutes=2 temps.secondes=15 ( 00:2:15).

    Alors voici ma fonction que je l'ai testé plusieurs fois sans découvrir où est l'erreur ,SVP corigez - moi cette fonction .

    Remarque : j'ai pas des erreurs lors de la compilation mais c'est lors de l'execution !

    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
    temps conver_valeur_time(int v)  // v est l'entier qu'on désire le convertir
    {
        temps t ;  
        t.secondes = 0 ;
        t.minutes = 0 ;
        t.heures = 0 ;
     
        if( v  < 60)
        {
            t.secondes = v ;
            t.minutes = 0 ;
            t.heures = 0 ;
        }
        else
        {
            do
            {
                t.secondes = v - 60 ;
                t.minutes += 1 ;
                while (t.minutes >= 60 )
                {
                    t.minutes -= 60 ;
                    t.heures += 1 ;
                }
            }while(t.secondes >= 60);
     
        }
     
        return t ;
    }
    Et Merci

    Sisiniya

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hia,

    Il vaudrait mieux utiliser des divisions et des modulos à la place des boucles de soustractions.

  3. #3
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Salut,

    voilà ce que ça donne avec les modulos:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    temps conver_valeur_time(int v)  // v est l'entier qu'on désire le convertir
    {
        temps t ;  
        t.secondes = v % 60 ;
        t.minutes = (v % 3600) / 60 ;
        t.heures = v / 3600 ;
     
        return t ;
    }

  4. #4
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Citation Envoyé par sisiniya Voir le message
    SVP corigez - moi cette fonction .
    Je ne la corrigerai pas (ce serait trop facile), mais vais te donner des indices.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            do
            {
                t.secondes = v - 60 ;
                t.minutes += 1 ;
                while (t.minutes >= 60 )
                {
                    t.minutes -= 60 ;
                    t.heures += 1 ;
                }
            }while(t.secondes >= 60);
    En fait, ton code ne marche pas (dans le cas > 2 min),car ta boucle do/while s'arrête si t.secondes est < 60, or il vaut toujours v - 60 ! Bizarre, parce que pour les minutes ça a l'air correct.

    Rq: la solution donnée par coyotte507 est plus simple et beaucoup plus rapide , mais si tu arrive à corriger ton erreur (quitte à (com)prendre le code de coyotte507) c'est déjà ça !

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par sisiniya Voir le message
    je veux créer une fonction capable de convertir un entier positif en une valeur de type temps . temps est le nom d'une structure contenant 3 champs entiers positifs: heures , minutes , secondes .

    j'ai nommé dans mon programme cette fonction comme "conver_valeur_time " . par exemple, lorsque je lui passe comme paramétre 135 , elle doit faire : temps.heures=0 temps.minutes=2 temps.secondes=15 ( 00:2:15).
    Il suffisait de dire "convertir un entier représentant un nombre de secondes en 3 entiers représentants heures, minutes et secondes".

  6. #6
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour,
    Je vous remercie droggo pour l'idée, aussi coyotte507 pour le code et D[r]eadLock pour l'indice.

    *Pour coyotte507 :je l'ai testé et tout est bien mais je n'ai compris pourquoi 3600 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    t.minutes = (v % 3600) / 60 ;
    t.heures = v / 3600 ;
    * Pour D[r]eadLock : grâce à votre indice j'ai pu corrigé mon erreur, c'est vrai que la valeur de t.secondes reste stable est vaut v-60 dans chaque itération de la boucle While. Voilà mon code corrigé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    t.secondes = v ; 
            do
             {
                        t.secondes -= 60 ;
                        t.minutes += 1 ;
                        while (t.minutes >= 60 )
                         {
                                     t.minutes -= 60 ;
                                     t.heures += 1 ;
                         }
             }while(t.secondes >= 60);

    *Pour Emmanuel Delahaye : j'ai voulu bien détaillé mon problème , mais comme même merci pour Votre remarque

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Par défaut
    Citation Envoyé par sisiniya Voir le message
    je l'ai testé et tout est bien mais je n'ai compris pourquoi 3600 ?
    1h = 3600 secondes, tu as ton temps en seconde a la base, donc en le divisant par 3600 tu sais combien tu as d'heures

  8. #8
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    bonsoir,
    Merci Elboras ,
    et pour cette ligne SVP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.minutes = (v % 3600) / 60 ;
    Sisiniya

  9. #9
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    v % 3600, ça veut dire qu'on enlève le plus de fois possible 3600 de v.

    Par exemple 3752 % 3600 = 152.

    Donc une fois qu'on a enlevé toutes les heures, il nous reste un temps en secondes qu'on divise par 60 pour avoir les minutes.

    On aurait aussi pu faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    temps conver_valeur_time(int v)  // v est l'entier qu'on désire le convertir
    {
        temps t ;
        t.heures = v / 3600 ;  
        t.minutes = (v - t.heures * 3600) / 60 ;    
        t.secondes = ( v - t.heures * 3600 - t.minutes * 60);
     
        return t ;
    }

  10. #10
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonsoir,
    Je vous remercie pour les explications .

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

Discussions similaires

  1. Convertir un entier en caractère avec des 0 devant
    Par Oluha dans le forum Développement
    Réponses: 12
    Dernier message: 28/08/2017, 13h37
  2. Réponses: 9
    Dernier message: 14/12/2005, 21h05
  3. Convertir un entier en caractère
    Par b_steph_2 dans le forum C++
    Réponses: 1
    Dernier message: 01/12/2005, 11h21
  4. Convertir un entier long en string
    Par aroueche dans le forum C
    Réponses: 5
    Dernier message: 12/07/2004, 13h48
  5. [Algo] Convertir un entier en HH:min:ss
    Par Thomas Lebrun dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 26/02/2004, 23h57

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