Ir ao conteúdo

Posts recomendados

Postado

alguém sabe onde estou errando aqui?

#include <iostream>
using namespace std;

int main()
{                                                                       // 7 hi 10 mi 8 hf 9 mf
    int hi, hf, mi, mf, tempo_hora, tempo_minuto;
    cin >> hi >> mi >> hf >> mf;


    tempo_hora = hf-hi;
    tempo_minuto = mf-mi;

    if(tempo_hora < 0){
    tempo_hora = (hf+24)-hi;
    }
    if(tempo_minuto < 0){
    tempo_minuto = (mf+60)-mi;
    tempo_hora--;
    }
    if(hi == hf && mi == mf){
    cout << "O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)\n";
    }
    else{
    cout << "O JOGO DUROU " << tempo_hora << " HORA(S) E " << tempo_minuto << " MINUTO(S)\n";
    }
}

image.png.676569efc9f1c714c78b2acd027acf17.pngs

adicionado 21 minutos depois

o código funciona bem com os exemplos, mas o URI me retorna 5% de erro

 

e descobri que quando uso as entradas

5

3

5

2

o exemplo de saída me retorna um numero negativo

  • Amei 1
Postado
#include <iostream>
using namespace std;

int main()
{                                                                       // 7 hi 10 mi 8 hf 9 mf
    int hi, hf, mi, mf, tempo_hora, tempo_minuto;
    cin >> hi >> mi >> hf >> mf;


    tempo_hora = hf-hi;
    tempo_minuto = mf-mi;

    if ((tempo_hora <= 0) && (tempo_minuto <=0)) {
    tempo_hora += 24;
    }
    if(tempo_minuto < 0){
    tempo_minuto += 60;
    tempo_hora--;
    }
    
   
    cout << "O JOGO DUROU " << tempo_hora << " HORA(S) E " << tempo_minuto << " MINUTO(S)\n";
    
}

 

  • Obrigado 2
Postado
8 horas atrás, Hicaro Vitor disse:

e descobri que quando uso as entradas

5

3

5

2

o exemplo de saída me retorna um numero negativo

 

O jogo dura entre 1 minuto e 24h.

 

Então você vai lá e entra com um jogo que começou as 5:03 e terminou as 5:02 🤔

 

Então deu um número negativo porque ele terminou antes de ter começado?.... É 

 

Ou terminou um minuto depois das 24H estabelecidas como máximo...

 

O erro que vai dar vai depender de como escreveu o programa... Errado está.

 

  • Obrigado 1
Postado
1 hora atrás, Hicaro Vitor disse:

@Flávio Pedroza por que eu não preciso criar um IF apenas para tempo_hora < 0 ?

obrigado, mano

 

 

 

A condição tempo_hora <= 0  já engloba engloba os cados para igual e menor que zero, não há necessidade de criar outra condicional apenas para menor que zero.

  • Obrigado 1
Postado

Simplesmente porque 'tempo_hora' recebe da expressão valor 0

 

O código é pequeno então vamos depurar. Para isso use a imaginação com esquema que acha melhor. 

Seguimos o programa passo a passo igual aos acontecimentos em uma processo.

 

Veja t'horas < 0:

Entrada$ 5 3 5 2

    T'Horas: (5 - 5);
    T'Minutos: (2 - 3);

    SE (0) < 0 T'Horas: (24);
    SE (-1) < 0 T'Minutos: (59), T'Horas:-1;
    
    SE ((5) == (5)) E ((3) == (2)) EXIBIR  "O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)\n";
    SENAO EXIBIR  "O JOGO DUROU " (-1) " HORA(S) E " (59) " MINUTO(S)\n";

 

e se a expressão lógica é para caso em que t'horas é <= 0

Veja t'horas <= 0:

Entrada$ 5 3 5 2

    T'Horas: (5 - 5);
    T'Minutos: (2 - 3);

    SE (0) <= 0 T'Horas: (24);
    SE (-1) < 0 T'Minutos: (59), T'Horas: 23;

    SE ((5) == (5)) E ((3) == (2)) EXIBIR  "O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)\n";
    SENAO EXIBIR  "O JOGO DUROU " (23) " HORA(S) E " (59) " MINUTO(S)\n";
  • Obrigado 1
Postado
9 horas atrás, Hicaro Vitor disse:

por que eu não preciso criar um IF apenas para tempo_hora < 0 ?

 

Se faz questão disso podemos verificar; a necessidade de um teste de diferença negativa acontece para correção nos casos em que um ciclo de hora não foi concluído.

 

Nesse exemplo: 5 3 5 2, isso ocorre e se considera apenas para efeito de teste resultado 24 horas, tem-se a entrada: 5 0 5 0 porque desconsidera os minutos 3 e 2. 

 

Entretanto, quando os minutos são calculados a diferença é -1 entendendo que o ciclo de 1 hora (60 min) não é completo na última hora das 24.

 

Na aritmética do Ensino Básico, eu digo: Você tem que pegar 10 emprestado.

Semelhante à:

 12(-1)2

        -3      = 119

 

 

Disso talvez, tira-se ideia de que preciso determinar antes o sinal dos minutos para calcula na hora final quando necessário, ou seja; ciclo de horas incompleto.

 

Com isso, primeiro trabalhe com o sinal da diferença dos minutos.

#include <iostream>
using namespace std;

int main(){                                                                      
    int hi, hf, mi, mf, tempo_hora, tempo_minuto;
    cin >> hi >> mi >> hf >> mf;


    tempo_hora = hf - hi;
    tempo_minuto = mf - mi;

    if(tempo_minuto < 0){
    	tempo_minuto += 60;
    	tempo_hora --;
    }
    if(tempo_hora < 0){
    	tempo_hora += 24;
    }
    if(hi == hf && mi == mf){
    	cout << "O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)\n";
    }
    else{
    	cout << "O JOGO DUROU " << tempo_hora << " HORA(S) E "
						<< tempo_minuto << " MINUTO(S)\n";
    }
}

 

 

Passo no teste: 5 3 5 2;

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...