Jump to content

Conversor de Horas


BFerDz

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
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
×
×
  • Create New...

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.