Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GominaTilted en 13 Octubre 2018, 12:08 pm



Título: Ayuda con temporizador
Publicado por: GominaTilted en 13 Octubre 2018, 12:08 pm
Buenas, en uno de los ejercicios que tengo que hacer para clase, se pide realizar un temporizador. Es decir, el usuario introduce la hora actual, y los segundos que quiere añadir, y el programa debe de mostrar correctamente las hora que será pasados esos segundos. No tengo ni idea de cómo. No quiero que nadie me diga el código, simplemente una pista para poder sacarlo por mí mismo. Muchas gracias.


Título: Re: Ayuda con temporizador
Publicado por: EdePC en 13 Octubre 2018, 14:57 pm
Saludos,

- Depende de la temática de tu ejercicio, si estás en Algoritmos lo correcto sería utilizar conversiones; si estás en Programación utilizando librerías, entonces lo correcto sería utilizar librerías de tratamiento de fechas/horas.

- Supongo que estás tratando con ejercicios de Algoritmos, entonces has conversiones:

-- Aunque también depende algo del formato de las fechas/horas que vas a utilizar, por ejemplo si la hora dada es: 13:20:23 tomas las horas (13) las pasas a una unidad base por ejemplo segundos: 13 * 3600 = 46800, lo sumas con los minutos convertidos: 20 * 60 = 1200, y a la vez lo sumas con los segundos, quedando: 46800 + 1200 + 23 = 48023 segundos.

-- Para finalizar sumas tus segundos obtenidos con los segundos dados, suponiendo que los segundos dados son 500, entonces: 48023 + 500 = 48523.

-- Listo ahora haces el inverso:

--- Horas = 48523 / 3600 = 13; residuo = 1723
--- Minutos = 1723 / 60 = 28; residuo = 43
--- Segundos = 43

-- Quedando: 13:28:43

- Hay varias maneras, otra podría ser el convertir los segundos dados a horas, minutos y segundos, para luego sumarlos a las horas, minutos y segundos dados al inicio.

- No le veo mucho parecido a un temporizador, a no ser que no lo haya entendido bien...  :xD


Título: Re: Ayuda con temporizador
Publicado por: GominaTilted en 13 Octubre 2018, 19:41 pm
Saludos,

- Depende de la temática de tu ejercicio, si estás en Algoritmos lo correcto sería utilizar conversiones; si estás en Programación utilizando librerías, entonces lo correcto sería utilizar librerías de tratamiento de fechas/horas.

- Supongo que estás tratando con ejercicios de Algoritmos, entonces has conversiones:

-- Aunque también depende algo del formato de las fechas/horas que vas a utilizar, por ejemplo si la hora dada es: 13:20:23 tomas las horas (13) las pasas a una unidad base por ejemplo segundos: 13 * 3600 = 46800, lo sumas con los minutos convertidos: 20 * 60 = 1200, y a la vez lo sumas con los segundos, quedando: 46800 + 1200 + 23 = 48023 segundos.

-- Para finalizar sumas tus segundos obtenidos con los segundos dados, suponiendo que los segundos dados son 500, entonces: 48023 + 500 = 48523.

-- Listo ahora haces el inverso:

--- Horas = 48523 / 3600 = 13; residuo = 1723
--- Minutos = 1723 / 60 = 28; residuo = 43
--- Segundos = 43

-- Quedando: 13:28:43

- Hay varias maneras, otra podría ser el convertir los segundos dados a horas, minutos y segundos, para luego sumarlos a las horas, minutos y segundos dados al inicio.

- No le veo mucho parecido a un temporizador, a no ser que no lo haya entendido bien...  :xD
Muchas gracias, ya lo tengo. Al final lo he hecho así: 
Código:
#include <windows.h>
#include <math.h>
#include <iostream>
using namespace std;

int main()
{
unsigned short hora0;
unsigned short minutos0;
unsigned short segundos0;
unsigned int segundos_add;
unsigned short horas1;
unsigned short minutos1;
unsigned short segundos1;

cout << "Este programa implementa un temporizador que determina la hora que sera dentro de x segundos " << endl;
cout << "a partir de la hora introducida por el usuario." << endl << endl;
cout << "Dame la hora actual:" << endl;
cout << "Hora: ";
cin >> hora0;
cout << "Minuto: ";
cin >> minutos0;
cout << "Segundo: ";
cin >> segundos0;
cout << endl;
cout << "Dame los segundos a anadir: ";
cin >> segundos_add;

segundos1 = segundos0 + segundos_add;
minutos1 = minutos0 + segundos1 / 60;
segundos1 = segundos1 % 60;
horas1 = hora0 + minutos1 / 60;
minutos1 = minutos1 % 60;
horas1 = horas1 % 24;

cout << horas1 << ":" << minutos1 << ":" << segundos1;


return 0;
}

Otra duda que me surge (aunque no aparezca en este ejercicio), es si las constantes es mejor declararlas dentro de main o fuera. Es que me han dejado muy claro que de momento no podemos usar variables globales (solo en casos muy puntuales en los siguientes cursos del grado), pero no han mencionado nada de las constantes. Obviamente le preguntaré al profesor, pero opiniones nunca sobran.


Título: Re: Ayuda con temporizador
Publicado por: MAFUS en 13 Octubre 2018, 20:37 pm
Eso es cuestión de diseño: si el dato de la constante lo va a usar una sola función declárala en la función, pero si va a ser un dato usado en diferentes funciones porque forma parte intrínseca el programa hazla global; ir pasándola por argumento a las diferentes funciones si no va a cambiar de valor pues es una pérdida de tiempo de procesador y memoria.