Ir ao conteúdo

Posts recomendados

Postado

Escreva um programa em C que leia o horario de inı́cio e o horário de fim de um jogo de Xadrez e calcule a duração do jogo. O tempo máximo de duração do jogo é de 24 horas e o jogo pode iniciar em um dia e terminar no dia seguinte. Qualquer jogo tem duração mínima de 1 segundo. 

 

UTILIZE APENAS O QUE FOI ENSINADO ATÉ O MOMENTO PARA RESOLVER ESTA ATIVIDADE. NÃO UTILIZE, POR EXEMPLO, ESTRUTURAS DE DECISÃO COMPOSTAS OU LAÇOS. SUA RESPOSTA PODE SER DESCONSIDERADA CASO USE.

 

Exemplo de entrada 1: 

13h10m10s
13h10m11s

Exemplo de saída 1:

0h0m1s

 

Exemplo de entrada 2: 

2h2m2s
3h3m3s

Exemplo de saída 2:

1h1m1s

  • Amei 1
Postado

Fizemos outros tipos de execicios na semana passada, mais nenhum parecido com esse.

E o que complica é que não pode usar ELSE, que facilitaria.@devair1010

  • Obrigado 1
Postado

@devair1010

#include <stdio.h>
int main (void)

    int calculaTempo (horaInicio, minutoInicio, horaFim, minutoFim){
    
    int tempo;
    if(horaInicio > horaFim){
        tempo =  1440 - (horaInicio*60 + minutoInicio);
        tempo += horaFim*60 + minutoFim;
    return(tempo);
    }

int main()
{

    int horaInicio, minutoInicio, horaFim, minutoFim, retorno;

    printf("Digite o horario de inicio do jogo: ");
    scanf("%hi:%hi", &horaInicio, &minutoInicio);

    printf("Digite o horario de fim do jogo (HH:MM): ");
    scanf("%hi:%hi", &horaFim, &minutoFim);

    retorno = calculaTempo(horaInicio, minutoInicio, horaFim, minutoFim);

    printf("\nTempo: %d horas e %d minutos.", retorno/60, retorno%60);

    return 0;
    }

 

fiz esse e esta dando erro de compilaçao.não estou entendendo o motivo.

  • Obrigado 1
Postado

Olá tudo bem? Espero que esteja bem.

4 horas atrás, NathanGomes1322 disse:

UTILIZE APENAS O QUE FOI ENSINADO ATÉ O MOMENTO PARA RESOLVER ESTA ATIVIDADE. NÃO UTILIZE, POR EXEMPLO, ESTRUTURAS DE DECISÃO COMPOSTAS OU LAÇOS. SUA RESPOSTA PODE SER DESCONSIDERADA CASO USE.

Os recursos mínimos (que sei) para conseguir uma resposta (padrão) é: 

  1. condicionais if
  2. operadores aritméticos e lógicos.

Logo

Atenção com entrada, observe o formato delas (inputs)

4 horas atrás, NathanGomes1322 disse:

13h10m10s

Esse formato (acima) difere do formato sugerido  na construção abaixo

3 horas atrás, NathanGomes1322 disse:
 scanf("%hi:%hi", &horaFim, &minutoFim);

Quando se espera algo mais próximo disto

  if(scanf("%dh%dm%ds",&ih,&im,&is)<3){
    puts("SCAN-ERROR: INICIAL");
    }// INICIAL
  if(scanf("%dh%dm%ds",&fh,&fm,&fs)<3){
    puts("SCAN-ERROR: FINAL");
    }// FINAL
  • A expressão com if puts < 3 que registra entradas de formato inválido é quase sempre uma excrescência quando são entradas ideais|perfeitas (em geral, de exercícios). Logo, será algo semelhante à
  scanf("%dh%dm%ds",&ih,&im,&is); // INICIAL
  scanf("%dh%dm%ds",&fh,&fm,&fs); // FINAL

Mas, logo abaixo, tu especificas

3 horas atrás, NathanGomes1322 disse:
"%hi:%hi"

Quase conforme os exemplos, porém é menos|mais que esperado.

A sua operação de subtração de horários não está intuitiva.

3 horas atrás, NathanGomes1322 disse:
        tempo =  1440 - (horaInicio*60 + minutoInicio);
        tempo += horaFim*60 + minutoFim;

Se deixa sua construção simples sem simplificar, notará ser um problema de subtração|adição de base60 (para minutos e segundos) e o uso da técnica "empresta 1".

🙂 

  • Curtir 1
  • Obrigado 2
Postado

@NathanGomes1322    seu código corrigido para compilar , poderia ser assim :

// compila mas o resultado não esta certo
#include <stdio.h>
int calculaTempo(int horaInicio, int minutoInicio, int horaFim, int minutoFim, int sec_ini, int sec_fin)
{
    if (horaInicio > horaFim)
    {
        return(1440 - (horaInicio * 60 + minutoInicio
            + horaFim * 60 + minutoFim));
    }
}
int main()
{
    int horaInicio, minutoInicio, horaFim, minutoFim, retorno;
    int min_ini = 0, min_fim = 0;
    printf("Digite o horario de inicio do jogo: ");
    scanf("%i:%i:%d", &horaInicio, &minutoInicio,&min_ini);
    printf("Digite o horario de fim do jogo (HH:MM): ");
    scanf("%i:%i:%d", &horaFim, &minutoFim, &min_fim);
    retorno = calculaTempo(horaInicio, minutoInicio, horaFim, minutoFim,min_ini,min_fim);
    printf("\nTempo: %d horas e %d minutos.", retorno / 60, retorno % 60);
    return 0;
}

 

  • Curtir 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!