Calcul de temps hh:mm:ss:cc [Résolu]

Signaler
Messages postés
9
Date d'inscription
lundi 25 janvier 2010
Statut
Membre
Dernière intervention
22 mars 2010
-
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Bonjour,

Je dois résoudre un problème et je ne sais pas trop comment m'y prendre puisque je suis débutante en programmation.

En fait je dois trouver le temps que prends un coureur à parcourir une distance x. Puisque nous avons seulement un chrono et pas de photofinish, nous enregistrons l'heure de départ des coureurs et enregistrons l'heure d'arrivé de ceux-ci. Je dois alors faire un programme qui soustrait les deux temps et qui va jusqu'au centième de seconde.


Voici ce que j'ai commencé cependant ce n'est pas fonctionnel et avant de continuer je voulais savoir si je suis sur la bonne piste ou bien s'il y a une méthode plus simple de faire le tout. Merci de votre aide


#include <cstdio>
#include <cstdlib>
#include


using namespace std;

int main()
{


int centieme1 0, centieme2 0, resultat_temp = 0, resultatCentieme = 0, seconde1 = 0, seconde2 = 0, resultatSeconde = 0;
/*, minute1 0, minute2 0, heure1 = 0, heure2 = 0*/

//Declaration des constantes
const int CENTIEME_DHEURE = 100;
const int SECONDE = 60;




//Entrée les seconde et centiemes de départ et d'arrivée
cout << "Entrez les seconde et centieme de depart separe d'un espace :"<<endl;
cin >> seconde1<<':'<<centieme1;
cout << "Entrez les seconde et centieme d'arrive separe d'un espace : "<<endl;
cin >> seconde2<<':'<<centieme2;

/* On fait le calcul entre le temps d'arrivé et le temps de départ pour
l'instant ces seulement les secondes et centimes mais à la fin il faudra
que ce soit hh:mm:ss:cc :*/
if (centieme2 <= centieme1)
{
resultat_temp = centieme2 + CENTIEME_DHEURE;
seconde2= seconde2 - 1 ;
resultatCentieme = resultat_temp - centieme1;
cout << resultatSeconde <<resultatCentieme << endl;
}
else if (seconde2 <= seconde1)
{
resultat_temp = seconde2 + SECONDE;
seconde2 -= seconde2;
resultatSeconde = resultat_temp - seconde1;
cout << resultatSeconde <<resultatCentieme << endl;
}

else
{
resultatCentieme = centieme2 - centieme1;
resultatSeconde = seconde2 - seconde1;
cout << resultatSeconde <<resultatCentieme << endl;
}

return 0;
}

7 réponses

Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
Evite les using namespace std !!!
Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace

Sinon, ça donnerais, en un peu plus propre et rigoureux:
struct myTime
{
  myTime()
    : ms(0), sec(0), min(0), hour(0)
  {
  }

  int ms;
  int sec;
  int min;
  int hour;
};

void displayTime(const myTime& time)
{
  std::cout << time.hour << ":"
    << time.min << ":"
    << time.sec << ":"
    << time.ms
    << std::endl;
}

int timeToMs(const myTime& time)
{
  return time.ms
    + (time.sec * 1000)
    + (time.min * 1000 * 60)
    + (time.hour * 1000 * 60 * 60);
}

myTime msToMyTime(int time)
{
  myTime mytime;

  mytime.hour = time / (1000 * 60 * 60);
  time %= (1000 * 60 * 60);
  mytime.min = time / (1000 * 60);
  time %= (1000 * 60);
  mytime.sec = time / 1000;
  time %= 1000;
  mytime.ms = time;

  return mytime;
}

myTime computeDiff(const myTime& timeBegin, const myTime& timeEnd)
{
  int realTimeBegin = timeToMs(timeBegin);
  int realTimeEnd = timeToMs(timeEnd);

  std::cout << realTimeEnd << std::endl;
  std::cout << realTimeBegin << std::endl;

  if (realTimeBegin > realTimeEnd)
    return msToMyTime(realTimeBegin - realTimeEnd);

  return msToMyTime(realTimeEnd - realTimeBegin);
}

int main()
{
  myTime time1;
  myTime time2;
  myTime result;

  std::cout
    << "Entrez les seconde et centieme de depart separe d'un espace: "
    << std::endl;
  std::cin >> time1.sec >> time1.ms;
  std::cout
    << "Entrez les seconde et centieme d'arrive separe d'un espace : "
    << std::endl;
  std::cin >> time2.sec >> time2.ms;

  result = computeDiff(time1, time2);

  displayTime(time1);
  displayTime(time2);
  displayTime(result);

  return 0;
}


Voir Boost:datetime pour quelque chose de très rigoureux.
Amélioration possible: vérifier la validité de ce qui est mis (genre une minute est entre 0 et 60 secodes). Faire une classe pour cela.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]#include
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011

Salut,

Le code est en français, il n'y a donc à priori pas grand risque de confusion avec la clause namespace.


Cordialement, uaip.
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
Question de propreté, de rigueur et de bonne habitude à prendre dès le début. Quelque soit la langue du code. Tout est dans le lien.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011

Je l'ai lu justement. Et je te remercie, j'ai appris quelque chose (je me doutais que ne pas inclure un namespace entier pour 2 ou 3 fonctions était le mieux, mais je ne pensais pas qu'il y avait toutes ces "contraintes"). Cela dit, je ne comprends pas pourquoi en filières informatiques, on nous apprend à utiliser namespace std plutôt que std::cout. Enfin bon, on ne va pas refaire l'éducation nationale


Cordialement, uaip.
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
Tout dépends des écoles, et des professeurs :)

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
9
Date d'inscription
lundi 25 janvier 2010
Statut
Membre
Dernière intervention
22 mars 2010

Excellent, merci pour vos réponses. Je commençais a me diriger vers une version similaire, mais certes pas aussi rigoureuse que celle là et en investissant 10 fois plus de temps que vous! Le concept de fonction commence a être plus clair alors je suis sur la bonne voie
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011

Si c'est la notion de "fonctions" qui te pose problème... garde toujours en tête les fonctions en mathématiques.

1) Soit la variable A = 4.
2) Soit la fonction f(x) = x².
3) Soit B = f(A).
4) Donc B vaut 16.

En C++ :
1) int A = 4;
2) int f(int x) { return x*x; }
2) int B = f(A);
4) //Donc B vaut 16

Cordialement, uaip.