Ir ao conteúdo
  • Cadastre-se

VisualG Relogio com "despertador" no VisualG


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

@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
Link para o comentário
Compartilhar em outros sites

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!