elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Medir velocidad de ejecución de un programa en lenguaje C.-
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Medir velocidad de ejecución de un programa en lenguaje C.-  (Leído 14,328 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #10 en: 4 Abril 2016, 23:24 pm »

Hola a todos.
Voy a exponer el código y como lo implemente para que me digan si es correcto porque me quedan dudas con el resultado, por Ej. 4294967199, ¿estos son milisegundos y 4.30.... segundos?.-

En cuanto a Linux, se puede poner esta línea para que la salida vaya a un archivo de texto. -
>> (time ls) 2> salida.txt

Código
  1. int main( void ){
  2. size_t vector[] = {99, 8, 13, 6, 10, 40, 7, 2, 1,74}, *ptrV = vector;
  3. static size_t elementos = sizeof (vector) / sizeof (size_t);
  4. clock_t cl = clock();
  5.  
  6. ordenar(ptrV, elementos);
  7. mostrar(ptrV, elementos);
  8.  
  9. cl = clock() - cl;
  10.  
  11. printf("\n\n %lu", (cl*1000)/CLOCKS_PER_SEC);
  12.  
  13. return 0;
  14. }
Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #11 en: 5 Abril 2016, 00:00 am »

No, el resultado está en milisegundos. Deduzco que por alguna razón te está saliendo un número negativo en la operación "cl = clock() - cl;", pero al interpretar ese número negativo como un entero sin signo, te sale ese número. Si en vez de mostrarlo como un entero sin signo lo mostraras con signo, te saldría -97 ms...

No sé por qué razón te sale un tiempo negativo... Prueba a compilar con otro compilador. Yo he compilado el código tal y como tu lo tienes y me salen resultados coherentes...


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #12 en: 5 Abril 2016, 18:56 pm »

Hola.
Bueno a pesar de no lograr el cometido porque realmente todas las pruebas que hice no me dieron resultdo, encontré una aplicación utilizando la librería windows.h  que funciona muy bien, me gustaría colgarla aquí, pero como no conozco si es legal esto de sacar programas de una página y copiarlo en otra mejor lo dejamos ahí. -
Lo que quiero consultarles concretamente es ¿es posible generar números aleatorios sin que se repitan?  o la única manera es por cada número generado verificar si ya se encuentra en el arreglo. -

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5.  
  6. void llenar( size_t *ptrNumeros );
  7. void ordenar( size_t *ptrNumeros );
  8. void mostrar( size_t *ptrNumeros );
  9. #define TAM 102
  10.  
  11. int main( int argc, char *argv[] ){
  12. size_t numeros[TAM], *ptrNumeros = numeros;
  13.  
  14. llenar( ptrNumeros );
  15. ordenar( ptrNumeros );
  16. mostrar( ptrNumeros );
  17.  
  18. return 0;
  19. }
  20.  
  21. void llenar( size_t *ptrNumeros ){
  22. size_t hora = time(NULL), i;
  23. srand(hora);
  24.  
  25. for(i = 0; i < TAM; i++){
  26. *(ptrNumeros + i) = rand()% 100 + 200;
  27. }
  28. }
  29.  
  30. void ordenar( size_t *ptrNumeros ){
  31. size_t i = 0, tmp = 0;
  32.  
  33. while(1){
  34. if( *( ptrNumeros+i) >  *(ptrNumeros+(i+1)) ){
  35. tmp = *(ptrNumeros+i);
  36. *(ptrNumeros+i) = *(ptrNumeros+(i+1));
  37. *(ptrNumeros+(i+1)) = tmp;
  38. }
  39. if( i+1 == TAM ){
  40. if( tmp == 0) break;
  41. else{tmp = 0; i = -1;}
  42. }
  43. i++;
  44. }
  45. }
  46.  
  47. void mostrar(size_t *ptrNumeros){
  48. size_t i;
  49.  
  50. for( i = 0; i < TAM; i++ ){
  51. if( i%10 == 0 ) printf( "\n" );
  52. printf( " %u", *(ptrNumeros+i) );
  53. }
  54. }

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #13 en: 6 Abril 2016, 00:27 am »

Podrías generar un número aleatorio guardado en el primer elemento, y cuando calcules un número aleatorio en el segundo, si este es igual al primero, generas otro número aleatorio, y así para todas las posiciones del arreglo. Es una solución relativamente sencilla, pero no sé si será la mejor porque dependes de que te salga un número aleatorio diferente (saldrá, pero no sé después de cuántas ejecuciones)
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #14 en: 6 Abril 2016, 00:52 am »

Hola, amigo.
Te dejo la manera que lo hice, no tarda tanto en aparecer los 100 números, Parece ser lo que me propones.

Código
  1. void llenar( size_t *ptrNumeros ){
  2. size_t hora = time(NULL), i, tmp, ok = 0;
  3. srand(hora);
  4.  
  5. for(i = 0; i < TAM; i++){
  6. do{
  7. tmp = rand()% 999 + 1 ;
  8. ok = verifica( ptrNumeros, tmp );
  9. }while(ok);
  10. *( ptrNumeros + i ) = tmp;
  11. }
  12. }
  13.  
  14. int verifica( size_t *ptrNumeros, size_t tmp ){
  15. size_t i, stop = 0;
  16.  
  17. for( i = 0; i < TAM; i++ ){
  18. if( *( ptrNumeros + i) == tmp )
  19. stop = 1;
  20. }
  21.  
  22. return stop;
  23. }

Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #15 en: 6 Abril 2016, 01:16 am »

Con el problema de contar los tiempos: yo he terminado de hacer este programa y me cuenta hasta los microsegundos.

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. int main() {
  5.    time_t c=clock();
  6.    long unsigned j = 1;
  7.  
  8.    for(long unsigned i = 0; i < 1000000000; ++i) {
  9.        if(i == j) {
  10.            printf("t(%lu) = %f\n", j, (clock() - c)*1.0/CLOCKS_PER_SEC);
  11.            j *= 10;
  12.        }
  13.    }
  14.    printf("t(%lu) = %f\n", j, (clock() - c)*1.0/CLOCKS_PER_SEC);
  15.  
  16.    return 0;
  17. }
En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #16 en: 6 Abril 2016, 01:59 am »

Hola : NOB2014

Tu código parase que ya funciona solo mencionaria unos detalles

Ejemplo esta linea:
Código
  1. size_t numeros[TAM], *ptrNumeros = numeros;

No es necesario crear un arreglo y luego asignárselo a un puntero. Si por ejemplo lo vas a pasar por parametro a una funcion, el cual esta declarado de esta forma:

Código
  1. void llenar( size_t *ptrNumeros )
basta con ponerlo directamente al final de cuentas un arreglo es una estructura que apunta a una dirección en resumen es un puntero

Ejemplo:

Código
  1. size_t numeros[TAM]
  2. llenar( numeros );

Otro detalle, este ya es en gustos, te aconsejaría remplazar esta forma de asignar el arreglo:
Código
  1. *(ptrNumeros + i) = rand()% 100 + 200;
Y recomendaría mejor esta:

Código
  1. ptrNumeros[i]= rand()% 100 + 200;

Las dos formas funcionan igual pero, la segunda forma hace tu código mas legible, y se hace mas a relucir cuando se aumenta el tamaño y complejidad del proyecto


Espero mis comentarios no se tomen a mal
Salutos....
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #17 en: 6 Abril 2016, 15:23 pm »

Hola.
MAFUS, te dejo una captura para que me digas que es lo que estoy leyendo, segundos, milesegundos. -



crack81, muchas pero muchas gracias por esas sugerencias no tenes una idea como se agradece de este lado, no obstante (como lo aclare al principio) lo hice con punteros porque estoy estudiando justamente punteros y estaba practicando. -

Un abrazo y muchas gracias por el tiempo que le dedicaron al tema. -
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #18 en: 6 Abril 2016, 15:39 pm »

Solo es cuestión de observación. ¿Estás usando cl/CLOCKS_PER_SEC o (cl*1000)/CLOCKS_PER_SEC? Si estás usando la primera opción, son segundos (te lo dice CLOCKS_PER_SEC), pero si estás usando la segunda  opción estás viendo milisegundos, porque estás multiplicando los segundos por 1000.
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Medir velocidad de ejecución de un programa en lenguaje C.-
« Respuesta #19 en: 6 Abril 2016, 15:40 pm »

La unidad es el segundo: 1.000000 es 1 segundo.
En línea

Páginas: 1 [2] 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Medir la velocidad de descarga del winsock
Programación Visual Basic
Jeronimo17 6 2,145 Último mensaje 20 Diciembre 2006, 02:07 am
por Jeronimo17
Aplicacion Medir Velocidad
Programación Visual Basic
Zorrohack 2 1,758 Último mensaje 21 Enero 2008, 01:51 am
por Syddhartha
Medir el tiempo de una rutina en lenguaje C.
Programación C/C++
NOB2014 2 3,462 Último mensaje 3 Septiembre 2014, 19:35 pm
por NOB2014
medir el tiempo de ejecución en C
Programación C/C++
fafafa01 2 29,528 Último mensaje 14 Diciembre 2016, 02:44 am
por kraiked
Windows reduce velocidad de ejecucion. « 1 2 3 »
Programación General
Usuario887 25 14,328 Último mensaje 29 Octubre 2021, 11:32 am
por Usuario887
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines