Ir ao conteúdo
  • Cadastre-se
Kaio Lukas

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Kaio Lukas    seu segundo código está funcionando bem, apenas essa linha do segundo se do segundo código está errada :

Escreva (F)

coloque assim :

Escreva (i)

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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 

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...