/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Error con funcion de tiempo en C

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
mnv_19



Registrado: 02 Sep 2007
Mensajes: 6

MensajePublicado: 20/02/2008 9:41 am
Título: Error con funcion de tiempo en C

Hola a todos, tengo que hacer un problema que me resuelva el problema de las torres de hanoi tanto de forma recursiva como iterativa, y al fianl del programa me tiene que mostrar el tiempo de cada una de ellas en milisegundos, el problema es que me muestra 0 en los dos, y creo que tiene que estar algo mal. Mas o menos tengo esto:
Código:

#include <unistd.h>
#include <sys/times.h>
main(){
   fpila *ini,*tmp,*final;
   fpila *pilaaux;
   struct tms inicio,fin; //para almacenar el tiempo
  int numdiscos, i,tiempo,tiempo2;
  //inicializo las pilas
  //pido el numero de discos
  //creo los nodos de las pilas
  time(&inicio); //tiempo que tarda inicio
   hanoi(numdiscos,&ini,&tmp,&final);//funcion hanoi de forma recursiva
  time(&fin);
  tiempo=(fin.tms_utime-inicio.tms_utime);
  printf("Funcion T.Hanoi,forma recursiva ha tardado %d, segundos \n",tiempo);
  ...
  ...
  time(&inicio);
  for(i=numdiscos;i>0;i--){
    pilaaux=CNodo(i);
    push(&ini,pilaaux);
   }
  hanoiIterativo(numdiscos,&ini,&tmp,&final);
  time(&fin);
  tiempo2=(fin.tms_utime-inicio.tms_utime);
  printf("RESULTADOS DE LA PILA FINAL\n");
  mostrar(&final);
  printf("El tiempo con la solucion iterativa es de: %d segundos\n",tiempo2);
  sleep(3);
  system("clear");
  printf("POR LO TANTO LOS RESULTADOS OBTENIDOS SON:\n");
  printf("LA FUNCION T.HANOI FORMA RECURSIVA -> %d segundos\n",tiempo);
  printf("LA FUNCION T.HANOI FORMA ITERATIVA -> %d segundos\n",tiempo2);




ME PODEIS AYUDAR??
GRACIAS UN SALUDO!!!
Volver arriba
mamntc02



Registrado: 30 Abr 2007
Mensajes: 399

MensajePublicado: 21/02/2008 1:18 am
Título:

Hola,

Deberías indicar q lenguaje (supongo q C) y q plataforma usas (Linux, Solaris, ...).

Por otro lado, el código te compila? Es q hay cosas q no me cuadran. time() es una función q se encuentra en <time.h> y devuelve el tiempo en segundos. No obstante, no usa como parámetro una estructura tms, sino un puntero a time_t, q suele estar definido como un long. Hay una función q sí usa esa estructura: es times, no obstante su uso creo q es más completo, aunque no la he usado nunca. Por lo q he entendido almacena los tiempos del proceso padre e hijo en curso, en caso de haberlo. Puedes ver como se usa en este ejemplo.
No obstante yo intentaría usar funciones más "estándar" como time(), ftime() (ftime creo q no forma parte del estandar de C, pero la mayoría de implementaciones acostumbran a incluirla), q són más q suficientes para calcular en tiempo en segundos. ftime además llega hasta los milisegundos.

Saludos
Volver arriba
mnv_19



Registrado: 02 Sep 2007
Mensajes: 6

MensajePublicado: 21/02/2008 8:11 am
Título:

El lenguaje es C, y estoy utilizando Mandriva, me compila y ejecuta lo unico que no me hace es mostrarme el tiempo correcto porque de los dos me muestra 0


Como se haria entonces??gracias, un saludo
Volver arriba
mamntc02



Registrado: 30 Abr 2007
Mensajes: 399

MensajePublicado: 21/02/2008 8:54 am
Título:

En mi vida lo había oído Wink Me imagino q es una distribución de Linux, no? Igualmente sigo sin entender q te compile, y menos q te funcione. Quizá usas alguna otra especificación q desconozco, pero como puedes ver en el ejemplo q te pasé, los usos de la función time y la estructura tms no acaban de cuadrar.

Bueno, a lo q íbamos... por ejemplo:
Código:
int main(){
   
   time_t tIni, tFin;
   tIni = tFin = 0;
   
   tIni = time(NULL);
   Sleep(4000);
   tFin = time (NULL);
   
   printf("Han pasado %lf segundos\n", difftime(tFin, tIni));
   
   return 0;
}

Nota: ten en cuenta q el ejemplo lo he compilado en Windows, ya q es en lo q curro, y es por eso el uso de Sleep(4000) q trabaja en milisegundos, en tu caso deberías tener la función sleep de <unistd.h>, la cual trabaja en segundos. Por lo demás no te deberías preocupar pq es estándar.

Saludos.
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com