Chronométrer un temps de réponse [Résolu]

Signaler
Messages postés
7
Date d'inscription
samedi 16 février 2013
Statut
Membre
Dernière intervention
11 juin 2019
-
Messages postés
7
Date d'inscription
samedi 16 février 2013
Statut
Membre
Dernière intervention
11 juin 2019
-
Bonjour,

je débute en C++. Je souhaite créer un jeu de calcul mental très simple, sur console pour le moment.

Le principe est de poser une opération (tables addition ou multiplication) et de chronométrer le temps de réponse de mes élèves pour chaque opération posée afin de déceler les additions ou multiplications les plus problématiques à mémoriser.

j’envisage de créer une fonction qui fonctionne ainsi :

une opération au hasard apparaît
le chronomètre se met en marche
l'élève tape la réponse et appuie sur entrée.
le chronomètre s'arrête.
on évalue la réponse donnée
on calcule le temps mis entre l'apparition de l'opération et l'appui sur la touche entrée une fois la réponse tapée.
on affiche le temps mis et "juste" ou "faux"


mais comme je vous l'ai dit, je débute et la classe ctime m'est encore nébuleuse.

J'ai bien trouvé une fonction double difftime ( time_t time2, time_t time1 );

This function calculates the difference in seconds between time1 and time2.

et la fonction time_t time(time_t *time);

This returns the current calendar time of the system in number of seconds elapsed since January 1, 1970. If the system has no time, .1 is returned.

J'ai aussi cherché aussi des exemples sur internet pour bien comprendre comment manipuler le temps mais ceux-ci illustrent des cas où on a besoin de chronométrer le temps d'exécution d'un programme en général et j'ai du mal à transférer ces exemples à mon cas.

Quelqu'un pourrait-il m'aider ?

Je vous remercie
A voir également:

7 réponses

Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Bonjour.

Veux-tu faire du C ou du C++ ?
Si tu veux faire du C++, pas besoin de faire du time/ctime, tu as std::chrono qui est plus adapté.

Exemple:
#include <iostream>
#include <chrono>

int main()
{
  std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();
  std::cout << "3x4 ?" << std::endl;
  int result = 0;
  std::cin >> result;
  std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
  int elapsed_seconds = std::chrono::duration_cast<std::chrono::seconds>(end - start).count();

  std::cout << "Result: " << result << "(" << (result == 12 ? "ok": "wrong") << ")" << ", elapsed time: " << elapsed_seconds << "s" << std::endl;
  return 0;
}



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Messages postés
7
Date d'inscription
samedi 16 février 2013
Statut
Membre
Dernière intervention
11 juin 2019

Merci cptpingu,

je teste tout de suite ta proposition.

PS : Je compte plutôt travailler en C++.
Messages postés
7
Date d'inscription
samedi 16 février 2013
Statut
Membre
Dernière intervention
11 juin 2019

Re ctpingu

alors j'ai copié-collé ta proposition dans une "main" (je travaille avec codes-blocks).

Par contre j'ai une floppée d'erreurs signalées :

d'abord celle-ci signalée dans la fenêtre située sous la fenêtre d'écriture du programme

C:\Users\C........a\projets c++\chrono tables\main.cpp:11:57: error: 'std::chrono' has not been declared
int elapsed_seconds = std::chrono::duration_cast<std::chrono::seconds>(end - start).count();


Puis dans une nouvelle fenêtre nommée "C++ 0x_warning.h :
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.

// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// <http://www.gnu.org/licenses/>.

/** @file bits/c++0x_warning.h


*  This is an internal header file, included by other library headers.

*  Do not attempt to use it directly. @headername{iosfwd}

*/

#ifndef _CXX0X_WARNING_H
#define _CXX0X_WARNING_H 1

#if __cplusplus < 201103L
#error This file requires compiler and library support for the \
ISO C++ 2011 standard. This support is currently experimental, and must be \
enabled with the -std=c++11 or -std=gnu++11 compiler options.
#endif

#endif



Aurais-tu une explication ?

Je te remercie.

Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Ce n'est pas une erreur dans le code, mais plutôt dans la configuration de ton IDE.
Par défaut, Code::Block utilise (encore !) une ancienne version du C++. Il faut activer la dernière version. Je n'utilise pas cet IDE, mais voici ce que j'ai trouvé:

https://stackoverflow.com/questions/18174988/how-can-i-add-c11-support-to-codeblocks-compiler
Messages postés
7
Date d'inscription
samedi 16 février 2013
Statut
Membre
Dernière intervention
11 juin 2019

Re ctpingu

j'ai réussi à régler le problème en allant dans les settings du compiler et en choisissant

"have g++ follow C++11 ISO C++ language standard ...)"

Donc, la console affiche bien 3*4 ?
par contre la console se referme immédiatement après que j'ai rentré ma réponse et tapé sur "entrée" ce qui fait que j'ai à peine le temps de voir le temps chronométré s'afficher...
Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
C'est un souci lié à la manière dont Windows gère ses fenêtres consoles. Si tu lances ce programme via un terminal, l'affichage reste. Si tu le lances via l'IDE, celui-ci ferme la console une fois le programme terminé.
Deux solutions:
1) Tu configures ton IDE pour qu'il ne ferme pas la console une fois le programme terminé.
2) Tu forces une pause à la fin de ton programme.
std::cout << "Press any key to end" << std::endl;
std::cin.get();



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Messages postés
7
Date d'inscription
samedi 16 février 2013
Statut
Membre
Dernière intervention
11 juin 2019

merci de ton aide cptpingu,

ça marche parfaitement.