Ir ao conteúdo

VisualG Identificar a menor parcela de 5 inseridas (Portugol/VisuAlg)


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Postado

Não consigo identificar a menor das cinco parcelas inseridas neste algoritmo feito por mim. Da maior eu compreendi e consegui achar, mas a menor não. Sou iniciante, alguém poderia ajudar?

 

Algoritmo "Somador_Numerico"
Var
   parcela, valor, menor, maior: inteiro
Inicio
   parcela <- 1
   Enquanto (parcela <= 5) faca
      Escreva ("Por favor, insira a ", parcela, "a. parcela a adicao: ")
      Leia (valor)
      parcela <- parcela + 1
      Se (parcela = 1) entao
         maior <- valor
      FimSe
      Se (valor > maior) entao
         maior <- valor
      FimSe
       Se (parcela = 1) entao
         menor <- valor
      FimSe
      Se (valor < menor) entao
         menor <- valor
      FimSe
   FimEnquanto
   EscrevaL ("A parcela de MAIOR valor desta adicao e: ", maior)
   EscrevaL ("A parcela de MENOR valor desta adicao e: ", menor)
FimAlgoritmo

 

  • Curtir 1
  • Membro VIP
  • Solução
Postado

Olá @LucasOne.

 

Você está iniciando o "contador" com 1, mas logo após ler um valor já está mudando para 2... daí a verificação no se não passa.

 

image.png

 

Basta colocar para atualizar depois, por exemplo, antes do FimEnquanto.

 

 

 

  • Obrigado 1
Postado
7 minutos atrás, Simon Viegas disse:

Olá @LucasOne.

 

Você está iniciando o "contador" com 1, mas logo após ler um valor já está mudando para 2... daí a verificação no se não passa.

 

image.png

 

Basta colocar para atualizar depois, por exemplo, antes do FimEnquanto.

 

 

Entendi, muito obrigado!

  • Membro VIP
Postado

Adendo:

1#

Para ajudar nos testes, é possível colocar o VisualG para gerar valores automaticamente. Vide:

image.png

 

 

 

2#

Você está verificando duas vezes a mesma coisa, dá para simplificar:

      Se (parcela = 1) entao
         maior <- valor
         menor <- valor
      FimSe

 

 

 

3#

Não sei se você reparou, mas o VisualG insere um espaço antes de variáveis numéricas... para corrigir, poderia utilizar uma formatação, exemplo:

   EscrevaL("A parcela de MAIOR valor desta adicao e: ", maior:1)
   EscrevaL("A parcela de MENOR valor desta adicao e: ", menor:1)

 

Esse :1 vai reservar 1 espaço a esquerda. Como todo número ocupa pelo menos um espaço, não vai reserva algo, ou seja: vai ficar colado ao texto anterior (que nesse caso já tem um espaço).

 

 

4#

Como o program faz um determinada quantidade de laços, poderia troca de enquanto para para. (A não ser que seja um exercício de enquanto, é claro)

 

  • Curtir 1
Postado
5 minutos atrás, Simon Viegas disse:

4#

Como o program faz um determinada quantidade de laços, poderia troca de enquanto para para. (A não ser que seja um exercício de enquanto, é claro)

 

Obrigado, é um exercício de enquanto, ainda não vi o para. 

  • Curtir 1
  • 2 semanas depois...
Postado

O menor número não é exibido porque o valor da variável 'Menor' não está sendo especificado , logo o VisualG exibe o menor número que o valor do tipo inteiro começa, que é 0, como nada é menor do que 0 (a não ser -1,-2,-3 enfim mas isso não vem ao caso) ele vai exibir SEMPRE 0.

Se você atribuir a variável menor um número aleatório, por exemplo '1000000', ele vai exibir todo valor abaixo de 1000000 ou seja, sua variável menor que antes valia 0, vai passar a valer 1000000..sem a atribuição o valor menor passa a ser 0 (por isso o resultado do valor menor está sempre sendo 0, como eu disse).

 

Olha essa observação, no seu algoritmo, dentro da memória o valor da menor parcela começa como 0:

1685734547_SemTtulo-3.jpg.f8cdc383921f45074acf266c5e7bdde0.jpg

 

Conforme o usuário vai digitando os números a variavel menor, continua como 0:

1965560140_SemTtulo-2.jpg.be0962d2f96663741cb5bde889dd33fa.jpg

 

Após especificar o quanto a variável menor vale, ela começa com o valor especificado, no caso é 1000000:

2146507531_SemTtulo-4.jpg.e453b6e95c66187e0c94070fdb31cc9c.jpg

 

Dessa forma ele vai exibir todo número abaixo de 1000000

742224069_SemTtulo-6.jpg.b1e770bcb97707e38b1fbaae5d3dd929.jpg

 

Conseguiu sacar ? O problema na realidade é que o valor menor não foi específicado. Como os algoritmos o mesmo resultado pode ser obtido de diversas formas, digo pra você que o que eu falei, é apenas UMA das formas e não a 'forma absoluta', ok? Rs...abraço!!

  • Membro VIP
Postado

@JulianoVitoriano, as imagens não estão aparecendo aqui para mim...

 

image.png

 

 

Sobre:

7 horas atrás, JulianoVitoriano disse:

Se você atribuir a variável menor um número aleatório, por exemplo '1000000', ele vai exibir todo valor abaixo de 1000000 ou seja, sua variável menor que antes valia 0, vai passar a valer 1000000..sem a atribuição o valor menor passa a ser 0 (por isso o resultado do valor menor está sempre sendo 0, como eu disse).

 

Indiretamente seria isso mesmo... a variável menor (e maior) precisava ser de alguma forma inicializada... no código dele, ele já tentava fazer isso, mas ele preferiu utilizar o primeiro valor, em vez de usar um "valor alto". Vide:

 

Em 05/11/2020 às 15:44, LucasOne disse:

      Se (parcela = 1) entao
         maior <- valor
      FimSe
      Se (valor > maior) entao
         maior <- valor
      FimSe
data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

Daí, o problema do algoritmo é que a variável parcela já chegava nesse se a partir do valor 2... o que acabava não inicializando as variáveis.

 

 

Sobre:

 

7 horas atrás, JulianoVitoriano disse:

Conseguiu sacar ? O problema na realidade é que o valor menor não foi especificado. Como os algoritmos o mesmo resultado pode ser obtido de diversas formas, digo pra você que o que eu falei, é apenas UMA das formas e não a 'forma absoluta', ok? Rs...abraço!!

 

Exatamente... podem existir diversas formas diferentes para resolver um mesmo problema.. cada uma pode ter suas próprias vantagens e desvantagens... Para teu exemplo, se o usuário só digitar número maior que 1000000, o algoritmo não iria funciona. Já do modo que está no código, para cada loop o programa "perde um tempo" verificando se é a primeira parcela... por aí vai.

 

Postado

@Simon Viegas Sim, tem um limite de acordo com o informado pelo programador dentro do algoritmo, porém para passar de 1000000, é possível, sendo necessário alterar o tipo da variavel menor de INTEIRO para REAL, dessa forma ele pode colocar números bem maiores, por exemplo: 1000000000000000000000000000000000000000000000000000000000000000.

Mas eu ainda estou aprendendo, comecei estudar algoritmos na semana retrasada, então muita coisa eu ainda não aprendi..tô fazendo um curso gratuito por um site sobre lógica de programação, então se falei algo que 'não devia' não estranhe por favor kkkkk

Sobre as imagens, aqui para mim aparece, mas não consigo editar a postagem para reenvia-las, o que posso fazer?

Obrigado por disponibilizar o seu tempo

Forte abraço!!

  • Curtir 1
  • Membro VIP
Postado

Sobre:

3 horas atrás, JulianoVitoriano disse:

@Simon Viegas Sim, tem um limite de acordo com o informado pelo programador dentro do algoritmo, porém para passar de 1000000, é possível, sendo necessário alterar o tipo da variavel menor de INTEIRO para REAL, dessa forma ele pode colocar números bem maiores, por exemplo: 1000000000000000000000000000000000000000000000000000000000000000.

Mas eu ainda estou aprendendo, comecei estudar algoritmos na semana retrasada, então muita coisa eu ainda não aprendi..tô fazendo um curso gratuito por um site sobre lógica de programação, então se falei algo que 'não devia' não estranhe por favor kkkkk

 

Sim. Essa técnica é boa e também iria funcionar.

 

 

Sobre:

3 horas atrás, JulianoVitoriano disse:

Sobre as imagens, aqui para mim aparece, mas não consigo editar a postagem para reenviá-las, o que posso fazer?

 

Para editar, basta clicar no link editar, que fica na parte inferior da postagem:

 

image.png

 Está acontecendo algum erro?

 

 

Já para inserir imagens, eu costumo copiar a imagem (botão direito, "copiar imagem", se for da internet. Se no PC, a depender abro no mspaint, seleciono e copio a imagem), deixo posicionado onde vai aparecer aqui no texto e colo (ctrl+v)... automaticamente é feito o upload e a imagem já fica mais ou menos na posição.

 

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