cs_Chouchou182
Messages postés252Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention25 avril 2011
-
25 juil. 2004 à 23:51
mage_des_enfers
Messages postés24Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention25 octobre 2004
-
26 août 2004 à 17:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
mage_des_enfers
Messages postés24Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention25 octobre 2004 26 août 2004 à 17:57
lol j'ai pas le temps de retravailler sur ma source donc désolé si elle ne change pas. Si un jour je trouve le temps de le faire je le ferai mais là ça fait un bout de temps que je n'ai pas programmer ni lu mon livre qui me sert d'apprentissage. Merci pour vos commentaires !
cs_viran
Messages postés104Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention31 décembre 2006 26 août 2004 à 17:36
Ta version avait un probleme et ne pouvait pas se compiler(au niveau de main je crois)mais la version de chouchou182 fonctionne tres bien,sinon c'est pas mal je debute et j'ai beaucoup de mal a definir els parametres de compilation(mais bon vous vous en foutez^^)
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 28 juil. 2004 à 21:36
ca fusille les performance et c'est antillogique : a quoi ca sert les e/s bufferisée si on vide systematiquement le tampon?? (a part pour le debug)
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 28 juil. 2004 à 18:52
d'accord avec djl
endl = '\n'+flush,
ce n'est pas recommandé de forcer le vidage du tampon à chaque fin de ligne.
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 26 juil. 2004 à 19:27
c'est du c avec des cout, pas du c++
neo_00110010101
Messages postés360Date d'inscriptionsamedi 27 septembre 2003StatutMembreDernière intervention30 mai 2006 26 juil. 2004 à 10:30
d'accord avec toi Chouchou 182, mais laissez les goto tranquilles ^^
cs_Arnotic
Messages postés933Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention 9 janvier 2012 26 juil. 2004 à 09:14
Concernant du code lisible trop de commentaire tue le code ! Il ne faut pas commenter les instructions (il faut simplement apprendre le C) mais commenter juste 2 ou 3 trucs c'est tout.
cs_Chouchou182
Messages postés252Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention25 avril 20111 25 juil. 2004 à 23:51
Bonjour.
Tu es sûrement débutant ; il ne faut pas se décourager mais tu as encore quelques progrès à faire.
Tout d'abord ton compte à rebours n'a rien de "très simple". Il est totalement illisible.
Il y a trop d'includes : et <ctime> auraient suffi.
L'ordinateur sait faire des calculs sur des nombres plus grand que 10, il n'est donc pas nécessaire de traiter chiffre par chiffre.
cout c'est du C++, getch() c'est pas standard. Alterner n'est pas l'idéal d'un point de vue logique du programme.
L'utilisation de goto ainsi que celle de l'opérateur virgule sont plutôt à bannir. Dans certains cas ils peuvent être utiles mais pas dans ton programme.
La méthode aussi a des lacunes, tu attends 1000 millisecondes mais tu ne mesures pas le temps nécessaire à l'affichage et aux calculs. Donc tes secondes sont un peu trop longues.
Nous allons donc refaire un compte à rebours en C ansi lisible :
/* rebours.c */
/* Includes */
#include <stdio.h> /* Pour les entrées / sorties */
#include <time.h> /* Pour mesurer le temps qui passe */
/* main */
int main(int argc, char** argv)
{
/* Variables */
/* Durées entrées par l'utilisateur */
time_t heures 0, minutes 0, secondes = 0 ;
/* Temps à patienter en secondes, déduit de la saisie de l'utilisateur */
time_t temps = 0 ;
/* Heure du début du compte à rebours */
time_t debut = 0 ;
/* Temps écoulé et temps écoulé précédant */
time_t temps_ecoule 0, precedant 0 ;
/* On affiche un petit message de bienvenue */
puts("-- Compte \205 rebours --\n") ;
/*
* On commence par demander à l'utilisateur
* la durée du compte à rebours
*/
/* On lit le nombre d'heures... */
puts("Entrez le nombre d\'heures \205 attendre : ") ;
scanf("%d", &heures) ;
/* ...puis le nombre de minutes... */
puts("Entrez le nombre de minutes \205 attendre : ") ;
scanf("%d", &minutes) ;
/* ...et enfin le nombre de secondes */
puts("Entrez le nombre de secondes \205 attendre : ") ;
scanf("%d", &secondes) ;
/*
* On convertit la saisie de l'utilisateur en un nombre de secondes
*/
temps = secondes + minutes * 60 + heures * 3600 ;
/*
* Maintenant on boucle tant que le temps n'est pas écoulé.
* C'est une boucle infinie qui utilise toute la puissance de calcul
* du CPU.
*/
/* On récupère l'heure de début du compte à rebours */
time(&debut) ;
while ( temps > (temps_ecoule = time(0) - debut) )
{
/* Seulement lorsque le temps écoulé change : */
if ( precedant == temps_ecoule )
continue ;
/* On convertit le temps restant au format h-m-s */
secondes = (temps-temps_ecoule) % 60 ;
minutes = ( ((temps-temps_ecoule) - secondes) / 60 ) % 60 ;
heures = (((temps-temps_ecoule) - secondes) / 60 - minutes) / 60 ;
/* On affiche le temps restant */
printf("\r%02ih%02im%02is soit %06is", heures, minutes, secondes, (temps-temps_ecoule)) ;
/* On sauve le temps écoulé */
precedant = temps_ecoule ;
}
/*
* Un petit message d'adieu pour que le programme
* ne se ferme pas avant que l'utilisateur ne l'ai vu
* en entier
*/
puts("\nC\'est fini !!\nEntrez une valeur pour terminer\n") ;
getchar() ;
return 0 ;
}
Cette méthode n'est toujours pas idéale. En effet elle consomme toutes les resources disponibles et n'est fiable qu'à la seconde près.
26 août 2004 à 17:57
26 août 2004 à 17:36
28 juil. 2004 à 21:36
28 juil. 2004 à 18:52
endl = '\n'+flush,
ce n'est pas recommandé de forcer le vidage du tampon à chaque fin de ligne.
26 juil. 2004 à 19:27
26 juil. 2004 à 10:30
26 juil. 2004 à 09:14
Sleep() est une API donc marche à tout les coups (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleep.asp)
Concernant du code lisible trop de commentaire tue le code ! Il ne faut pas commenter les instructions (il faut simplement apprendre le C) mais commenter juste 2 ou 3 trucs c'est tout.
25 juil. 2004 à 23:51
Tu es sûrement débutant ; il ne faut pas se décourager mais tu as encore quelques progrès à faire.
Tout d'abord ton compte à rebours n'a rien de "très simple". Il est totalement illisible.
Il y a trop d'includes : et <ctime> auraient suffi.
L'ordinateur sait faire des calculs sur des nombres plus grand que 10, il n'est donc pas nécessaire de traiter chiffre par chiffre.
cout c'est du C++, getch() c'est pas standard. Alterner n'est pas l'idéal d'un point de vue logique du programme.
L'utilisation de goto ainsi que celle de l'opérateur virgule sont plutôt à bannir. Dans certains cas ils peuvent être utiles mais pas dans ton programme.
La méthode aussi a des lacunes, tu attends 1000 millisecondes mais tu ne mesures pas le temps nécessaire à l'affichage et aux calculs. Donc tes secondes sont un peu trop longues.
Nous allons donc refaire un compte à rebours en C ansi lisible :
Cette méthode n'est toujours pas idéale. En effet elle consomme toutes les resources disponibles et n'est fiable qu'à la seconde près.
J'espère que ce code te servira.
Et si tu as des questions, surtout, n'hésite pas.
A++
Chouchou