/
Inicio :: Foros

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

cronometro en C

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Energy



Registrado: 10 Feb 2005
Mensajes: 26

MensajePublicado: 04/04/2005 6:21 pm
Título: cronometro en C

lo q necesito es una pekeña idea de como hacer un cronometro en C ..
tengo varias ideas en mente con ciclos y delays pero no esta de mas recivir mejores ideas .....
cualkier aportacion es buena gracias !!!! Very Happy
Volver arriba
Luis_Cervantes



Registrado: 18 Abr 2005
Mensajes: 37
Ubicación: México DF

MensajePublicado: 19/04/2005 7:48 am
Título:

Mi amigo, un cronometro digital es mucho mas facil de lo que crees!!!
Necesitas 3 variables:

int hora, minuto, segundo;

Ahora primero empieza el sugundo a incrementarse en una unidad, al llegar a 60, se incrementa el minuto una unidad y el segundo vuelve a cero. Cuando el minuto llegue a 60, se incrementa hora y el minuto se posiciona nuevamente en 0. No es asi?

hora=minuto=segundo=0;
//bucle infinito.
for(;Wink {
if(segundo==60) { minuto++; segundo=0; }
if(minuto==60) { hora++; minuto=0; }
if(hora==24) hora=0;
//Ya nada mas despliegas aqui las horas, minutos y segundos ok?
sleep(1); //esta funcion esta en dos.h y provoca un retardo de un seg.
}

Y ahi lo tienes, un cronometro digital muy rudimentario, si le quieres agragar mas cosas se las agragas, si no, pue ni modo.
Por cierto tambien puedes construir un contador de cuentra regresiva(timer).
Bien bye!!! Cool
Volver arriba
Luis_Cervantes



Registrado: 18 Abr 2005
Mensajes: 37
Ubicación: México DF

MensajePublicado: 19/04/2005 7:52 am
Título:

OOPSS!! Perdona, se me paso algo:

Dentro del bucle infinito, tienes que incrementar la variable segundo.

for(;Wink{
segundo++;
//Aqui va lo que ya te habia dicho
}

Ahora si!!!
Volver arriba
juanel



Registrado: 24 Ene 2005
Mensajes: 236

MensajePublicado: 19/04/2005 1:35 pm
Título:

hola, interesado en este post, probe el codigo del cronometro y no me anda porque sleep no esta definida.

Código:
#include <conio.h>
#include <dos.h>
#include <stdio.h>

int main()
{
    int segundos, minutos, horas;
   
    segundos = minutos = horas = 0;
    for(;;)
    {
        if(segundos == 60) {minutos++, segundos = 0;}
        if(minutos == 60) {horas++, minutos = 0;}
        printf("%dh  %d'  %d", horas, minutos, segundos);
        segundos++;
        sleep(1);
    }
    return 0;
}       


uso dev-c++ y windows, me interes saber si hay otra funcion que se igual a sleep pero que sea de ANSI C. Me interesa aprender c estandar.

SAludos Cool
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 4581
Ubicación: Mexico

MensajePublicado: 19/04/2005 2:36 pm
Título:

La biblioteca estandard de C no incluye una funcion de ese tipo. Lo que si puedes hacer en MS Windows es utilizar la funcion Sleep.

Los cambios que se tendrian que hacer al programa son todos menores:

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

int main(void)
{
   int segundos, minutos, horas;
   
   segundos = minutos = horas = 0;
   while (minutos < 2){
      if (segundos == 60){
         minutos++;
         segundos = 0;
      }
     
      if (minutos == 60){
         horas++;
         minutos = 0;
      }
     
      printf("%02d:%02d:%02d\n", horas, minutos, segundos);
      Sleep(1000);
      segundos++;
   }
   
   return EXIT_SUCCESS;
}


Para crear un programa similar utilizando solo C estandard se tiene que tomar una aproximacion bastante diferente:

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

int main(void)
{
   time_t t1, t2;
   double diferencia = 0;
   
   int minutos;
   int segundos = 0;
   int temp;
   
   t1 = time(NULL); /* obtener tiempo 1 */
   
   while (diferencia < 120 ){
      t2 = time(NULL); /* obtener tiempo 2 */
     
      diferencia = difftime(t2, t1);
      minutos = diferencia / 60.0;
      segundos = diferencia - minutos * 60;
     
      if (temp != segundos){ /* ha transcurrido un segundo */
         temp = segundos; /* guarda el valor previo */
         printf("%02d:%02d\n", minutos, segundos);
      }
   }
   
   return EXIT_SUCCESS;
}


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
juanel



Registrado: 24 Ene 2005
Mensajes: 236

MensajePublicado: 19/04/2005 4:18 pm
Título:

gracias me funciona perfectamente, pero no entiendo muy bien como funciona. No entiendo mucho sobre las variables de time_t y time(NULL) y muchas de esas cosas. Puedes explicarme un poco como funciona tu programa?? PLEASE

SAludos Cool
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 4581
Ubicación: Mexico

MensajePublicado: 20/04/2005 6:23 am
Título:

Bueno, veamos si puedo explicarlo bien ...

Para obtener la fecha del sistema utilizamos la funcion time, esta devuelve la fecha actual como un valor de tipo time_t. Esta funcion no parece muy util pero podemos utilizar su valor de retorno en otras funciones de la biblioteca time, por ejemplo para imprimir la fecha podemos utilizar:
Código:
time_t fecha;
char *cadena;

/* obtener la fecha del sistema */
fecha = time(NULL);

/* en base al valor devuelto de tipo time_t */
/* obtener una representacion en cadena     */
cadena = ctime(&fecha);

/* imprimir la fecha del sistem */
printf("La fecha es %s\n", cadena);


La funcion difftime calcula la diferencia entre dos fechas (de tipo time_t) y devuelve un valor de tipo double que es la diferencia entre estas en segundos.

En el segundo programa el numero de minutos se calcula diviendo la diferencia en segundos entre 60:
Código:
diferencia = difftime(t2, t1);
minutos = diferencia / 60.0;


y el numero de segundos es el resto (diferencia - minutos):
Código:
segundos = diferencia - minutos * 60;


Hay otras funciones interesantes en la biblioteca time, una referencia en linea sobre esta biblioteca la puedes encontrar en esta pagina (en ingles).

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
juanel



Registrado: 24 Ene 2005
Mensajes: 236

MensajePublicado: 20/04/2005 7:20 am
Título:

buenisismo, lo entendi!!

SAludos Cool
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
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