João Bernardes Posted October 18, 2020 at 07:56 PM Report Share #619593 Posted October 18, 2020 at 07:56 PM 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 comment Share on other sites More sharing options...
M6 Posted October 19, 2020 at 10:08 AM Report Share #619596 Posted October 19, 2020 at 10:08 AM 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 comment Share on other sites More sharing options...
jsWizard Posted October 19, 2020 at 11:40 AM Report Share #619598 Posted October 19, 2020 at 11:40 AM // 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 comment Share on other sites More sharing options...
Rui Carlos Posted October 20, 2020 at 09:03 PM Report Share #619615 Posted October 20, 2020 at 09:03 PM 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 comment Share on other sites More sharing options...
jsWizard Posted October 23, 2020 at 04:25 PM Report Share #619646 Posted October 23, 2020 at 04:25 PM 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 comment Share on other sites More sharing options...
João Bernardes Posted October 23, 2020 at 04:44 PM Author Report Share #619647 Posted October 23, 2020 at 04:44 PM 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 comment Share on other sites More sharing options...
Rui Carlos Posted October 24, 2020 at 07:59 PM Report Share #619650 Posted October 24, 2020 at 07:59 PM 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 comment Share on other sites More sharing options...
jsWizard Posted October 26, 2020 at 09:24 AM Report Share #619656 Posted October 26, 2020 at 09:24 AM Rui Carlos.. "nenhuma das operações intermédias geraria um real" ?????????????? só como exemplo: 12345 / 3600 = 3,429166..... Estudaste matemática onde? Link to comment Share on other sites More sharing options...
Rui Carlos Posted November 1, 2020 at 02:59 PM Report Share #619819 Posted November 1, 2020 at 02:59 PM 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 comment Share on other sites More sharing options...
jsWizard Posted November 5, 2020 at 03:06 PM Report Share #619957 Posted November 5, 2020 at 03:06 PM divisão euclidiana! - I'm impressed 😄 fica lá com a bicicleta 😄😄 Link to comment Share on other sites More sharing options...
Joao Rolo Posted March 23, 2021 at 03:52 PM Report Share #621792 Posted March 23, 2021 at 03:52 PM public static void main(String[] args) { int seconds = 125; int minutes = 65; int hours = 2; // o acima me dá (2h +1h) +(5m+2m)+ 5s => 3h 7m 5s // % pega a parte restante int sec = seconds%60; int min = minutes%60 + seconds/60; int hr = hours + minutes/60; System.out.printf("O número de horas é %d, de minutos é %d e de segundos é %d",hr, min, sec) ; } O número de horas é 3, de minutos é 7 e de segundos é 5 Link to comment Share on other sites More sharing options...
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