Ir ao conteúdo
  • Cadastre-se
Higor Gustavo Martins

VisualG Contagem Inteligente de (Algoritmo)

Recommended Posts

Como faço para a minha contagem começar com o numero que eu inserir tanto no Inicio quanto no Fim ?

@devair1010

algoritmo "ContagemInteligente"
var
   I, F: inteiro
inicio
      I <- 0
      F <- 0
      Escreval("Contagem Inteligente")
      Escreval("--------------------")
      Escreva("Inicio: ")
      Leia(I)
      Escreva("Fim: ")
      Leia(F)
      Escreval("--------------------")
      Escreval("      Contando      ")
      Escreval("--------------------")
      Se (I < F) entao
         Enquanto (I < F) faca
                  I <- I + 1
                  Escreva (I)
         FimEnquanto
      SeNao
           Se (I > F) entao
              Enquanto (I > F) faca
                       I <- I - 1
                       Escreva (I)
              FimEnquanto
           FimSe
      FimSe

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Higor Gustavo Martins       a condição para imprimir o número precisa ser igual ao número que você inseriu , então seu código poderia ser assim  :

algoritmo "ContagemInteligente"
var
   I, F: inteiro
inicio
      Escreval("Contagem Inteligente")
      Escreval("--------------------")
      Escreva("Inicio: ")
      Leia(I)
      Escreva("Fim: ")
      Leia(F)
      Escreval("--------------------")
      Escreval("      Contando      ")
      Escreval("--------------------")
      Se (I < F) entao
         Enquanto (I <= F) faca
                  Escreva (I)
                  I <- I + 1
         FimEnquanto
      SeNao
           Se (I > F) entao
              Enquanto (I >= F) faca
                       Escreva (I)
                       I <- I - 1
              FimEnquanto
           FimSe
      FimSe
fimalgoritmo

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Complementando:

 

1#

Sobre:

9 horas atrás, Higor Gustavo Martins disse:

      I <- 0
      F <- 0

 

Como essas duas variáveis são usadas para leitura, elas não precisam ser inicializadas. Inicializar seriam mais voltadas para variáveis "contadoras"... ou seja, algo como utilizam "o valor atual mais alguma coisa". Resumindo: o valor inicial de I e F não importa, pois o valor será "substituído" em seguida.

 

 

 

2#

Sobre:

9 horas atrás, Higor Gustavo Martins disse:

Como faço para a minha contagem começar com o numero que eu inserir tanto no Inicio quanto no Fim ?

 

Para ser mais preciso, a base do problema está na atualização do I (não no "=" do enquanto()), veja:

9 horas atrás, Higor Gustavo Martins disse:

      Se (I < F) entao
         Enquanto (I < F) faca
                  I <- I + 1 //o problema está aqui
                  Escreva (I)
         FimEnquanto
      SeNao
           Se (I > F) entao
              Enquanto (I > F) faca
                       I <- I - 1 //o problema está aqui
                       Escreva (I)
              FimEnquanto
           FimSe
      FimSe

 

 

O início estava saindo errado pois estava atualizando ANTES de imprimir, ou seja, quando começa o laço de repetição, o valor do I já está com o primeiro valor, mas você estava atualizando... logo. vai começar do segundo número em diante.

 

Uma maneira prática de corrigir, seria mudar a ordem:

      enquanto (I < F) faca
         //aqui o problema central: precisa atualizar DEPOIS de imprimir
         {I <- I + 1}
         escreva (I)
         I <- I + 1
      fimEnquanto

 

 

(ou fazer o i  entrar com seu valor antecessor... etc)

 

 

 

3#

Daí um outro problema (que já existia) ficará evidente, pois CONTINUARÁ imprimindo um número a menos, aí sim entraria a questão citada por @devair1010.

 

8 horas atrás, devair1010 disse:

[...] a condição para imprimir o número precisa ser igual ao número que você inseriu

 

      //incluir o igual para imprimir o último da lista
      {enquanto (I < F) faca}
      enquanto (I <= F) faca
         escreva (I)
         I <- I + 1
      fimEnquanto

Entendem? 

- por que só está exibindo um número a menos (o primeiro no antigo, e o último no novo)? porque falta o "=";

- por que a contagem está começando errado? porque está atualizando o i antes.

 

Acontece que quando @devair1010 sugeriu um novo código, ele já corrigiu o problema em si. Resumindo: o problema foi corrigido, mas foi dado outra justificativa (que foi para outro problema). :)

 

 

 

4#

Segue um resumo das alterações:

algoritmo "ContagemInteligente"
var
   I, F: inteiro
inicio
//não precisa
{I <- 0}
//não precisa
{F <- 0}
escreval("Contagem Inteligente")
escreval("--------------------")
escreva ("Inicio: ")
leia(I)
escreva ("Fim   : ")
leia(F)
escreval("--------------------")
escreval("      Contando      ")
escreval("--------------------")
//aqui inserir o igual, para incluir quando for igual (ex.: 2 e 2, aparece 2)
{se (I < F) entao}
se (I <= F) entao
   //incluir o igual, pois senão ficará um número a menos
   {enquanto (I < F) faca}
   enquanto (I <= F) faca
      //aqui o problema central: basta colocar APÓS imprimir
      {I <- I + 1}
      escreva (I)
      I <- I + 1
   fimEnquanto
senao
   //não precisa, pois necessariamente I será maior que F
   {se (I > F) entao}
   {enquanto (I > F) faca}
   //incluir o igual, pois senão ficará um número a menos
   enquanto (I >= F) faca
      //aqui o problema central: basta colocar APÓS imprimir
      {I <- I - 1}
      escreva (I)
      I <- I - 1
   fimEnquanto
   {fimSe}
fimSe
fimAlgoritmo

 

Mesmo código sem os comentários:

algoritmo "ContagemInteligente"
var
   I, F: inteiro
inicio
escreval("Contagem Inteligente")
escreval("--------------------")
escreva ("Inicio: ")
leia(I)
escreva ("Fim   : ")
leia(F)
escreval("--------------------")
escreval("      Contando      ")
escreval("--------------------")
se (I <= F) entao
   enquanto (I <= F) faca
      escreva (I)
      I <- I + 1
   fimEnquanto
senao
   enquanto (I >= F) faca
      escreva (I)
      I <- I - 1
   fimEnquanto
fimSe
fimAlgoritmo

 

 

 

5#

Como são quantidades de loops predeterminados, talvez seja mais adequado utilizar o para.

se (I <= F) entao
   para I de I ate F faca
      escreva (I)
   fimPara
senao
   para I de I ate F passo -1 faca
      escreva (I)
   fimPara
fimSe

 

 

***

 

PS: talvez seja interessante usar outra variável para ficar "controlando" o laço, pois o não seria interessante não mexe na variável original. Poderia por exemplo utilizar: inicio, fim e i

 

 

O que acham sobre cada item?

 

 

No aguardo.

 

  • Curtir 1

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

×