João Bernardes 0 Posted October 18, 2020 Report Share Posted October 18, 2020 Boas, tive cerca de 3/4 aulas de programação até agora (estou a tirar engenharia informática) e estou a fazer um programa que converte Segundos em horas, minutos e segundos… Pelo que vi até agora, não encontrei nenhum sítio onde faziam como eu fiz (que tem erros pq se colocar 120 segundos fica 1 minuto e 60 segundos (sendo que é suposto ficar 2 minutos)). Posso fazer assim ou o melhor é apagar mesmo? package segHora; public class OrganizedSeconds { public static void main(String[] args) { int Seconds = 120 ; int Minutes = 0 ; //Este programa converte um valor de segundos em minutos e horas int Hours = 0 ; if ( Seconds>=60 ) Minutes = Minutes+1 ; if ( Minutes > 0 ) Seconds = Seconds-60 ; if ( Minutes>=60) Hours = Hours+1 ; //Quando insiro um número maior que 119 fica segs=60/61... if (Hours >0) Minutes=Minutes-60; // if ( Seconds>=60 ) Minutes = Minutes+1 ; // if ( Minutes > 1 ) Seconds = Seconds-60 ; // if ( Minutes>=60) Hours = Hours+1 ; // if (Hours >0) Minutes=Minutes-60; System.out.printf("O número de horas é %d, de minutos é %d e de segundos é %d",Hours, Minutes, Seconds) ; } } Link to post Share on other sites
M6 150 Posted October 19, 2020 Report Share Posted October 19, 2020 Faz isso num ciclo até que não possas fazer mais contas. Ou seja, enquanto tiveres segundos >= 60, podes ir incrementado os minutos e baixando os segundos, enquanto tiveres minutos >= 60 podes ir incrementando as horas e baixando os minutos, etc.. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to post Share on other sites
jsWizard 7 Posted October 19, 2020 Report Share Posted October 19, 2020 // se o parametro de entrada for por exemplo: s = 12345 hours = Math.floor(s / 3600); minutes = Math.floor((s - (hours * 60 * 60)) / 60); seconds = s - (hours * 60 * 60) - (minutes * 60); System.out.printf("O número de horas é %d, de minutos é %d e de segundos é %d", hours, minutes, seconds) ; ou seja, 3 horas, 25 minutos e 45 segundos. done! Link to post Share on other sites
Rui Carlos 359 Posted October 20, 2020 Report Share Posted October 20, 2020 Em 19/10/2020 às 13:40, jsWizard disse: // se o parametro de entrada for por exemplo: s = 12345 hours = Math.floor(s / 3600); minutes = Math.floor((s - (hours * 60 * 60)) / 60); seconds = s - (hours * 60 * 60) - (minutes * 60); System.out.printf("O número de horas é %d, de minutos é %d e de segundos é %d", hours, minutes, seconds) ; ou seja, 3 horas, 25 minutos e 45 segundos. done! Se usares inteiros não há necessidade do Math.floor. Pessoalmente usaria também o módulo para calcular o que "sobra" (e.g. seconds = s % 60). Mas em geral acho esta opção preferível ao uso de ciclos. Rui Carlos Gonçalves Link to post Share on other sites
jsWizard 7 Posted October 23, 2020 Report Share Posted October 23, 2020 On 10/20/2020 at 11:03 PM, Rui Carlos said: Se usares inteiros não há necessidade do Math.floor. usar variáveis "inteiras" para reter valores "reais".. não me parece boa programação.. mas ok Link to post Share on other sites
João Bernardes 0 Posted October 23, 2020 Author Report Share Posted October 23, 2020 Ora, não vim aqui durante algum tempo e reparei agora que tenho uma porrada de respostas... Entretanto já resolvi o problema, de uma forma bem simples, fiz a divisão por 3600 e fui buscar o resto, usando depois para a divisão por 60, ficando assim com horas, minutos e segundos (resto do resto). Obrigado pelas vossas dicas! Link to post Share on other sites
Rui Carlos 359 Posted October 24, 2020 Report Share Posted October 24, 2020 23 horas atrás, jsWizard disse: usar variáveis "inteiras" para reter valores "reais".. não me parece boa programação.. mas ok Não percebi bem a que valor real te referes. Estás a assumir que o input s é real? É que começando com um inteiro, como na mensagem inicial, nenhuma das operações intermédias geraria um real. (O Math.floor é o que está a forçar essa conversão para reais.) Rui Carlos Gonçalves Link to post Share on other sites
jsWizard 7 Posted October 26, 2020 Report Share Posted October 26, 2020 Rui Carlos.. "nenhuma das operações intermédias geraria um real" ?????????????? só como exemplo: 12345 / 3600 = 3,429166..... Estudaste matemática onde? Link to post Share on other sites
Rui Carlos 359 Posted November 1, 2020 Report Share Posted November 1, 2020 Em 26/10/2020 às 10:24, jsWizard disse: Rui Carlos.. "nenhuma das operações intermédias geraria um real" ?????????????? só como exemplo: 12345 / 3600 = 3,429166..... Estudaste matemática onde? Agora o mesmo exemplo em Java: jshell> 12345 / 3600 $1 ==> 3 Estudei Matemática em locais onde também se aprende a divisão euclidiana (que por sinal corresponde ao que o Java faz quando os inputs são ambos inteiros positivos). Rui Carlos Gonçalves Link to post Share on other sites
jsWizard 7 Posted November 5, 2020 Report Share Posted November 5, 2020 divisão euclidiana! - I'm impressed fica lá com a bicicleta Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now