Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2010 connectés 

  FORUM HardWare.fr
  Programmation
  C

  petit exercice - améliorable ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

petit exercice - améliorable ?

n°1300753
ritzle
Posté le 07-02-2006 à 20:58:29  profilanswer
 

Bonjour à tous.
 
Je dois faire un petit exercice :
Écrire un programme qui calcule la durée d'un trajet connaissant l'heure de départ et d'arrivée. On se contente
des heures et des minutes, la durée totale ne dépassera jamais 24 heures.
 
 
voici mon code :

Code :
  1. #include <stdio.h>
  2. int main( void )
  3. {
  4. struct {
  5.  unsigned int h, m, mins;
  6. } depart, arrivee, duree;
  7. printf( "\n==Calcul du temps de trajet==\n\n" );
  8. do {
  9.  printf( "heure de depart (HH-MM) : " );
  10.  scanf( "%d-%d", &depart.h, &depart.m );
  11. } while( depart.h>23 || depart.m>59 );
  12. do {
  13.  printf( "\nheure d'arrivee (HH-MM) : " );
  14.  scanf( "%d-%d", &arrivee.h, &arrivee.m );
  15. } while( arrivee.h>23 || arrivee.m>59 );
  16. depart.mins = 60*depart.h + depart.m;
  17. arrivee.mins = 60*arrivee.h + arrivee.m;
  18. if( depart.mins <= arrivee.mins )
  19. {
  20.  //depart <= arrivee
  21.  duree.mins = arrivee.mins - depart.mins;
  22. }
  23. else
  24. {
  25.  //depart > arrivee
  26.  duree.mins = 24*60 - (depart.mins - arrivee.mins);
  27. }
  28. duree.h = duree.mins / 60;
  29. duree.m = duree.mins % 60;
  30. printf( "\n\nDuree de trajet : %d h %d mn\n", duree.h, duree.m );
  31. return 0;
  32. }


 
Ca fonctionne sans problème, mais je voudrais simplement savoir s'il y a des points à améliorer ou à optimiser.
 
Merci :)

mood
Publicité
Posté le 07-02-2006 à 20:58:29  profilanswer
 

n°1300775
skelter
Posté le 07-02-2006 à 21:50:57  profilanswer
 

tu peux déjà améliorer la saisie, c'est pénible pour un utilisateur de voir le programme partir en boucle infinie à cause d'une mauvaise saisie
 
http://mapage.noos.fr/emdel/notes.htm#saisie
 
c'est mieux d'utiliser puts ou fputs à la place de printf quand tu n'as pas de chaine formatée à afficher et penses aux fflush(stdout) entre l'affichage d'une chaine qui ne se termine pas par un '\n' et une saisie
 
http://mapage.noos.fr/emdel/notes.htm#fflush_stdout

n°1300777
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-02-2006 à 21:51:32  profilanswer
 

ritzle a écrit :


Ca fonctionne sans problème, mais je voudrais simplement savoir s'il y a des points à améliorer ou à optimiser.


 
Mes remarques préliminaires :

  • L'indentation est cohérente (quoique les do-while ne sont pas traités comme le if-else...), mais je la trouve horrible (c'est personnel, et tu n'y peux rien). De toutes façons, avec Code::Blocks, on a un indenteur intégré, alors tout va bien...
  • J'ai tapé 'a'<enter> au lieu d'un nombre et c'est parti en boucle. Problème de saisie... (scanf() mal utilisé, probablement...)
  • La structure monolithique du code ne permet pas de faire de test unitaire facilement car le code de calcul n'est pas isolé...


#include <stdio.h>
 
int main( void )
{
 
/* -ed-
   struct
   {
      unsigned int h, m, mins;
   }
   depart, arrivee, duree;
 
j'evite la factorisation des donnees.
*/
   struct heure
   {
      unsigned h;
      unsigned m;
      unsigned mins;
   }
   depart;
   struct heure arrivee;
   struct heure duree;
 
   printf( "\n==Calcul du temps de trajet==\n\n" );
 
   do
   {
      printf( "heure de depart (HH-MM) : " );
      scanf( "%d-%d", &depart.h, &depart.m );
      /* -ed- NON! */
   }
   while ( depart.h > 23 || depart.m > 59 );


Pas le temps de finir. J'essayerais demain soir...
 
En attendant, lit ça :  
 
http://mapage.noos.fr/emdel/notes.htm#saisie


Message édité par Emmanuel Delahaye le 07-02-2006 à 21:52:38

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1300860
Sve@r
Posté le 07-02-2006 à 23:22:06  profilanswer
 

ritzle a écrit :

Bonjour à tous.
 
Je dois faire un petit exercice :
Écrire un programme qui calcule la durée d'un trajet connaissant l'heure de départ et d'arrivée. On se contente
des heures et des minutes, la durée totale ne dépassera jamais 24 heures.
Ca fonctionne sans problème, mais je voudrais simplement savoir s'il y a des points à améliorer ou à optimiser.


 
Tout convertir en minutes est une méthode qui coûte du calcul. Tu peux essayer de soustraire directement les minutes et heures avec retenue
 

m=m_fin - m_deb
si (m < 0)
{
    m=m + 60
    h_fin = h_fin - 1
}
 
h=h_fin - h_deb
si (h < 0)
   h=h + 24
 
Durée = concaténation {h} heures + {m} minutes


 
Tu évites les divisions et multiplications gourmandes en ressources...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1300875
ritzle
Posté le 07-02-2006 à 23:49:57  profilanswer
 

Ah ouais quand même :whistle:  
Je vais améliorer ca en tenant compte des conseils de ton site, emmanuel
 
 

Sve@r a écrit :

Tout convertir en minutes est une méthode qui coûte du calcul. Tu peux essayer de soustraire directement les minutes et heures avec retenue
 
Tu évites les divisions et multiplications gourmandes en ressources...


Justement j'avais commencé comme ca mais je pensais que ca faisait plus de calculs...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  petit exercice - améliorable ?

 

Sujets relatifs
petit probleme javascript[ORACLE] petit problème avec les procédures..
Petit pb simple à resoudre (je pense)petit probleme d'animation
[Visual C++] Pourquoi ce que j'imprime est tout petitPetit problème avec Psexec
petit sondage : options de compilation avec gccPetit soucis page web !!
Petit jeu Image :)Petit problème avec vb6 et mysql
Plus de sujets relatifs à : petit exercice - améliorable ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR