Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
BFerDz

Conversor de Horas

Recommended Posts

BFerDz

Ando a fazer conversor de horas para minutos e segundos, ainda estou de inicio.

Queria fazer depois também ao contrario.

E vou acresentar dias/semanas/meses/anos.

E também tenho dúvidas, como é que faço isso dos meses porque nem todos tem os mesmos dias.

#include <stdio.h>
long int num (int n_horas, char tipo)
{
switch (tipo)
{
case 'h' : return n_horas; break;
case 'm' : return n_horas * 60L; break;
case 's' : return n_horas * 3600L; break;
default : return -1;
}
}
int main ()
{
int n;
char tipo;
do
{
	printf ("\nIntroduza o numero de horas ('0' para sair) : "); scanf ("%d", &n);
	printf ("\nIntroduza o tipo de conversao (h-horas, m-minutos, s-segundos)"); fflush (stdin) ; scanf ("%c", &tipo) ;
	printf ("\nNum de %c em %d horas-> %ld", tipo,n,num (n, tipo)) ;
}
while (n!=0);
return 0;
}

Está-me a dar uma branca, eu agora quero covnerter para dias, só que não me estou a lembrar como deve de ser, queria do género 24 horas >= faz um 1 dia, eu meti foi 24 era um dia mas se meter 2 horas da-me 48 horas em dias

Share this post


Link to post
Share on other sites
BFerDz

Eu sei, mas depois tentei aqui no programa e não actualizei este aqui.

Agora ando a ver através do <time.h> porque também dá e julgo ser mais facil, se alguém tiver uma ideia diga .

Share this post


Link to post
Share on other sites
BFerDz

Mudifiquei umas coisas, mas neste caso estou a fazer mal, porque estou a converter de horas para o resto, segundos, minutos, dias, semanas, meses e anos.

{
case 'h' : return n_horas; break;
case 'm' : return n_horas * 525960L; break;
case 's' : return n_horas * 3,155760e7L; break;
case 'd' : return n_horas * 365.25L; break;
case 'w' : return n_horas * 52,17857L; break;
case 'k' : return n_horas * 12L; break;
case 'a' : return n_horas * 1L; break;
default : return -1;

Isso é considerado 1 anos os número que meti ali, só que estou a fazer mal.

w é semanas, k meses, a anos.

HELP.

é que estou mesmo breakado.

Share this post


Link to post
Share on other sites
TheDark

O L no final do número significa long. Não faz sentido utilizá-lo em valores com vírgula flutuante. E a parte inteira divide-se da parte real com . em vez de ,

Para converteres de horas para:

- dias, divides por 24;

- meses, divides por 24*30, já que é habitual considerar que um mês tem 30 dias. Só se fores contar o tempo a partir de uma data específica é que podes utilizar o número de dias específico de um mês;

- anos, divide por 365*24. Mais uma vez, só sabendo a data exacta é que podes descobrir se um ano é bissexto ou não.


Desaparecido.

Share this post


Link to post
Share on other sites
BFerDz

O L no final do número significa long. Não faz sentido utilizá-lo em valores com vírgula flutuante. E a parte inteira divide-se da parte real com . em vez de ,

Para converteres de horas para:

- dias, divides por 24;

- meses, divides por 24*30, já que é habitual considerar que um mês tem 30 dias. Só se fores contar o tempo a partir de uma data específica é que podes utilizar o número de dias específico de um mês;

- anos, divide por 365*24. Mais uma vez, só sabendo a data exacta é que podes descobrir se um ano é bissexto ou não.

Ok, vou fazer isso, pois eu cheguei a tirar o L nas outras tentativas etc.

Vou testar algumas coisas.

Share this post


Link to post
Share on other sites
BFerDz

Isto ou sou eu que estou bastante mal é que BAH! Deverá ter sido do pai natal.

meti assim agora:

case 'h' : return n_horas; break;
case 'm' : return n_horas * 60L; break;
case 's' : return n_horas * 3600L; break;
case 'd' : return n_horas * 24L; break;
case 'w' : return n_horas * 7L; break;
case 'k' : return n_horas * 12L; break;
case 'a' : return n_horas * 1L; break;
default : return -1;
}

Se eu fizer conver 1 hora em mês dá-me 12 no resultado.

Porque eu estou a converter de horas para o resto.

É parecido a isto que quero fazer: http://www.convertworld.com/pt/tempo/Horas.html

Share this post


Link to post
Share on other sites
TheDark

Estás a baralhar as contas, se só queres converter horas para as outras unidades.

O que estás a dizer é:

case 'h' : return n_horas; break;         // 1 hora tem 1 hora: correcto
case 'm' : return n_horas * 60L; break;   // 1 hora tem 60 minutos: correcto
case 's' : return n_horas * 3600L; break; // 1 hora tem 3600 segundos: correcto
case 'd' : return n_horas * 24L; break;   // 1 hora tem 24 dias: incorrecto, devias dividir em vez de multiplicar
case 'w' : return n_horas * 7L; break;    // 1 hora tem 7 semanas: incorrecto, devias dividir por (7*24) -> 7 dias com 24 horas
case 'k' : return n_horas * 12L; break;   // 1 hora tem 12 meses: incorrecto, devias dividir por (30*24) -> 30 dias com 24 horas
case 'a' : return n_horas * 1L; break;    // 1 hora tem 1 ano: incorrecto, devias dividir por (365*24) -> 365 dias com 24 horas
default : return -1;

Depois disto, para converteres segundos, minutos, dias, etc em horas é dividir onde multiplicas, e multiplicar onde divides.


Desaparecido.

Share this post


Link to post
Share on other sites
BFerDz

Já está  :cheesygrin:

Pareço um maluco a festejar, ontem matei-me a pensar que já não podia ver isto a frente, e depois também percebi o teu post mas com dificuldade.

Sou m burro.

Já meto o projecto final.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.