Jump to content

Segundos em horas, minutos e segs


João Bernardes

Recommended Posts

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

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

// 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

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.

Link to comment
Share on other sites

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

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.)

Link to comment
Share on other sites

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).

Link to comment
Share on other sites

  • 4 months later...
 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

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.