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 :

c++ horloge 24 heures et minutes, problème


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Par défaut c++ horloge 24 heures et minutes, problème
    Bonjour,

    Je viens de débuter une école d'informatique et j'ai un devoir en programmation, voici lequel:
    Je dois faire une horloge en c++ qui tourne sur 24 heures et 60 minutes. Quand l'horloge arrive à 13 heures 59 minutes, je dois afficher " dans une minutes il sera 14 heures 0 minutes ", et si on est à 23 heures 59 minutes je devrai afficher " dans une minute il sera 0 heures 0 minutes".
    ça fait un petit moment que je suis là-dessus et je ne trouve plus d'idée (je suis un gros débutant), c'est pour ça que je poste ici afin d'obtenir un peu d'aide.

    Voilà l'énoncé:

    (:if false:)
    Variables h, m en Entier
     
    Début
      Ecrire "Entrez les heures, puis les minutes : "
      Lire h, m
      m ← m + 1
     
      Si m = 60 Alors
        m ← 0
        h ← h + 1
      FinSi
     
      Si h = 24 Alors
        h ← 0
      FinSi
     
      Ecrire "Dans une minute il sera ", h, "heure(s) ", m, "minute(s)"
    Fin
    
    Et voilà ce que j'ai fait:

    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
    #include <iostream>
     
    using namespace std;
     
    int main ()
    {
     
    	//déclaration des variables
    	int vl_h;
    	int vl_m;
     
     
    	//entrer les valeurs des variables
    	cout << " Entrez les heures, puis les minutes. " << endl;
    	cin >> vl_h ;
    	cin >> vl_m ;
     
     
    	//afficher produit nul produit positif produit negatif
    	if ( vl_m == 60 );
    	vl_m == 0 ;
    	vl_h + 1 ;
    	if ( vl_h == 24 );
    	vl_h == 0 ;
     
    	//lire les heures et minutes
    	cout << vl_h << " heures " << vl_m << " minutes" << endl;
     
    	//dans une minute il sera vl_h heure(s), vl_m minute(s)
    	cout << " dans une minute il sera " << vl_h << " heure(s) " << vl_m + 1 << " minute(s) " << endl;
     
    	return 0;
     
    }

    Et voilà ce que j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    C:\apps\devesig\essais>s_algo2_ex4.exe
     Entrez les heures, puis les minutes.
    23
    59
    23 heures 59 minutes
     dans une minute il sera 23 heure(s) 60 minute(s)

    Une petite idée?
    PS: Je tiens à dire que je ne n'ai pas encore vu les différentes bibliothèques, donc je suis censé pouvoir faire avec iostream.
    Merci d'avance à toutes les bonnes âmes.

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Je pense que que ton problème est double :
    • Il faut travailler en minute
    • Il faut utiliser l'opérateur modulo, qui prend le résultat de la division


    Un truc comme cela:
    Lire h, m
    nb_minutes = (h*60 + m)

    // Algo
    nb_minutes++;

    h = ((nb_minutes / 60) % 24);
    m = (nb_minutes % 60)


    On ne peut pas faire de spoiler
    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<cstdio>
     
     
    int main(int argc, char* argv[])
    {
        unsigned short nb_minutes = 0;
     
        for(unsigned char i_h = 0, i_m = 0; i_h < 24; ++i_h, i_m = 0) {
            for(; i_m <= 59; ++i_m) {
                nb_minutes = (i_h * 60 + i_m) + 1;
     
                printf("%02d:%02d -> %02d:%02d\n", i_h, i_m, ((nb_minutes / 60) % 24), (nb_minutes % 60));
            }
        }
     
     
        return 0;
    }

  3. #3
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Par défaut
    Ok, merci je teste ça de suite.
    COOL
    Promis je reviens poster mon résultat quand ça jouera.

    Merci pour la mise à jour de ton poste mais il y a des fonctions que je ne connais pas du tout et je suis en train de les chercher pour comprendre ce qu'elles font.
    Le modulo, mon prof nous en a parlé mais je ramais tellement que j'ai pas compris de quoi il parlait, du moins je n'ai pas retenu, et du coup je remarque que rien n'est dit dans les cours qu'il nous a fournis à part que c'est un opérateur logique, lol.
    Je regarde ça et j'essaie de comprendre avant d'aller au lit.
    Merci beaucoup, et quelle rapidité

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Simple , tu ne sais pas tu codes : le modulo c'est le résultat de la division.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        unsigned char i = 0;
     
        while(i <= 15) {
            printf("%2d = %d * 4 + 0 -> %2d / 4 = %d et %2d %% 4 = %d\n", i, (i/4), i, (i/4), i, (i%4));
            ++i;
            printf("%2d = %d * 4 + 1 -> %2d / 4 = %d et %2d %% 4 = %d\n", i, (i/4), i, (i/4), i, (i%4));
            ++i;
            printf("%2d = %d * 4 + 2 -> %2d / 4 = %d et %2d %% 4 = %d\n", i, (i/4), i, (i/4), i, (i%4));
            ++i;
            printf("%2d = %d * 4 + 3 -> %2d / 4 = %d et %2d %% 4 = %d\n", i, (i/4), i, (i/4), i, (i%4));
            ++i;
        }
    • 0 = 0 * 4 + 0 -> 0 / 4 = 0 et 0 % 4 = 0
    • 1 = 0 * 4 + 1 -> 1 / 4 = 0 et 1 % 4 = 1
    • 2 = 0 * 4 + 2 -> 2 / 4 = 0 et 2 % 4 = 2
    • 3 = 0 * 4 + 3 -> 3 / 4 = 0 et 3 % 4 = 3
    • 4 = 1 * 4 + 0 -> 4 / 4 = 1 et 4 % 4 = 0
    • 5 = 1 * 4 + 1 -> 5 / 4 = 1 et 5 % 4 = 1
    • 6 = 1 * 4 + 2 -> 6 / 4 = 1 et 6 % 4 = 2
    • 7 = 1 * 4 + 3 -> 7 / 4 = 1 et 7 % 4 = 3
    • 8 = 2 * 4 + 0 -> 8 / 4 = 2 et 8 % 4 = 0
    • 9 = 2 * 4 + 1 -> 9 / 4 = 2 et 9 % 4 = 1
    • 10 = 2 * 4 + 2 -> 10 / 4 = 2 et 10 % 4 = 2
    • 11 = 2 * 4 + 3 -> 11 / 4 = 2 et 11 % 4 = 3
    • 12 = 3 * 4 + 0 -> 12 / 4 = 3 et 12 % 4 = 0
    • 13 = 3 * 4 + 1 -> 13 / 4 = 3 et 13 % 4 = 1
    • 14 = 3 * 4 + 2 -> 14 / 4 = 3 et 14 % 4 = 2
    • 15 = 3 * 4 + 3 -> 15 / 4 = 3 et 15 % 4 = 3


    Tu vois cela fait "une roue de bicyclette" : X % A va donner une valeur entre [0, A - 1]

  5. #5
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Bonjour Foetus,

    Ta réponse est exacte mais elle ne répond pas à l'énoncé. Par ailleurs tu n'expliques pas ce qui est faut dans son programme. En l'occurence la syntaxe du C++.

    janaucarre:

    La bonne syntaxe pour "if" est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (test) {
        à faire si test reussi;
    }
    ou si l'action ne comporte qu'une instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (test) a faire si test reussi;
    (l'action est entre la parenthère fermante et le ';').

    et toi tu as ecrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (test);
    a faire si test reussi;
    IL n'y a rien entre ton test et le ';' de fin d'instruction, tu ne fais donc rien


    Ton action, située après le bloc du if, s'effectue dans tous les cas, mais elle ne fait rien non plus :
    vl_m == 0 ; n'est pas une affectation mais une comparaison dont tu ne gardes pas le résultat. (vl__m n'est pas modifié).
    De même
    vl_h + 1 ; effectue bien le calcul mais ne garde pas le résultat.

    Un conseil, tu devrais lire l'un des tutoriaux du C++ présent sur ce site.

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par fenkys Voir le message
    Ta réponse est exacte mais elle ne répond pas à l'énoncé. Par ailleurs tu n'expliques pas ce qui est faut dans son programme.
    je ne sais pas quoi dire d'autant que la faute semble être les if vides.

    Peut-être l'habitude de toujours travailler avec la plus petite unité et aussi peut-être d'éviter rapidemment de faire plusieurs if pour des cas simples

    Citation Envoyé par fenkys Voir le message
    En l'occurence la syntaxe du C++.
    Je ne vois pas ce que 2 if ont de plus de C++ qu'un modulo : Fais-tu parti de la caste C+11 du forum?

    Une syntaxe plus C++ serait une classe dans laquelle on encapsule les minutes et les heures avec constructeur et opérateur de flux de sortie << et d'auto-incrémentation ++ (voire opérateur int pour le convertir en nombre de minutes)

    Sans tenir compte des locales

  7. #7
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Citation Envoyé par foetus Voir le message

    Je ne vois pas ce que 2 if ont de plus de C++ qu'un modulo : Fais-tu parti de la caste C+11 du forum?
    Personnellement j'aurai aussi utilisé les modulo. Mais c'est un devoir. Tu ne dois pas le faire à sa place mais l'aider à comprendre ce qui ne va pas dans son code. En l’occurrence, sa syntaxe avec ses 'if' vides et ses calculs sans conservation du résultat.

    Par ailleurs, l'énoncé, tel qu'il est défini, demande une heure et affiche l'heure correspondant à la minute suivante. Il n'y a pas de boucle pour afficher toutes les heures tels que tu l'as fait dans ton programme.

Discussions similaires

  1. Problème format de cellule heures et minutes
    Par alexandra41120 dans le forum Excel
    Réponses: 2
    Dernier message: 22/06/2012, 08h37
  2. Réponses: 1
    Dernier message: 09/06/2008, 14h34
  3. Nouvelle entrée en vigueur de l'heure d'été: problème d'horloge W2000
    Par annedeblois dans le forum Windows 2000/Me/98/95
    Réponses: 4
    Dernier message: 31/10/2007, 15h43
  4. Probleme comparaison heure et minutes
    Par innosang dans le forum Bases de données
    Réponses: 5
    Dernier message: 13/05/2004, 08h40
  5. recuperer heure et minute de datetime
    Par nora_ora dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/10/2003, 12h47

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