Probleme compteur

Résolu
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006 - 20 nov. 2004 à 15:08
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 20 nov. 2004 à 20:00
Bonjour a tous !
Je debute en c++ et j'ai un petit soucis que voici :

En fait je voudrais realiser un programme qui calcule le poul cardiaque (c'est un simple exercice, je vous rassure). Pour ce faire, des que l'utilisateur appuie sur une touche, un compte a rebours de 20 secondes se met en marche et l'utilisateur appuie sur une touche a chaque fois qu'il sent son poul pendant ces 20 secondes. A chaque fois qu'on appuie sur une touche, un petit compteur visible a l'ecran s'incrémente de 1, montrant ainsi a l'utilisateur a combien de poul il en est.
A la fin des 20s, on multiplie ce nombre par 3 et on obtient le poul final. (fantastique non ?)

Voila ! En ce qui concerne le compteur, je pense avoir reussi a le faire (pas sur), mais mon probleme est que je ne sais pas comment faire pour créer un compteur qui calcule le nombre de ofis qu'on a appuyer sur une touche ! Si vous pouviez m'eclairer !!!

Merci a tous !

11 réponses

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
20 nov. 2004 à 20:00
vi ca a l'air juste...
et par defaut, le sdtin c'est le clavier
3
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
20 nov. 2004 à 15:12
Je precise :
Je travaille en C/C++ sous Borland 5.2
On m'a dit d'utiliser la fonction getch() mais je ne sais pas a quoi elle sert...
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
20 nov. 2004 à 16:06
je suppose que tu est dans une fenetre dos? (la toute pas belle en noir et blanc)
0
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004
20 nov. 2004 à 16:37
Tu peux toujours rentrer les touches dans une chaine de caracteres comme ca l utilisateur peut deja appuyer sur n importe quel caractere.

CString chaine;
While(temps <20secondes)
{
chaine=getchar();
temps ++; //je pense calculer le temps ici
}

// apres le while calculer la longueure de la chaine de caractere.

int taille=chaine.GetLength();

int Poux=taille*3;

Bon courage

Mat
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
20 nov. 2004 à 16:45
euh.. test sur de ton truc la?
getchar va attendre que tu aies tapé une touche puis enter
si tu mes 2 secondes a appuyer sur ta touche, time++ ne va pas faire grand chose...
dans ton cas ya pas besoin d'un granded précision, time() (dans (time.h) devrait suffire;
long tpsdebut=time();
int count=0;
while( time()-tpsdebut <=2000) (en milliisecondes)
{
getchar(); (ya mieux hein)
count++;
}
count*=3;
count/=60;

un truc comme ca...
0
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
20 nov. 2004 à 17:23
Merci a vous deux deja!
En ce qui concerne le decompte du temps je pense faire comme Arnaud a dit. Par contre je ne maitrise pas du tout getchar()...
Dans ta version Arnaud, que veut dire la ligne :
count/=60 ?

Sinon ca me parait proche de ce que je voulais faire donc encore merci !
Par contre tu dis qu'il y a meux que getchar() ? Si oui tu peux m'expliquer quoi ? (et surtout pourquoi c'est mieux !)
0
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
20 nov. 2004 à 17:27
Je rajoute un probleme dont je ne suis pas sur :

Je veux que quand l'utilisateur lance le programme, il ne se passe rien, il puisse juste lire les consignes d'utilisations que je rentrerai. Et le décompte des 20s démarre uniquement a la premiere touche enfoncé par l'utilisateur. Ce n'est pas ce qui se passe ici si ? Si non comment faire ? (c'est la l'un de mes principal soucis)
0
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
20 nov. 2004 à 17:40
Bon j'ai retravaillé ton prog Arnaud (enfin j'ai arrondi les bords comme je les voulais) et je pense avoir resolu mon probleme cité au dessus a savoir que je veux que le décompte démarre quand l'utilisateur commence a compter son poul. Ca donne la chose qui suit, dites moi si vous voyez des erreurs, si mon pb est resolu, et surtout si on pouvait m'expliquer la ligne que je ne comprend pas (count\=60) :

void cardio (void)
{
char rep[20];
rep[0] = 'Y';
while ((rep[0] != 'n') && (rep[0] != 'N'))
{
printf("\n Consignes");
getchar();
long tpsdebut=time();
int count = 1;
while( time()-tpsdebut <=2000)
{
getchar();
count++;
}
count*=3;
count/=60; <-- ligne que je ne comprend pas
printf(" Votre poul est de %d", count);
printf("\n\n Voulez-vous recommencer l'execution ? ");
scanf("%s",rep);
}
return ;
}
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
20 nov. 2004 à 17:50
count += 1;
c'est count=count+1 OK?
ben count /= 60 c'est count=count / 60;
ca te donne le nombre de pulsations a la sec, vi je sais a la reflexion c'est inutile...
printf("\n\n Voulez-vous recommencer l'execution ? ");
ne doit pas se trouver dans cette fonction mais dans main, l ca te servira a rien. Idem pour
char rep[20];
rep[0] = 'Y';
while ((rep[0] != 'n') && (rep[0] != 'N'))
{..}
tu pux mettre ca dans main, ca sera plus clair, avec cardio() dans le while.
pour getchar je vais me renseigner.
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
20 nov. 2004 à 17:53
essaye
fgetc (stdin);
0
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
20 nov. 2004 à 18:20
Ouais pour le whil rep etc... je l'avais mis par pur reflexe en fait... ;)
Sinon je vais essayer le fgetc (stdin) mais la je peux pas aujourd'hui car le pc sur lequel je suis n'a pas Borland. En gros ca change quoi ? et puis c'est quoi le stdin que je met a l'interieur ?
Sinon le reste semblait justE?
0
Rejoignez-nous