Cronometro c++

Iniciado por sanxez1, 22 Julio 2017, 13:38 PM

0 Miembros y 1 Visitante están viendo este tema.

sanxez1

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";
}

ivancea96

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:

Código (cpp) [Seleccionar]
#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/

sanxez1

Muchas gracias, problema solucionado!