Habitualmente una de las cosas que nos interesa medir cuando programamos código, es el tiempo de ejecución. Identificar las secciones de código que más impactan en el tiempo de ejecución total, nos permite optimizar el código y disminuir el tiempo de ejecución general de todo nuestro código.
En C++ hay varias formas de hacerlo, pero dependiendo de cómo lo implementemos y qué cabeceras usemos, podemos encontrarnos que al compilar nuestro código en ciertos sistemas no nos funcione. El siguiente ejemplo muestra cómo medir tiempos en una sección de código utilizando cabeceras estándar de C++:
#include <iostream> #include <ctime> unsigned t0, t1; t0=clock() // Code to execute t1 = clock(); double time = (double(t1-t0)/CLOCKS_PER_SEC); cout << "Execution Time: " << time << endl;
La función "clock" retorna el tiempo consumido por el programa medido en ticks, que junto con la macro "CLOCKS_PER_SEC" nos permite traducir los ticks a segundos.
El código también se encuentra disponible en:
Gracias por la ayuda me sirvió mucho.
¡Me alegro de que te haya sido útil! 😉
OYE!!! eres el mejor, me salvaste de una mil gracias, le daré clic a todos los anuncios como agradecimiento 😀
Me alegro! Gracias por tu comentario.
Aunque como ya habrás notado, no tengo publicidad como tal en la que se cobre por clicks o visualizaciones, pero gracias igualmente 😉
Hola, he utilizado esta función sin embargo me arroja como resultado el tiempo pero de forma hexadecimal creo, sabes a que se pueda deber esto, es decir no me arroja por ejemplo 0.000001542 me arroja 0.e32 etc etc. Agradeceria si alguien me respondiera, gracias de antemano
Lo primero creo que te falta algún número entre el . y la e en 0.e32
Por otro lado, ese formato es normal y se llama notación científica que se representa de la forma mantisa x base^exp. Si operas el número tendrás el número decimal que buscas.
La razón de que esto sea así es por la “representabilidad” de valores demasiado grandes o demasiado pequeños que acomoda dichos valores para ser escritos de manera convencional, legible y precisa gracias a la notación científica.
En el caso particular de la programación la base es siempre 10. Es decir, si tu número, el cual como te he dicho creo que le falta algún número, quedaría por ejemplo 1.36e^32 como 1,36 × 10^32 en base 10 y quitándole la base le tendrías que añadir 32 ceros a 1,36. Representación que ya se vuelve difícil de leer, complicada de escribir por su longitud y seguramente acabarías redondeando para evitarlo perdiendo precisión.
Espero que la respuesta te haya servido y te ayude a entender los valores que estás obteniendo.
Gracias por la ayuda, deje mi like
como poder hacer un temporizador para una prueba digital en c++? La prueba tiene que durar 15 minutos maxìmo si pasan de los 15 minutos la prueba tiene que parar y mostrar el resultado del usuario
Lo más sencillo es al inicio registrar el tiempo y meter comprobaciones de tiempo en las iteraciones de tu prueba. Cuando el tiempo que haya transcurrido sean tus 15 minutos termina la ejecución y muestra el resultado.
Sin saber más tampoco puedo decirte mucho más...
Esta es la estructura de mi programa pero no se como programar un temporizador que sea de 15 minutos. Terminando los 15 minutos se termine la prueba y que muestre el resultado de la prueba
#include
#include
using namespace std;
int main ()
{
int puntaje;
int r1;
string r;
puntaje = 0;
cout << "Instrucciones para la prueba de inteligencia:" << endl;
cout << "Esta es una prueba para ver como piensa. Contiene preguntas de diferentes clases." << endl << "Despues de cada pregunta hay de tres a cinco respuestas posibles o un espacio donde puede ingresar la respuesta directamente." << endl << "Lea cuidadosamente cada pregunta y decida cual de las respuestas es la mejor." << endl << "Como es una prueba donde se mide el tiempo, no le conviene emplear mucho tiempo en una sola pregunta" << endl;
cout << endl;
cout << "Se le concederan 15 minutos a partir del momento en que el examinador le indique que empiece." << endl;
cout << endl;
cout << "Cuestionario de 30 preguntas: " << endl << endl;
cout << "1. Lo opuesto de odio es:" << endl;
cout << "a) enemigo"<< endl;
cout << "b) temor" << endl;
cout << "c) amor" << endl;
cout << "d) amigo" << endl;
cout << "e) alegria" <> r;
if (r == "c")
{
puntaje = puntaje + 1;
}
cout < 20)
{
cout <= 14)
{
cout <= 8)
{
cout <= 5)
{
cout << "Inferior al termino medio";
}
else
if (puntaje < 5)
{
cout << "Bajo o inferior";
}
cout << endl << endl;
system("pause");
return 0;
}
¿Puedes subirlo a algún repositorio tipo GitHub desde donde trabajar con ello correctamente?
Veo varias cosas raras, se pierde la identación del código y creo que te ha podido hacer algún remplazo al copy-pegarlo...
De todas formas, ¿ese código está completo y te funciona? Lo digo porque tienes includes que no incluyen nada, variables que no veo que uses pero declaras, creo que esto "<> r" querías poner un escape de retorno, no veo cin para recoger la respuesta...
¿Alguien sabe cómo programar una máquina de llenado de agua con tiempo de llenado, por ejemplo 10 litros en 10 segundos?
Fácil y útil, muchas gracias
Como blog hermanado, me gustaría complementar esta entrada https://headerfiles.com/2020/01/08/una-forma-sencilla-rapida-y-cuasi-automatica-de-medir-tiempos-de-ejecucion-en-funciones/
¡Gran aporte!
Gracias por compartirlo. 😉
Hola como puedo guardar ese tiempo en un archivo?
La modificación que buscas para guardar en un fichero sería algo así:
#include <fstream>
std::ofstream ofs ("execution_time_log.txt", std::ofstream::out);
ofs << "Execution Time: " << time << endl;ofs.close();
Muchas gracias por tu aporte!
Si ves este comentario me gustaria hacerte una pregunta, como puedo hacer que el tiempo me de el valor exacto? por ejemplo si me da 5.034 segundos, como hago para que eso se transforme a 5?
Un saludo!
Si quieres rendondear usa round() y si quieres truncar usa trunc(). Más info en: https://www.cplusplus.com/reference/cmath/round
Para quitarte la parte decimal puedes hacer un casting a int: (int) decimal_number
No obstante quitarle decimales a una medición de tiempo de ejecución no suele ser interesante...
Muchas gracias por el aporte!....
Quisiera saber como se puede ver el tiempo en una unidad mas pequeña, milisegundos o microsegundos... muchas gracias
alguien sabe como es el código para saber la cantidad de movimientos que se realizo en un juego
así como el tiempo que se
tardó en resolver todo el juego, y guardar en un vector los records junto con los tiempos y el número de
movimientos realizados?
programar en lenguaje C el tiempo en ciclos del reloj al ejecutar cualquier programa en cualquier lenjuague y abrir los ciclos de reloj al abrir Word
Buen día, como programar un temporizador que dure 10 minutos y suene una alarma auditiva
hay un error, falta un ;
#include
#include
unsigned t0, t1;
t0=clock(); //Acá falta ese ; XD
// Code to execute
t1 = clock();
double time = (double(t1-t0)/CLOCKS_PER_SEC);
cout << "Execution Time: " << time << endl;
Muchas gracias, me fue super util
guay, a dia d hoy todavía furrula