J'ai écrit le programme suivant dans le but de comparer deux durées grace à des opérandes == (chapitre 4, partie 2).
Cependant, cela me renvoie apparement un false lors de l'éxecution du programme.
Voici mon code:
Main.cpp
#include <iostream>
#include "Hmin.h"
using std::cout;
using std::endl;
int main()
{
cout<<"test"<<endl;
Hmin duree1(1,2,3),duree2(1,2,3);//Initialisation objets
if(duree1==duree2)
{
cout<<"Egales"<<endl;
}
else
{cout<<"nope"<<endl;}
cout<<"test"<<endl;
return 0;
}
Hmin.h
class Hmin
{
public:
Hmin(int H=0,int minu=0, int sec=0);
bool estEgal(Hmin const& b) const;
private:
int m_heures;
int m_minutes;
int m_secondes;
};
bool operator==(Hmin const& a,Hmin const& b);
Hmin.cpp
#include "Hmin.h"
Hmin::Hmin(int H,int minu, int sec)/*:m_heures(H),m_minutes(minu),m_secondes(sec)*/
{
/* int q(0);
int r(0);
if (sec<60)
{
while(sec-60*(q+1))
{
q++;
}
r=sec-60*q;//Variable stockée
m_secondes=r;
}
else
{
m_secondes=sec;
}
int qq(0);
int rr(0);
if (minu<60)
{
while(sec-60*(qq+1))
{
qq++;
}
rr=sec-60*qq;//Variable stockée
m_minutes=rr+q;
}
else
{
m_minutes=minu;
}
m_heures=H+qq;*/
}
bool Hmin::estEgal(Hmin const& b) const
{
return (m_heures==b.m_heures&&m_minutes==b.m_minutes&&m_secondes==b.m_secondes);//On utilise m_heures dde l'objet a
}
bool operator==(Hmin const& a,Hmin const& b)
{
a.estEgal(b);
}
Les notes du constructeur concernent une comparaison des deux objets, sans rapport avec le sujet.
Je voudrais pouvoir utiliser le nombre de secondes restante pour mettre les secondes restantes dans la variable secondes, et je ne vois pas très bien comment ton opération permet de préserver les secondes restantes et les minutes.
Je voudrais pouvoir utiliser le nombre de secondes restante pour mettre les secondes restantes dans la variable secondes, et je ne vois pas très bien comment ton opération permet de préserver les secondes restantes et les minutes.
C'est le role de l'opérateur %. C'est ce que l'on appelle le modulo, à savoir le reste de la division (entière) entre deux entiers.
si tu as une valeur (prenons la plus facile à évaluer) de 136. Tu as appris à l'école primaire : 136 / 60 = 2 reste 16. C'est exactement ce que tu vas faire avec les opérateurs / et %:
L'opérateur te donnera une valeur entière parce qu'elle s'applique sur deux entiers, ou, pour être précis, le résultat de la division en "oubliant" purement et simplement la partie décimale. Ainsi, si tu écrit un code poche de int minutes = 136 /60;
minutes va prendre la valeur 2, qui correspond effectivement au nombre de minutes que l'on retrouve dans 136 secondes.
Ensuite, l'opérateur % va calculer le reste de la division. Ainsi, lorsque tu écriras la ligne seconde = seconde%2; (qui pourrait être simplifié sous la forme de seconde %=seconde; ), seconde prendra la valeur de 16.
Et c'est exactement ce que tu voulais
- Edité par koala01 21 septembre 2017 à 15:08:06
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
non, parce que seconde %= 2 ne te donnera une valeur égale qu'à 0 ou à 1 et que secondes %= ne te donnera qu'une valeur égale entre 0 et le nombre de minutes que tu as calculé -1 . Quel que soit le nombre de minutes que tu as obtenu.
Si tu veux avoir le nombre de seconde qui n'entre dans aucune minute, le nombre de minutes qu'il y a dans une heure ou le nombre d'heure qu'il y a dans une journée, tu dois prendre la valeur constante de ce nombre : il y a 60 secondes dans une minute, 60 minutes dans une heure et 24 heures dans une journée
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C