Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - NOB2014

#1
Hola a todos.
El juego se llama Quini6 y es de Argentina, hay que asertar 6 números que van del 00 al 45.-
Lo que quiero saber es si se puede ir ordenando los números mientras se  generan, tengo claro que en este caso que itera sólo 6 veces no se va a notar la diferencia al hacerlo de esta manera o ordenarlo en otro bucle, pero deseo saber cómo hacerlo para medirlo en una generación por ejemplo de 500.000 números.-

Código: c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void generar();

int main(void){
generar();

return 0;
}

void generar(){
int guardar[6], numero=0, i=0, hora = time(NULL);
srand(hora);

for(; i<6; i++){
numero = rand()%46;
guardar[i] = numero;
}
}
   


Gracias y muchos saludos.
Daniel   
#2
Hola S t Ø r M d ∆ r k
Gracias por el código, gracias por tu tiempo.-
Ahora me surge la duda de la gran imprecisión que tiene la función clock() y que todo el mundo menciona, el código que dejo a continuación demuestra que no hay ninguna diferencia utilizando time.h y windows.h, tienen alguna experiencia al respecto, o algo que me clarifique el panorama ?.-
Me puse un poco celoso cuando comprobé la velocidad de tu maquina.-   



Código: c
#include <stdio.h>
#include <time.h>
#include <windows.h>

double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b);

int main(int argc, char *argv[]){
LARGE_INTEGER t_ini, t_fin;
double secs;
int i=0;
QueryPerformanceCounter(&t_ini);
clock_t start = clock();
printf("\n Para contar de 0 a 300.000.000 esta maquina tarda...");
while(i < 300000000){
i++;
}
printf("\n\n Utilizando time.h......: %f segundos",
  ((double)clock() - start) / CLOCKS_PER_SEC);

QueryPerformanceCounter(&t_fin);
secs = performancecounter_diff(&t_fin, &t_ini);
printf("\n\n Utilizando windows.h...: %.16g milisegundos\n", secs * 1000.0);

  return 0;
}

double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b){
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
return (double)(a->QuadPart - b->QuadPart) / (double)freq.QuadPart;
}

   
Saludos.
Daniel
#3
CitarEsperamos verte seguido por aquí...
Me encantaría, más que nada porque vos y Jimeno han puesto mucha voluntad para ayudarme y eso se agradece muchísimo, sólo que si no encuentro a alguien que pueda ayudarme en C, dudo mucho que nos sirva
(a mí y al foro), de cualquier manera la próxima duda que tenga me tendrán por aquí.-
   
Saludos y un gran abrazo para todos.
Daniel
#4
Hola fermino.
CitarSino pásate por el chat (IRC), tal vez haya alguien ahí.
No es mi fuerte, no tengo ni idea que es el IRC.-
Jimeno, es la misma página que yo cité en mi primer código, lo descarté por lo que dice el autor en la misma.-
Muchas gracias a los 2, seguiré investigando.- 

Saludos.
Daniel
#5
Hola fermino.
Que mala onda, ¿debo suponer que nadie de este foro sabe programar en C.?


Saludos.
Daniel
#6
Hola fermino.
En primer lugar un gustazo y espero tener una buena estadía en este foro, lo digo porque soy un "adicto" a preguntar en ellos.-
En cuanto al código lo voy a probar, sólo que leí que clock() tiene muy poca precisión, igual lo voy a correr para ver el resultado.-   

Saludos.
Daniel
#7
Hola a todos.
CitarHago esta aclaración porque en muchos casos suponen que tengo 15 o 20 años(es lo lógico) y en realidad tengo 62, como comprenderán no voy a la facultad y la gente que conozco no tiene la más mínima idea lo que es la computadora y menos programar, aprendo todo desde un manual y la generosidad de Uds..-

El enunciado del manual es el siguiente.-



Código: c
//http://dacap.com.ar/blog/cpp/medir-el-tiempo-de-una-rutina/
#include <stdio.h>
#include <windows.h>

/* retorna "a - b" en segundos */
double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b){
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
return (double)(a->QuadPart - b->QuadPart) / (double)freq.QuadPart;
}

int main(int argc, char *argv[]){
int contador=0;
LARGE_INTEGER t_ini, t_fin;
double secs;

QueryPerformanceCounter(&t_ini);
while(contador <= 300000000){
contador++;
if(contador % 100000000 == 0){
QueryPerformanceCounter(&t_fin);
secs = performancecounter_diff(&t_fin, &t_ini);
printf("%.16g milliseconds\n", secs * 1000.0);
QueryPerformanceCounter(&t_ini);
}
}
 
getchar();
return 0;
}



El programa que logré a partir de los ejemplos de la página me funciona correctamente (por lo menos es lo que a mí me parece) lo que pasa es que no entiendo casi ninguna línea (creo que tiene que ver con las API's de windows), la pregunta es ¿alguien me puede decir si se puede lograr lo mismo con con un programa en C puro?, de ser así ¿podrian poner algún ejemplo?.-

Saludos.
Daniel