ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

1. ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Hendrius Felix
uende1_

(usa Outra)

Enviado em 07/04/2018 - 18:54h

"Escreva um programa que converta um intervalo de tempo dado em minutos, em horas, minutos e segundos. Exemplo: Se o tempo dado for: 145,87 min, o programa deve fornecer= 2h, 25min, 52,2s."



Eu escrevi esse programa:


#include <stdio.h>

int main()
{
float segundos, tempo, minutos, horas;
printf("Coloque o valor em minutos: ");
scanf("%f", &tempo);

horas= tempo/60;
minutos= tempo-(horas*60);
segundos= (tempo*60)-(horas*3600)-(minutos*60);

printf("%fh, %fmin, %fs", horas, minutos, segundos);
}

E quando coloco o valor "145,87" para testar, sai o resultado de 2h, 25min, 0s



Alguem pode ajudar??


  


2. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/04/2018 - 23:52h

Você quer que horas e minutos guardem apenas valores inteiros, certo?

Então diga isso ao programa.

E não esqueça de colocar uma marca de fim de linha após imprimir o resultado.


3. ?

Hendrius Felix
uende1_

(usa Outra)

Enviado em 07/04/2018 - 23:59h

Pode ser mais especifico?


4. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/04/2018 - 00:47h

Você não quer que horas e minutos tenham apenas valores inteiros? Se quer — e eu garanto a você que você deveria querer —, não consegue pensar numa maneira de forçar as variáveis a ter apenas valores inteiros, em vez de deixar que ela possa ter valores fracionários?

E quanto à marca de fim de linha, refiro-me, obviamente, a colocar um “\n” ao final da string de formatação do último printf().


5. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Cabreuvas
Cabreuvas

(usa Debian)

Enviado em 08/04/2018 - 01:50h

Eu havia testado o programa com valores int para horas e minutos. Parece que há alguma dificuldade em calcular os segundos.


6. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/04/2018 - 02:11h

Cabreuvas escreveu:

Eu havia testado o programa com valores int para horas e minutos. Parece que há alguma dificuldade em calcular os segundos.


Com valores inteiros ou com variáveis declaradas como inteiras? E se forem variáveis, quais foram elas? Apenas duas delas poderiam ser inteiras, as outras duas têm de ser em ponto flutuante, pois o exemplo mesmo mostra valores fracionários para elas.


7. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Cabreuvas
Cabreuvas

(usa Debian)

Enviado em 08/04/2018 - 02:30h

Foram variáveis declaradas como inteiros, e sim, eu deixei o tempo e os segundos como float, porém o resultado continua 0 para os segundos.


8. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/04/2018 - 03:05h

Pela sua descrição, nós dois teríamos feito a mesma alteração sobre o programa original. Contudo, seus resultados são bem diferentes dos meus, o que indica que certamente não foi o que aconteceu.

Você pode mostrar seu programa?


9. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Cabreuvas
Cabreuvas

(usa Debian)

Enviado em 08/04/2018 - 03:18h

#include <stdio.h>

int main()
{
float tempo, segundos;
int minutos, horas;
printf("Coloque o valor em minutos: ");
scanf("%f", &tempo);

horas= tempo/60;
minutos= tempo-(horas*60);
segundos= (tempo*60)-(horas*3600)-(minutos*60);

printf("\n%ih, %imin, %fs\n", horas, minutos, segundos);
return 0;
}


Mais ou menos isso?


10. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/04/2018 - 03:31h

Nossos programas estão muito parecidos (eu usei unsigned em lugar de int). Não vi isso que você disse sobre os segundos estarem zerados.

Mas uma coisa me ocorreu agora: você lembrou de usar ponto, em vez de vírgula, como separador de decimais?


11. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Cabreuvas
Cabreuvas

(usa Debian)

Enviado em 08/04/2018 - 03:40h

paulo1205 escreveu:

Nossos programas estão muito parecidos (eu usei unsigned em lugar de int). Não vi isso que você disse sobre os segundos estarem zerados.

Mas uma coisa me ocorreu agora: você lembrou de usar ponto, em vez de vírgula, como separador de decimais?


Pior que não, na distração usei vírgula.

Então está explicado, ele ignorou os segundos.



12. Re: ME AJUDEM NESSE PROGRAMA. PRECISO ENTREGAR AMANHA!

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/04/2018 - 04:54h

Bem, como o programa já foi totalmente mostrado, eis aqui um desafio meu:

Quem consegue reduzir a quantidade de operações de conversão e aritméticas desse programa?

Como referência, o programa do cabreuvas tem (descartando a leitura do número):

horas= tempo/60;   // Uma uma divisão em float e uma conversão para int (desconsiderando a conversão de 60 para 60.0f, que o compilador provavelmente faz na hora da compilação).
minutos= tempo-(horas*60); // Uma multiplicação em int, uma conversão para float, uma subtração em float e uma conversão para int.
segundos= (tempo*60)-(horas*3600)-(minutos*60); // Duas multiplicações em int e uma em float, duas conversões de int para float, duas substrações em float e uma conversão para int.


Eu consegui fazer com uma conversão (EDIT) de int para float, uma de float para int, uma subtração, uma multiplicação e uma divisão.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts