Ir ao conteúdo
  • Cadastre-se

VisualG Contador Inteligente de números


Posts recomendados

Olá. Tenho um algoritmo que pede dois valores, um inicial e um final, eu preciso fazer ele contar do menor pro maior, e do maior pro menor, independente do valor digitado.

 

algoritmo "ContagemInteligente"
var
   I, F: Inteiro
inicio
   I <- 0
   F <- 0
//Bloco do pedido das variáveis
   Escreval ("CONTAGEM INTELIGENTE")
   Escreval ("--------------------")
   Escreva ("Início: ")
      Leia(I)
   Escreva ("Fim: ")
      Leia(F)
//Blocos dos contadores
   Se (I > F) então
      Enquanto (I > F) faca
         I <- I - 1
         Escreva (I)
      FimEnquanto
   SeNao
      Se (I < F) então
         Enquanto (I < F) faca
         F <- F + 1
         Escreva (F)
         FimEnquanto
      FimSe
   FimSe
   
fimalgoritmo

Mas sempre que eu rodo o código, acontece o seguinte:
Se o Início é MENOR que o final: ele conta infinitamente 

Se o Início é MAIOR que o final: ele faz tudo certo.

 

 

Eu não tô conseguindo entender meu erro: Se o I < F então ele soma mais um até o I não ser < que o F. Mas ele conta pra sempre :(

      Se (I < F) então
         Enquanto (I < F) faca
         F <- F + 1
         Escreva (F)
         FimEnquanto
      FimSe
   FimSe

 

adicionado 6 minutos depois

Eu dei uma mudada no código: 

algoritmo "ContagemInteligente"
var
   I, F: Inteiro
inicio
   I <- 0
   F <- 0
//Bloco do pedido das variáveis
   Escreval ("CONTAGEM INTELIGENTE")
   Escreval ("--------------------")
   Escreva ("Início: ")
      Leia(I)
   Escreva ("Fim: ")
      Leia(F)
//Blocos dos contadores
   Se (I < F) então
      Enquanto (I < F) faca
         I <- I + 1
         Escreva (I)
      FimEnquanto
   SeNao
      Se (I > F) então
         Enquanto (I > F) faca
         I <- I - 1
         Escreva (F)
         FimEnquanto
      FimSe
   FimSe
   
fimalgoritmo

 

Mas agora quando eu digito um número maior no Início, ele repete o número final algumas vezes

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Kaio Lukas.

 

Sobre a indentação:

11 horas atrás, Kaio Lukas disse:

//Blocos dos contadores
   Se (I < F) então
      Enquanto (I < F) faca
         I <- I + 1
         Escreva (I)
      FimEnquanto
   SeNao
      Se (I > F) então
         Enquanto (I > F) faca
         I <- I - 1
         Escreva (F)
         FimEnquanto
      FimSe
   FimSe

 

O trecho do segundo enquanto deve ser indentado, assim como foi o trecho do primeiro, ex.:

       //Blocos dos contadores
       Se (I < F) então
          Enquanto (I < F) faca
             I <- I + 1
             Escreva (I)
          FimEnquanto
       SeNao
          Se (I > F) então
             Enquanto (I > F) faca
                I <- I - 1
                Escreva (F)
             FimEnquanto
          FimSe
       FimSe

Obs.: não incluir a sugestão proposta por @devair1010.

 

 

Outro ponto é que o comando leia() não tem vínculo com o comando escreva(), ou seja, tecnicamente deveria ficar na mesma linha, ex.:
 

Em vez de:

11 horas atrás, Kaio Lukas disse:

   Escreva ("Início: ")
      Leia(I)

 

Ficar:

   Escreva ("Início: ")
   Leia(I)

obs. 2:  as "regras" de indentação são variadas, mas é necessário que siga um lógica. Particularmente acho que a forma que você fez fica legal, mas tem que ter a consciência que poderia fazer porque 'você quis", não porque você veio achar que uma coisa está vinculada outra.

 

 

ADENDO:

11 horas atrás, Kaio Lukas disse:

SeNao

Pela forma que escreveu, entendo que você está se referindo a expressão "se não", mas (tenho quase certeza) que o correto seria "senão". São coisas diferentes.

 

Senão = Caso contrário, de outro modo;

Se não = Caso não, quando não.

 

 

Então seria:

   Senao
      Se (I > F) então

 

 

 

No aguardo.

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@devair1010 Puts, era isso mesmo.

 

 

@Simon Viegas Entendi, obrigado pelas dicas!

 

Eu ainda tenho um pouco de dificuldade na "lógica" do negócio, mas treinando eu pego o jeito. xD

Teria algum site onde tem exercícios sobre esse tema? Eu dei uma procurada por cima e não achei nada muito útil.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
algoritmo "semnome"
var
N,N1:Inteiro

inicio
      N <- 0
      N1 <- 0
      Escreva("Inicio: ")
      Leia(N)
      Escreva("Fim: ")
      Leia(N1)
      Se N < N1 então
         Enquanto N < N1 Faca
         N <- N + 1
         Escreva(N,"..")
         FimEnquanto
      SeNao
           Se N > 0 então
              Enquanto N > 0 Faca
              N <- N - 1
              Escreva(N,"..")
              FimEnquanto
              FimSe

         FimSe
fimalgoritmo
adicionado 1 minuto depois

Você erro no segundo se 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 4 meses depois...
algoritmo "Contagem_Inteligente"
// Função: Fazer uma contagem
// Autor :Alexandro dos Santos Reis
// Data : 06/05/2018
// Seção de Declarações
var
i,f:inteiro
inicio
// Seção de Comandos
escreval("                    CONTAGEM INTELIGENTE")
escreval("--------------------------------------------------------------------")

escreva("Inicio:")
leia(i)
escreva("Fim:")
leia(f)
escreval

se(f>i)então
escrevaL("                              CONTANDO")
escreval("--------------------------------------------------------------------")
   enquanto i<=f faca


      escreva(i,"..")


      i<-i+1

   fimenquanto


senao
escreval("                              CONTANDO")
escreval
escreval("--------------------------------------------------------------------")
   enquanto i>=f faca


      escreva(i,"..")

      i<-i-1

   fimenquanto

fimse

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • Membro VIP

@carvalho312, olá;

 

1 hora atrás, carvalho312 disse:

f <- (f - 1)

 

Não entendi. Seria alguma sugestão de alteração de algum código? poderia explicar melhor?

adicionado 37 minutos depois

Poderia ser algo assim:

algoritmo "Contagem_Inteligente"
var
   inicial, final :inteiro
   maior, menor :inteiro
   i :inteiro
inicio
   escreval("                     CONTAGEM INTELIGENTE                     ")
   escreval("--------------------------------------------------------------")
   escreva ("Valor inicial: ")
   leia(inicial)
   escreva ("Valor final  : ")
   leia(final)
   escreval("")
   se (inicial <= final) entao
      menor <- inicial
      maior <- final
   senao
      menor <- final
      maior <- inicial
   fimSe
   escrevaL("                           Crescente                          ")
   escreval("--------------------------------------------------------------")
   para i de menor ate maior faca
      escreva (i, "..")
   fimPara
   escrevaL("")
   escrevaL("")
   escrevaL("                          Decrescente                         ")
   escreval("--------------------------------------------------------------")
   para i de maior ate menor passo -1 faca
      escreva (i, "..")
   fimPara
fimAlgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 6 meses depois...

Sei que faz muito tempo que postaram sobre o assunto, mais esse conteúdo ainda pode ajudar e muito a quem ainda está no início da caminhada.

algoritmo "contagem_inteligente"
var
   i,f:inteiro
inicio
   i<- 0
   f <- 0
   escreval ("-contagem inteligente-")
   escreva ("inicio: ")
   leia(i)
   escreva ("fim: ")
   leia (f)
   se (i)>
      enquanto (i <=f) faca
         escreval (i)
         i <- i + 1
      fimenquanto
   senao
      se (i>f) entao
         enquanto (i>=f) faca
            escreval (i)
            i <- i - 1
         fimenquanto
      fimse
   fimse
fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Ciktriz, alguns pontos:

  1. O primeiro se ficou incompleto. Deve ter acontecido alguma coisa na hora de você copiar...:
    1 hora atrás, Ciktriz disse:
    
    se (i)>


    Como na imagem, seria:

    se (i < f) entao
  2. O teu algoritmo NÃO resolve o enunciado:
    Em 05/10/2017 às 21:03, Kaio Lukas disse:

    Olá. Tenho um algoritmo que pede dois valores, um inicial e um final, eu preciso fazer ele contar do menor pro maior, e do maior pro menor, independente do valor digitado.

    Ou seja: deve exibir duas sequências!!! 

    Algo como eu fiz:
    Em 09/10/2019 às 14:12, Simon Viegas disse:

    Poderia ser algo assim:

    
    algoritmo "Contagem_Inteligente"
    var
       inicial, final :inteiro
       maior, menor :inteiro
       i :inteiro
    inicio
       escreval("                     CONTAGEM INTELIGENTE                     ")
       escreval("--------------------------------------------------------------")
       escreva ("Valor inicial: ")
       leia(inicial)
       escreva ("Valor final  : ")
       leia(final)
       escreval("")
       se (inicial <= final) entao
          menor <- inicial
          maior <- final
       senao
          menor <- final
          maior <- inicial
       fimSe
       escrevaL("                           Crescente                          ")
       escreval("--------------------------------------------------------------")
       para i de menor ate maior faca
          escreva (i, "..")
       fimPara
       escrevaL("")
       escrevaL("")
       escrevaL("                          Decrescente                         ")
       escreval("--------------------------------------------------------------")
       para i de maior ate menor passo -1 faca
          escreva (i, "..")
       fimPara
    fimAlgoritmo

 


RESUMINDO: uma solução SEMPRE deve ser baseada no problema. Um exemplo que costumo dar é algo assim: "se o cliente pede um cachorro-quente ao garçom, nada adianta ele trazer um hambúrguer delicioso no lugar"... Afinal, o cara quer um cachorro-quente, oras!. O enunciado é um contrato. Se não concorda com ele, poderia propor uma mudança. "Senhor!, não temos cachorro quente, o senhor aceita um hambúrguer no lugar? não vai ter acréscimo de valor!"... ele pode aceitar ou não!... mas não traga o que ele não pediu. :)

 

Att.

 

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