Título: Cronometro c++
Publicado por: sanxez1 en 22 Julio 2017, 13:38 pm
Hola, estoy intentando hacer un programa muy simple en el que debes traducir a binario un numero que te da la máquina, me gustaría que cronometrase el tiempo que tardas en hacerlo. Mi código hasta el momento es el siguiente: #include <iostream> #include <stdlib.h> #include <fstream> #include <string> #include <windows.h>
using namespace std;
int numero = 0; int MenuPrincipal(); int CuatroBits(),OchoBits(),DoceBits(); void cronometro(); int Vimag1 = 0, tiempo;
char nombre[20]; int main(){
/* ifstream openFile(Record.txt); if (openFile.is_open()){ //checking for existence of file string Record; //string to store file line getLine(openFile, Record); //gets a line from the file openFile.close(); //closes file after done }*/ MenuPrincipal(); }
int MenuPrincipal(){
int D;
cout<<"Bienvenido a Quien quiere ser binario Game of the year edition \n"; cout<<"Como te llamas?\n"; cin >> nombre; cout<<"Bienvenido, "<< nombre <<"\n"; system("pause > NULL"); system("cls"); cout<<"******************************\n"; cout<<"** Nivel de dificultad: **\n"; cout<<"** 1. 4-bits **\n"; cout<<"** 2. 8-bits **\n"; cout<<"** 3. 12-bits **\n"; cout<<"** **\n"; cout<<"******************************\n"; cin >> D; switch(D){ case 1 : CuatroBits(); break; case 2 : OchoBits(); break; case 3 : DoceBits(); break; default: cout<<"ERROR: Introduzca un numero del 1 al 3\n"; MenuPrincipal(); break; } }
int CuatroBits(){ int Seguir=1, respuesta, numeroUsuario[4], RecordTiempo; system("cls"); cout<<"4-bits USER:"<< nombre <<" Record: \n"; cout<<"\n"; cout<<"Esta bien, que comience el juego. Las reglas son muy simples, saldra un numero en la pantalla, el que consiga expresarloen binario en menos tiempo, gana.\n"; cout<<"(Debes introducir digito por digito)\n"; system("pause > NULL"); system("cls"); do{ int numero = 0; numero = rand() % 16; int tiempo=0; system("cls"); cout<<"4-bits USER:"<< nombre <<" Record: \n"; cout<<"Pulsa cualquier tecla, aparecera un numero y el contador comienzara\n"; system("pause > NULL"); system("cls"); cout<<"4-bits USER:"<< nombre <<" Record: \n"; cout<<numero<<" tiempo:"<<tiempo<<"\n"; Vimag1 = 1;//la utilizo para que el cronometro empiece o pare do{ tiempo++; Sleep(1000); cin >> numeroUsuario[4]; if(numeroUsuario[4] == 1){ respuesta = respuesta + 8; }
cin >> numeroUsuario[4]; if(numeroUsuario[4] == 1){ respuesta = respuesta + 4; } cin >> numeroUsuario[4]; if(numeroUsuario[4] == 1){ respuesta = respuesta + 2; } cin >> numeroUsuario[4]; if(numeroUsuario[4] == 1){ respuesta = respuesta + 1; }
Vimag1 = 0; }while(Vimag1 = 1);
if (respuesta == numero){ cout<<"Has ganado!\n"; cout<<tiempo<<"\n"; if (tiempo > RecordTiempo){ RecordTiempo = tiempo; } } else{ cout<<"Pierdes\n"; cout<<"Usted dijo "<<respuesta<<" en vez de "<<numero<<" \n"; cout<<tiempo<<"\n"; } respuesta = 0; cout<<"otra mas?\n"; cout<<"1. Si\n"; cout<<"2. No\n"; cin >> Seguir; }while(Seguir == 1); exit; }
int OchoBits(){ cout<<"8-bits\n"; }
int DoceBits(){ cout<<"12-bits\n"; }
Título: Re: Cronometro c++
Publicado por: ivancea96 en 22 Julio 2017, 14:37 pm
Si quieres saber el tiempo que ha pasado entre un punto y otro d ela ejecución, tienes clock() de la librería <ctime>, que retorna (usualmente), milisegundos: #include <ctime> int main(){ clock_t cl = clock(); // Milisegundos transcurridos hasta este momento // Pasa el tiempo... cout << (clock() - cl) << endl; // Tiempo ahora - tiempo anterior = tiempo transcurrido }
Como detalle, clock no retorna milisegundos, sino ticks del reloj. En Windows suelen ser milisegundos, pero no tiene por qué. Para tenerlo seguro, tienes la constante "CLOCKS_PER_SEC". Como detalle final, tienes la librería chrono de C++11, que es muy completa para medir tiempos. La más completa de C++ probablemente. Aquí tienes una buena referencia de ella: http://www.cplusplus.com/reference/chrono/ (http://www.cplusplus.com/reference/chrono/)
Título: Re: Cronometro c++
Publicado por: sanxez1 en 22 Julio 2017, 15:30 pm
Muchas gracias, problema solucionado!
|