Problème incompréhensible

JosueClement Messages postés 30 Date d'inscription lundi 4 mars 2002 Statut Membre Dernière intervention 20 décembre 2007 - 25 mars 2002 à 11:09
cs_golum Messages postés 16 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 23 juillet 2002 - 18 avril 2002 à 20:53
Regardez plutot...
Ce programme est une sorte d'horloge!
Il n'y a aucune erreur de compilation, mais les heures n'augmentent jamais!!

A la ligne 54, j'ai marqué un commentaire : !!ERREUR ICI!! c'est la que se trouve mon erreur.

Quelqu'un pourrait me dire ce que je fais de faux pour que les heures ne bougent pas..

Compilé avec DEV C++ 4

#include
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>

class Temps
{
public:
void AjusterTemps(int , int , int);
int AjusterHeure(int);
int AjusterMinute(int);
int AjusterSeconde(int);
void AfficherTemps();
private:
int heure;
int minute;
int seconde;
};

int Temps::AjusterHeure(int h)
{
return (h >= 0 && h < 24 ? h : 0); //Ajuster l'heure si plus grand que 0
} //et si plus petit que 24

int Temps::AjusterMinute(int m)
{
return (m >= 0 && m < 60 ? m : 0); //Ajuster les minutes si plus grand que 0
} //et si plus petit que 60

int Temps::AjusterSeconde(int s)
{
return (s >= 0 && s < 60 ? s : 0); //Ajuster les sec si plus grand que 0
} //et si plus petit que 60

void Temps::AjusterTemps(int h , int m , int s)
{
heure = Temps::AjusterHeure(h); //Ajustement de l'heure
minute = Temps::AjusterMinute(m); //Ajustement des minutes
seconde = Temps::AjusterSeconde(s); //Ajustement des secondes
}

void Temps::AfficherTemps()
{
int kb = 70;

do
{
if (seconde == 60)
Temps::AjusterTemps(heure,minute+1,0);

if (minute == 60)
Temps::AjusterTemps(heure+1,0,seconde); //!!ERREUR ICI!!

if (heure == 24)
{
Temps::AjusterTemps(0,0,0);
}

cout <<(heure < 10 ? "0" : "") <<heure <<" : ";
cout <<(minute < 10 ? "0" : "") <<minute <<" : ";
cout <<(seconde < 10 ? "0" : "") <<seconde;

Sleep(1000);
system("cls");
seconde++;
}while(seconde != -1);
}

void main()
{
Temps t;
t.AjusterTemps(2,59,50);
t.AfficherTemps();
}

4 réponses

cs_Toobad Messages postés 14 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 14 novembre 2002
25 mars 2002 à 18:12
Un conseil l'ami passe à VC++6, ça trouve toutes les erreurs alors que DEV C++4 il en oublie la moitié.
0
jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
25 mars 2002 à 20:12
Ha bon. Peut etre que ton vc++6 est meilleur que le mien car chez moi son code marche comme chez lui : les heures ne s'incremente pas.
AjusterTemps recoit toujours heure et pas heure+1.
Pourquoi aucune idee.
Mon conseil : simplifie ton code, il y a trop de fonctions.
0
monk31 Messages postés 5 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 13 juin 2003
26 mars 2002 à 11:53
je pense avoir trouvé ton erreur:
dans void Temps::AfficherTemps() :
quand tu fais ton premier test (seconde==60), tout se passe bien, tu incrémentes le nombre de minutes.
Seulement quand tu arrives à 60 secondes et 59 minutes, tu appeles d'abord Temps::AjusterTemps(heure,59+1,0)
(toujours par rapport à ton premier test), soit Temps::AjusterTemps(heure,60,0).

hors dans Temps::AjusterTemps(int h,int m,int s), tu va actualiser "minute" avec AjusterMinute(m),
mais m=60, donc tu va repositionner "minute" à 0.
tu ne passeras donc jamais ton second test (minute==60) car "minute" ne sera jamais égal à 60.

une solution serait de corriger ta fonction void Temps::AjusterMinute(int m),
en retournant le test suivant :
(m >= 0 && m <= 60 ? m : 0)
la différence provient du fait que tu testes si m<=60 et non plus m<60.

Je pense que c'est ça, mais je peux me tromper.
a+.
0
cs_golum Messages postés 16 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 23 juillet 2002
18 avril 2002 à 20:53
moi je comprend, je crois le probleme c juste un probleme d'algo pourtant pour l'expliquer c plus dure vu le nombre de procedures on s'y pert
je propose ca ca marchera surement pas mais ca peut aider a trouver la faille

void Temps::AjusterTemps(int h , int m , int s)
{

heure += Temps::AjusterMinute(m); //Ajustement des minutes
minute += Temps::AjusterSeconde(s); //Ajustement des secondes
}

PS j'suis d'accord pour dire que le compilo de DevC++ pue
0
Rejoignez-nous