| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Energy
Registrado: 10 Feb 2005 Mensajes: 26
| Publicado: 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 !!!!  |
|
| Volver arriba | |
 |
Luis_Cervantes

Registrado: 18 Abr 2005 Mensajes: 37 Ubicación: México DF
| Publicado: 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(; { 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!!!  |
|
| Volver arriba | |
 |
Luis_Cervantes

Registrado: 18 Abr 2005 Mensajes: 37 Ubicación: México DF
| Publicado: 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(; { segundo++; //Aqui va lo que ya te habia dicho }
Ahora si!!! |
|
| Volver arriba | |
 |
|
juanel
Registrado: 24 Ene 2005 Mensajes: 236
| Publicado: 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  |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 4581 Ubicación: Mexico
| Publicado: 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
| Publicado: 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  |
|
| Volver arriba | |
 |
|
rir3760

Registrado: 01 Oct 2004 Mensajes: 4581 Ubicación: Mexico
| Publicado: 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
| Publicado: 20/04/2005 7:20 am | | | Título: |
| buenisismo, lo entendi!!
SAludos  |
|
| Volver arriba | |
 |
|
|