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

Messages postés
9
Date d'inscription
lundi 25 janvier 2010
Statut
Membre
Dernière intervention
22 mars 2010
- - Dernière réponse : uaip
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
- 29 janv. 2010 à 19:17
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;
}
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
0
Merci
Salut,

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


Cordialement, uaip.
Commenter la réponse de uaip
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
0
Merci
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]
Commenter la réponse de cptpingu
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
0
Merci
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.
Commenter la réponse de uaip
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
0
Merci
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]
Commenter la réponse de cptpingu
Messages postés
9
Date d'inscription
lundi 25 janvier 2010
Statut
Membre
Dernière intervention
22 mars 2010
0
Merci
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
Commenter la réponse de gazelle100
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
0
Merci
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.
Commenter la réponse de uaip