Calcul de temps hh:mm:ss:cc

Résolu
gazelle100 Messages postés 9 Date d'inscription lundi 25 janvier 2010 Statut Membre Dernière intervention 22 mars 2010 - 25 janv. 2010 à 19:02
uaip Messages postés 1466 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;
}

7 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
27 janv. 2010 à 13:57
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
3
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
29 janv. 2010 à 00:16
Salut,

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


Cordialement, uaip.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 janv. 2010 à 00:23
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]
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
29 janv. 2010 à 00:31
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 janv. 2010 à 00:34
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]
0
gazelle100 Messages postés 9 Date d'inscription lundi 25 janvier 2010 Statut Membre Dernière intervention 22 mars 2010
29 janv. 2010 à 01:09
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
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
29 janv. 2010 à 19:17
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.
0
Rejoignez-nous