IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Conversion en heures décimales en C
Options
PapouMAC
posté 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
Go to the top of the page
 
+Quote Post
xbuilder
posté 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.
Go to the top of the page
 
+Quote Post
schlum
posté 10 Jul 2015, 18:40
Message #3


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
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          
Go to the top of the page
 
+Quote Post
PapouMAC
posté 10 Jul 2015, 19:39
Message #4


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 336
Inscrit : 25 Sep 2004
Lieu : Occitanie
Membre no 24 178



Citation (schlum @ 10 Jul 2015, 19:40) *
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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th April 2024 - 00:58