Tiempo de reacción a un estímulo visual

David Vega

Programa que mide el tiempo de reacción del usuario a un estímulo visual.


/*Programa que mide los reflejos del usuario (más o menos). Funciona de la
siguiente manera:
El programa requiere que el usuario introduzca unos números cualesquiera.
Dichos números (en realidad es un int) se utilizarán como un (primitivo)
generador de entropía para que el tiempo de aparición de la figura tenga un
grado de aleatoriedad aceptable. También se podría haber utilizado la hora del
ordenador del usuario para dar un número aleatorio, pero eso requeriría una
librería adicional, así que lo he considerado innecesario para nuestro caso
porque no hace falta un grado extremo de aleatoriedad.
Después de que el usuario confirme que está preparado, el programa esperará un
tiempo "aleatorio" (que dependerá del int introducido) y mostrará
la figura en pantalla. En ese momento, el programa empezará a contar el tiempo
que tarda el usuario en reaccionar presionando ESPACIO. Finalmente se muestra
al usuario el tiempo que ha tardado en reaccionar y si encaja su resultado
en una clasificación basada en datos de Human Benchmark (6704197 tests).
Hay que tener en cuenta que el tiempo de reacción no sólo varía según el estado
de ánimo, el momento del día, etc., sino también del tipo de estímulo dado (algo
que asusta o de color rojo en general provocará un tiempo de reacción menor que
un cuadradito con la palabra STOP!! dentro). */

// Programa creado por David Vega

#include <iostream>
#include <windows.h> // Librería para el Sleep().

using namespace std;

int main()
{
	int rantime,ran;
	float time;
	cout << "Voy a medir tu tiempo de reaccion a un estimulo visual. \n" << endl;
	Sleep(3000);
	cout << "Cuando aparezca una figura en pantalla, deberas presionar 'ESPACIO' tan
                  pronto \ncomo puedas. Yo medire el tiempo que has tardado en hacerlo. \n" << endl;
	Sleep(5000);
	cout << "Presiona cuatro o cinco numeros al azar (no pasa nada si introduces \n
                  uno o dos mas, pero no te pases)." << endl;
	cin >> ran;
	srand(ran); // Utilizamos los números introducidos al azar (el entero ran) para inicializar
	rantime=rand()%5000+1000; // el generador de números pseudoaleatorios integrado en c.
                  //Nótese que el número "aleatorio" rantime estará entre 1000 y 6000 milisegundos.
	cout << "Presiona 'Enter' cuando estes preparado..." << endl;
	cin.sync(); // Para que el cin.get() ignore el último input (ran).
                 //(También se podría haber puesto otro cin.get() en lugar de esta línea)
	cin.get(); /* El programa espera a que el usuario introduzca un input
en el teclado (Enter). Es una solución como el system("pause"), pero no requiere
librerías adicionales y según tengo entendido funciona también fuera de Windows.
Aunque como usamos el Sleep(), supongo que eso da igual... Supongo que la verdadera
ventaja es que es más eficiente porque no requiere que el sistema pare el proceso sino
que lo para él mismo, y por ello "gasta" menos recursos. Además permite cambiar el
mensaje que se muestra (es un cout cualquiera). */
	Sleep(rantime);
// El programa espera un tiempo entre 1000 y 6000 milisegundos desde que el usuario presiona Enter.
	cout << "\t\t\xB2\xB2\xB2\xB2\xB2\xB2\xB2\xB2\xB2\xB2" << endl;
// Después, muestra en pantalla la figura.
	cout << "\t\t\xB2        \xB2" << endl;
	cout << "\t\t\xB2        \xB2" << endl;
	cout << "\t\t\xB2 STOP!! \xB2" << endl;
	cout << "\t\t\xB2        \xB2" << endl;
	cout << "\t\t\xB2        \xB2" << endl;
	cout << "\t\t\xB2\xB2\xB2\xB2\xB2\xB2\xB2\xB2\xB2\xB2" << endl;
	for(time=0.000;;time=time+0.001) // Este será nuestro "reloj" artesanal,
           //hecho con un bucle for. No imponemos ninguna condición al for,
           //para hacer que sea un bucle infinito.
	{
		Sleep(1); // Cada bucle dura aproximadamente 1 milisegundo.
		if (GetKeyState(0x20)) break; // El bucle termina cuando el estado
                                    //de 0x20 es true. 0x20 es "espacio", así que será
                                    //true cuando el usuario lo presione.
	}
	cin.sync(); // Volvemos a hacer que el programa "ignore" el último input.
	cout << endl;
	if(time>=1) cout << "Vaya, " << time << " segundos... No es un tiempo precisamente
                           excelente. Puedes volver a intentarlo si quieres.";
	else if(time>=0.7) cout << time << " segundos es mucho tiempo. Puedes volver
                                          a intentarlo si quieres.";
	else if(time>=0.4) cout << time << " segundos es bastante. Puedes volver
                                          a intentarlo si quieres.";
	else if(time>=0.3) cout << time << " segundos. Estas justo por debajo de
                                          la media. Vuelve a intentarlo.";
	else if(time>=0.18) cout << time << " segundos. Dentro de lo normal.";
	else if(time>=0.1) cout << "Vaya, " << time << " segundos esta muy bien.";
	else cout << "Ni el Comite Olimpico ni yo nos creemos que tengas un tiempo de "
                    << time << " segundos, ha sido suerte.";
	cin.get(); // El usuario deberá presionar "Enter" para cerrar el programa.
	return 0;
}

Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Una respuesta a Tiempo de reacción a un estímulo visual

  1. En los bestiarios medievales se incluyen se las fábulas cristianas de animales, en las que los mamíferos, no sólo del mismo origen natural que el hombre, eran también considerados espejo de sus cualidades morales. Así, al observar a los mamíferos, el hombre se observaba a sí mismo.El estudio de los animales era el estudio del Homo Sapiens. Los bestiarios, auténticos “best-sellers” editoriales de su época, se presentaban como libros de animales. Sin embargo eran audaces descripciones de la naturaleza humana en términos del comportamiento de los animales. Manuel Barbero (“Las lecciones de dibujo” Cátedra) remite antes que ningún análisis biológico de los hechos, a una explicación a través de lo perceptivo. Si entre una fuente de luz en la noche y un gato me iterpongo yo, veré el fuego reflejado en sus ojos. El gato echaba fuego por los ojos. El que ha contemplado este fenómeno entiende el mensaje, quien no lo haya visto añadirá su imagen del fuego a su imagen del gato. En muchos casos, los rasgos visuales más llamativos, memorables, de un animal se preñan de conspicuidad no selectiva en la ilustración gráfica que lo representa.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s