Conversion en heures décimales en C |
Bienvenue invité ( Connexion | Inscription )
Conversion en heures décimales en C |
10 Jul 2015, 17:33
Message
#1
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 336 Inscrit : 25 Sep 2004 Lieu : Occitanie Membre no 24 178 |
Bonjour
Je veux convertir des heures/minutes et secondes en heures décimales/ Voici mon code. Je sais que le puristes trouveront mon code très très perfectible, mais bon pour le moment je n'ai réussi que ça. Ce que je ne comprends pas c'est la façon dont les conversions sont faites, car le résultat escompté est différent de celui attendu (voir en fin de code). Après extraction, j'obtiens bien : heureEntiere = 12 calculMn = 18 calculSc= 45 Alors d'où vient le problème ? Merci. Code #include <stdio.h> /* Fonction conversion en degrés décimaux */ float conversiondecimal(float heureDecimale) { float heureEntiere, scAvantExtraction; float calculMn, calculSc; heureEntiere = (int)(heureDecimale); printf("heure entière : %.d\n", (int)(heureDecimale)); calculMn = (heureDecimale - heureEntiere) * 100; printf("MN : %d\n", (int)(calculMn)); scAvantExtraction = (heureDecimale - heureEntiere) * 100; calculSc = (scAvantExtraction - (int)(calculMn)) * 100; printf("Sec : %.0f\n", calculSc); heureDecimale = heureEntiere + calculMn / 60 + calculSc / 3600; return heureDecimale; } int main(int argc, const char * argv[]) { float heure, heureDec; heure = 12.1845; heureDec = conversiondecimal(heure); printf("heure décimale %.5f :\n", heureDec); printf("Le résultat obtenu devrait être égale à : 12.3125\n"); Mais le résultat affiché est : 12.3200 } PS : j'ai regardé dans la bibliothèque <time.h>, je n'ai pas trouvé de fonction permettant de le faire. Ce message a été modifié par PapouMAC - 10 Jul 2015, 22:28. -------------------- MAC PRO 2009 (MAC OS 10.14.6) 2 x 3,33 Ghz 6-CoreIntel Xeon(5.1), , 64 Go.Carte graphique NVIDIA GeForce GTX 680.
Mac Studio M2 Max, 32Go, 1To |
|
|
10 Jul 2015, 18:22
Message
#2
|
|
Nouveau Membre Groupe : Membres Messages : 9 Inscrit : 24 Jun 2015 Membre no 195 690 |
Bonsoir,
Si j'ai bien compris, la conversion des heures, minutes et secondes en heures décimales signifie : 1 heure représente 1,00. 30 minutes représentent 0,50. 15 minutes représentent 0,25. 1 heure représente 3600 secondes. et réciproquement 3600 secondes représentent alors 1,0. À mon avis, il faut déjà transformer les heures et les minutes en seconde. Par exemple, 19:11:50, nous obtenons 19*3600 + 11 *60 + 50 = 69110 secondes On divise le résultat par 3600 pour obtenir 19,197 Il s'agit de la règle: Le produit des extrèmes est égal au produit des moyens Si l'on prend le cas simple de 19:30:00, on obtient 70200 que l'on divise par 3600, on obtient 19,5 En ce qui concerne le code, je pense qu'il n'y a aucun problème. Bonne soirée. Eric. |
|
|
10 Jul 2015, 18:40
Message
#3
|
|
Terminaltor Moderating Machine Groupe : Admin Messages : 24 452 Inscrit : 25 Oct 2002 Lieu : Jeumont (59) Membre no 4 319 |
calculMn ne vaut pas 18, mais 18.45 ; il manque un cast en int éventuellement.
-------------------- I think therefore I Mac
|
|
|
10 Jul 2015, 19:39
Message
#4
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 336 Inscrit : 25 Sep 2004 Lieu : Occitanie Membre no 24 178 |
calculMn ne vaut pas 18, mais 18.45 ; il manque un cast en int éventuellement. Bien vu schlum, il manquait bien un cast. Il ne me reste plus qu'à faire l'inverse (Hdécimale -> HMS). Merci aussi à xbuilder, c'est une piste à suivre, je vais essayer, c'est peut-être plus simple. Encore Merci. Ce message a été modifié par PapouMAC - 10 Jul 2015, 19:41. -------------------- MAC PRO 2009 (MAC OS 10.14.6) 2 x 3,33 Ghz 6-CoreIntel Xeon(5.1), , 64 Go.Carte graphique NVIDIA GeForce GTX 680.
Mac Studio M2 Max, 32Go, 1To |
|
|
Nous sommes le : 5th June 2024 - 05:15 |