Chronométrer un temps de réponse

Résolu
syllabozoo Messages postés 6 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 3 juin 2021 - 20 mai 2018 à 15:59
syllabozoo Messages postés 6 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 3 juin 2021 - 22 mai 2018 à 06:18
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

cptpingu Messages postés 3840 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 23 août 2024 126
Modifié le 21 mai 2018 à 12:19
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;
}


0
syllabozoo Messages postés 6 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 3 juin 2021
21 mai 2018 à 17:20
Merci cptpingu,

je teste tout de suite ta proposition.

PS : Je compte plutôt travailler en C++.
0
syllabozoo Messages postés 6 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 3 juin 2021
Modifié le 21 mai 2018 à 17:37
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.

0
cptpingu Messages postés 3840 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 23 août 2024 126
21 mai 2018 à 17:36
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
0

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

Posez votre question
syllabozoo Messages postés 6 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 3 juin 2021
21 mai 2018 à 17:51
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...
0
cptpingu Messages postés 3840 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 23 août 2024 126
Modifié le 21 mai 2018 à 18:36
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();


0
syllabozoo Messages postés 6 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 3 juin 2021
22 mai 2018 à 06:18
merci de ton aide cptpingu,

ça marche parfaitement.
0
Rejoignez-nous