Partage
  • Partager sur Facebook
  • Partager sur Twitter

Chronometre multi-usage

presque finit

    8 décembre 2005 à 22:26:34

    Bonjour.

    Voila, j'ai eu l'idée ce matin en cours de faire ce programme alors quand je suis rentré a 19h, je l'ai fait :)

    En fait, c'est un programme qui fait chronometre, compte a rebours et transformation de minutes a seconde, heures a minutes etc ...

    Donc mon code est presque final.
    J'ai lu que les GOTO etaient deconseillé ... Malheureusement j'en ai pas mal dans mon code. J'aimerai donc savoir si cela est prejudiciable sur mon code.
    Aussi, j'aimerai avoir une astuce pour que je puisse arreter le chronométre s'arrete en appuyant sur espace.

    Voici mon code, il va surement vous paraitre long et torchon.
    Bon courage.


    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
      long choix1 = 0, choix2 = 0, valeur = 0, valeur2 = 0, resultat = 0; //declare ttes les variables
      start :
      printf("Systeme de chronometre, compte a rebours et equivalence de temps...\n\n");
      printf("[1] pour le chronometre\n");
      printf("[2] pour le compte a rebours\n");
      printf("[3] pour les equivalences de temps\n")//annonces des 3choix
      scanf("%ld", &choix1); //variable du choix d'option
     
      if (choix1 == 1) //choix du chronometre
      {
      system("cls");
      printf("Chronometre:\n\n");
     
      printf("Voulez vous que le systeme s'effectue en :\n");
      printf("[1] seconde\n");
      printf("[2] minute\n"); //choix de l'unité de temps
      scanf("%ld", &choix2);
     
      printf("\n\nIndiquez la valeur initiale :\n"); //indiquer la valeur de depart
      scanf("%ld", &valeur);
     
                   if (choix2 == 1) //si unité seconde choisit
                   {
                   printf("\n\nappuyez sur une touche pour lancer le chronometre.\n");
                   getch();
                   repere1 :
                   printf("%ld secondes\n", valeur);
                   valeur++;
                   sleep(1000); //le prog attend une seconde
                   goto repere1; //renvoie au repere1 pour ajouter une seconde
                   }
                   
                   if (choix2 == 2) //si unité minute choisit
                   {
                   printf("\n\nappuyez sur une touche pour lancer le chronometre.\n");
                   getch();
                   repere2 :
                   printf("%ld minutes\n", valeur);
                   valeur++;
                   sleep(60000); //idem pour 60secondes
                   goto repere2;
                   }
    }

      if (choix1 == 2) //si compte a rebours choisit
      {
      system("cls");
      printf("Compte a rebours:\n\n");
     
      printf("Voulez vous que le systeme s'effectue en :\n");
      printf("[1] seconde\n");
      printf("[2] minute\n"); //choix de l'unité de temps
      scanf("%ld", &choix2);
     
      printf("\n\nIndiquez la valeur initiale :\n"); //indique la valeur de depart
      scanf("%ld", &valeur);
     
                   if (choix2 == 1) //si seconde choisit
                   {
                   printf("\n\nappuyez sur une touche pour lancer le compte a rebours.\n");
                   getch();
                   repere3 :
                   printf("%ld secondes\n", valeur);
                   valeur--; //pareil que precedement mais avec un -
                   sleep(1000);
                               if (valeur == 0) //arret de compte a rebours a t=0
                               {
                               printf("\a\n\nFIN DU COMPTE A REBOURS\a");
                               printf("\nAppuyez sur une touche...");
                               getch();
                               system("cls");
                               goto start; //retours au menu
                               }
                   goto repere3; //si valeur != 0, alors le prog continue
                   }
                   
                   if (choix2 == 2) //si minute choisit
                   {
                   printf("\n\nappuyez sur une touche pour lancer le compte a rebours.\n");
                   getch();
                   repere4 :
                   printf("%ld minutes\n", valeur);
                   valeur--;
                   sleep(60000); // 1000 (1s) * 60
                               if (valeur == 0)
                               {
                               printf("\a\n\nFIN DU COMPTE A REBOURS\a"); //idem a precedement
                               printf("\nAppuyez sur une touche...");
                               getch();
                               system("cls");
                               goto start;
                               }
                   goto repere4; //idem au compte a rebours en seconde
                   }
    }

      if (choix1 == 3) //si equivalence de temps choisit.
      {
      system("cls");
      printf("Systeme d'equivalence de temps:\n\n");
     
      printf("Voulez vous que le systeme transforme :\n");
      printf("[1] des heures en minutes\n");
      printf("[2] des heures en seconde\n");
      printf("[3] des minutes en seconde\n");
      printf("[4] des minutes en heure\n");
      printf("[5] des secondes en minute\n");
      printf("[6] des secondes en heure\n");
      scanf("%ld", &choix2); //choix de la transformation
     
                   if (choix2 == 1) //si choix 1 selectionner
                   {
                   printf("\nNombre d'heures a transformer en minute :\n");
                   scanf("%ld", &valeur2); //variable temps en heures
                   
                   resultat = valeur2 * 60; //transformation en minute
                   printf("\n\n%ld heure(s) equivaut a %ld minutes.\n", valeur2, resultat);
                   printf("\nAppuyez sur une touche ...");
                   getch();
                   system("cls"); //lavage de la fenetre
                   goto start; //Retours au menu
                   }

                   if (choix2 == 2) //idem, juste la formule change
                   {
                   printf("\nNombre d'heures a transformer en seconde :\n");
                   scanf("%ld", &valeur2);
                   
                   resultat = valeur2 * 3600;
                   printf("\n\n%ld heure(s) equivaut a %ld secondes.\n", valeur2, resultat);
                   printf("\nAppuyez sur une touche ...");
                   getch();
                   system("cls");
                   goto start;
                   }             
                   
                    if (choix2 == 3) //idem, juste la formule change
                   {
                   printf("\nNombre de minutes a transformer en seconde :\n");
                   scanf("%ld", &valeur2);
                   
                   resultat = valeur2 * 60;
                   printf("\n\n%ld minute(s) equivaut a %ld secondes.\n", valeur2, resultat);
                   printf("\nAppuyez sur une touche ...");
                   getch();
                   system("cls");
                   goto start;
                   }             
                   
                    if (choix2 == 4) //idem, juste la formule change
                   {
                   printf("\nNombre de minutes a transformer en heure :\n");
                   scanf("%ld", &valeur2);
                   
                   resultat = valeur2 / 60;
                   printf("\n\n%ld minute(s) equivaut a %ld heure(s).\n", valeur2, resultat);
                   printf("\nAppuyez sur une touche ...");
                   getch();
                   system("cls");
                   goto start;
                   }                     
                     
                    if (choix2 == 5) //idem, juste la formule change
                   {
                   printf("\nNombre de secondes a transformer en minute :\n");
                   scanf("%ld", &valeur2);
                   
                   resultat = valeur2 / 60;
                   printf("\n\n%ld seconde(s) equivaut a %ld seconde(s).\n", valeur2, resultat);
                   printf("\nAppuyez sur une touche ...");
                   getch();
                   system("cls");
                   goto start;
                   }                 

                    if (choix2 == 6) //idem, juste la formule change
                   {
                   printf("\nNombre de secondes a transformer en heure :\n");
                   scanf("%ld", &valeur2);
                   
                   resultat = valeur2 / 3600;
                   printf("\n\n%ld seconde(s) equivaut a %ld heure(s).\n", valeur2, resultat);
                   printf("\nAppuyez sur une touche ...");
                   getch();
                   system("cls");
                   goto start;
                   }
                     //fin du programme !
    }
    }


    Merci d'avance a ceux qui ont eux le courage de lire mon programme =)

    ciao
    • Partager sur Facebook
    • Partager sur Twitter
      9 décembre 2005 à 7:38:11

      Le problème du goto c'est que ca rend plus difficile la lecture du code parsqu'il faut toujours rechercher ou est tel truc et tout (surtout pour un code relativement long). Sinon beh je pense que le goto fonctionne tres bien pour les programmes :)
      • Partager sur Facebook
      • Partager sur Twitter
        9 décembre 2005 à 8:33:38

        Je sais pas si c'est de voir des goto ou des sleep(60000) qui me fait le plus mal... :lol:

        En plus, une fois le chronomètre lancé, le programme peut plus s'arrêter y'a le goto qui reboucle sans arrêt.
        Il y'a moyen de faire un chronomètre beaucoup plus précis, non bloquant et sans utiliser de goto.

        Mais bon, pour un premier jet, c'est pas mal :)
        • Partager sur Facebook
        • Partager sur Twitter
          9 décembre 2005 à 10:18:06

          Les goto sont à bannir impérativement si tu programmes en C !
          • Partager sur Facebook
          • Partager sur Twitter
            9 décembre 2005 à 12:08:39

            Le problème n'est pas d'utiliser les gotos mais de les utiliser de manière lisible. Découpe en plusieurs fonctions et on y verra quelque chose.
            • Partager sur Facebook
            • Partager sur Twitter
              9 décembre 2005 à 16:11:25

              Citation : rotoclap

              Je sais pas si c'est de voir des goto ou des sleep(60000) qui me fait le plus mal... :lol:

              En plus, une fois le chronomètre lancé, le programme peut plus s'arrêter y'a le goto qui reboucle sans arrêt.
              Il y'a moyen de faire un chronomètre beaucoup plus précis, non bloquant et sans utiliser de goto.

              Mais bon, pour un premier jet, c'est pas mal :)



              Je demandais justement dans le topic initial si quelqu'un avait une astuce pour arreter le chrono =)

              Sinon je ne vois pas trop comment ne pas utiliser sleep, je debute (j'ai commencé avec les cours c) donc je presume que la librairie #time doit etre utile mais je verais ca plus tard :)

              Sinon je me demandais comment separer le code en plusieurs fonction et comment aller de l'une a l'autre.

              Merci pour les reponses.
              • Partager sur Facebook
              • Partager sur Twitter
                9 décembre 2005 à 16:18:34

                Pardonnez-moi de mon ignorance, mais qu'est-ce qu'un "GOTO" ?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  9 décembre 2005 à 16:40:05

                  GOTO cela signifie "Aller a" donc ici goto start c'est aller au début. Sinon utilise switch c'est beaucoup plus clair que des if partout
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 décembre 2005 à 17:46:14

                    Et ça efface tout ce qui a été affiché ou il reprend juste le script a partir de zéro ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 décembre 2005 à 19:27:58

                      Moi j'ai essayer son script mais il y a quelque chose que je ne comprent pas, pour utiliser sleep(); ne faut-il pas inclure une librairie special car mon IDE ne reconait pas cette fonction.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 décembre 2005 à 21:18:01

                        Citation : speed


                        Je demandais justement dans le topic initial si quelqu'un avait une astuce pour arreter le chrono =)

                        Sinon je ne vois pas trop comment ne pas utiliser sleep, je debute (j'ai commencé avec les cours c) donc je presume que la librairie #time doit etre utile mais je verais ca plus tard :)



                        Justement, en utilisant pas sleep tu vas pouvoir faire une boucle continue qui ne s'arrête pas pendant un temps défini.
                        Sur windows, tu as la fonction GetTickCount() (dans windows.h, inclure kernel32.lib) qui renvoie le nombre de millisecondes écoulé depuis le boot du système
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Chronometre multi-usage

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown