Ir ao conteúdo

Posts recomendados

Postado

Boa tarde gente! Há alguns dias fiz um algoritmo de contador, deu super certo! Só que vi um comportamento dele que me deixou confuso e não consigo entender o porque disso ocorrer!

Algoritmo "contador inteligente (algoritmo 003)"

Var
  valorInicial,valorFinal,contPersonalizada:Inteiro


Inicio
  Escreval("-----------------------------")
  Escreval("    CONTADOR INTELIGENTE     ")
  Escreval("-----------------------------")
  Escreval("Qual o valor inicial da contagem? ")
  Leia(valorInicial)
  EscrevaL("Até quando o contador deverá contar? ")
  Leia(valorFinal)
  Escreval("-----------------------------")
  Escreval("Pretende fazer uma contagem(normal ou regressiva) de quanto em quantos números?")
  Escreval("Por exemplo: 1 + 2 ao invés de 1 + 1.")
  Leia(contPersonalizada)
  Escreval("-----------------------------")
  Se (valorInicial < valorFinal) então
     Enquanto valorInicial < valorFinal faca
     Escreval(valorInicial)
     valorInicial <- valorInicial + contPersonalizada
     FimEnquanto
  FimSe
  Se (valorFinal < valorInicial) então
     Enquanto valorFinal < valorInicial faca
     Escreval(valorInicial)
     ValorInicial <- ValorInicial - contPersonalizada
     FimEnquanto
  FimSe
Fimalgoritmo

O objetivo desse algoritmo é pedir um número inicial e um final para o usuário e fazer uma contagem crescente ou decrescente, só que notei que se eu desse o valor inicial 1 e pedisse para o algoritmo contar até o valor final 10, a contagem iria do 1 ao 9, alguém poderia me explicar porque isso ocorre ? Já tentei entender mas não consegui hahahaha

Se puderem dar uma pequena traduzida nas explicações, eu agradeço 🙂

  • Curtir 2
Postado

@Samuel Fortes Brasil

Boa Tarde!

 

Tem relação com a expressão lógica dessa instrução. Lá, quando expressamos, por exemplo, enquanto a<b faca; isso diz ao algoritmo que pare os comandos quando a não é menor que b, por consequência, o temos 1 comando a menos.

 

Para executar esse último comando, expressa-se a≤b

 

Veja:

9 minutos atrás, Samuel Fortes Brasil disse:
Enquanto valorInicial < valorFinal faca
     Escreval(valorInicial)
     valorInicial <- valorInicial + contPersonalizada
     FimEnquanto

 

Faça um teste rápido, rescreva o operador < para <=

  • Curtir 3
Postado
var
contador: Inteiro
Inicio
contador <– 1
    repita
         Escreval(contador)
         contador <- contador + 1
    Ate (contador = 10)
FimDoAlgoritmo

@Ansi C Muito obrigado por explicar esse caso, mas tem mais uma situação que não entendo.Esse outro algoritmo conta até o 9 mesmo dizendo para parar a repetição quanto ficar igual a 10, por que isso ocorre ?

  • Curtir 1
Postado

@Samuel Fortes Brasil

Boa Terde!

 

Ocorre por razão da instrução, seu comportamento e a ordem dos comandos no seu bloco de comando.  Esses comandos e sua ordem exata estão escritos logo abaixo:

 

ordem. comandos

0. repita

1. Escreval

2. contador <- contador + 1

3. Ate (contador = 10)

 

Acompanhe o ritual comigo… O que acontece depois do incremento (2), vem a expressão lógica (3), a sua condição é? Até 10, ou seja…

 

1. escreve 9

2. adiciona 1

3.10 é igual a 10 pare

 

 

A propósito, se queres a simulação até 10, incluso; expresse desta maneira:

Algoritmo "Conte Ate 10 (inclusive)"
var
   contador: Inteiro

Inicio
   contador <- 0
   repita
      contador <- contador + 1
      Escreval(contador)
   Ate (contador = 10)


Fimalgoritmo

 

  • Obrigado 1
  • Membro VIP
Postado
Em 03/05/2024 às 17:25, Ansi C disse:
   repita
      contador <- contador + 1
      Escreval(contador)
   Ate (contador = 10)

 

Só um detalhe... Para garantir o melhor funcionamento, utilizar ">=". Por que se der alguma zica e passar do 10, praticamente* vai entrar num loop infinito 🫠

 

 

* o tipo numérico inteiro tem um limite (pra lá de uns 2 bilhões positivos, pelo menos num x64), daí pularia para negativo (mais uns pra lá de 2 bi), até voltar para o positivo novamente podendo ou não repetir a zica.  

 

PS: outra forma seria começar do 1 e ajustar o limite:

 

algoritmo "Conte Ate 10 (inclusive)"
var
   contador : inteiro

inicio
   contador <- 1
   
   repita
      escreval(contador)
      contador <- contador + 1
   ate (contador > 10)
fimAlgoritmo

 

Como é uma contagem, o para seria ainda mais harmonioso:

algoritmo "Conte Ate 10 (inclusive)"
var
   contador : inteiro

inicio
   para contador de 1 ate 10 faca
      escreval(contador)
   fimPara
fimAlgoritmo

 

Obviamente, se o tópico de estudo for o repita, tem que ser com o repita.

 

  • Curtir 2

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!