Ir ao conteúdo

VisualG Relogio com "despertador" no VisualG


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Postado

Olá galera, seguinte, ja acompanho muito o clube para realizar atividades e é a primeira vez que venho pedir um help aqui.

Preciso criar um algoritmo que seja um relogio (Essa parte já foi de boa até), o que ta pegando é que preciso criar uma especie de despertador pra esse relogio, onde o usuário entra com a Hora, minuto e segundos desejados e quando ele chega nesse horario a contagem é interrompida. Dei uma pesquisada e achei o comando "interrompa" mas ainda não sei bem como utilizá-lo. Será que alguém conseguiria me dar uma ajudinha??

 

Eu cheguei até o relogio, mas não sei onde encaixar o comando "interrompa", na verdade não sei se é exatamente ele que devo utilizar.. aqui foi o que tentei fazer, no chute mesmo: 

 

Var
hr,min,seg,hrd,mind,segd:inteiro

Inicio
escreva("Digite a hora:")
leia(hrd)
escreva("Digite o minuto:")
leia(mind)
escreva("Digite o segundo:")
leia(segd)

para hr <- 0 ate 23 faca
   para min <- 0 ate  59 faca
       para seg <- 0 ate 59 faca
          escreval(hr," horas",min," minutos",seg," seg")
          se (hr = hrd) e (min = mind) e (seg = segd) entao
          interrompa
          fimse
       fimpara
   fimpara
fimpara

Fimalgoritmo

 

 

  • Curtir 2
  • Membro VIP
  • Solução
Postado

@joaquim_2k, aí está apenas interrompendo o para/faca mais interno, daí indo para o próximo ciclo do para/faca anterior.

 

Uma forma bruta seria sair interrompendo um por um, ex.:

   para hr <- 0 ate 23 faca
      para min <- 0 ate  59 faca
         para seg <- 0 ate 59 faca
            escreval(hr, " horas", min, " minutos", seg, " seg")
            se (hr = hrd) e (min = mind) e (seg = segd) entao
               interrompa
            fimse
         fimpara
         se (hr = hrd) e (min = mind) e (seg = segd) entao
            interrompa
         fimse
      fimpara
      se (hr = hrd) e (min = mind) e (seg = segd) entao
         interrompa
      fimse
   fimpara

 

adicionado 3 minutos depois

Ou utilizando uma flag, ex.:

var
  ...
  tocarAlarme : logico

inicio
   ...
   para hr <- 0 ate 23 faca
      para min <- 0 ate  59 faca
         para seg <- 0 ate 59 faca
            escreval(hr, " horas", min, " minutos", seg, " seg")
            se (hr = hrd) e (min = mind) e (seg = segd) entao
               tocarAlarme := VERDADEIRO
               interrompa
            fimse
         fimpara
         se tocarAlarme entao
            interrompa
         fimse
      fimpara
      se tocarAlarme entao
         interrompa
      fimse
   fimpara
   ...

 

adicionado 12 minutos depois

Ou mudando a lógica... uma forma mais natural poderia ser algo assim:

   repita
      seg := seg + 1
        
      se seg > 59 entao
         seg := 0
         min := min + 1
      fimSe

      se min > 59 entao
         min := 0
         hr := hr + 1
      fimSe

      se hr > 23 entao
         hr := 0
      fimSe
      
      escreval(hr, " horas", min, " minutos", seg, " seg")

   ate (hr = hrd) e (min = mind) e (seg = segd)

 

  • Curtir 2
Postado

@Simon Viegas mudando a lógica fica bem mais fácil até pra entender, não tinha pensado dessa forma.. mas vou ter que apelar pra forma mais bruta porque meu professor quer que utilize o para/faca 

Valeu pela ajuda, deu uma luz muito grande aqui!! 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!