Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

BFerDz

Conversor de Horas

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 .

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.