Ir ao conteúdo

Posts recomendados

Postado

A atividade é:

Citação

51) Faça um aplicativo que leia o preço de 8 produtos. No final, mostre na tela qual foi o maior e qual foi o menor preço digitados.

 

Fiz o código, executei.

algoritmo "semnome"
// Função :
// Autor :
// Data : 26/12/2020
// Seção de Declarações 
var
      contador: inteiro
      valor, maiorV, menorV: real
inicio
      enquanto ( contador < 2 ) faca
           contador <- contador + 1

           escreva( "Informe o valor do ", contador, "º produto: " )
           leia( valor )
           
           se ( valor > maiorV ) entao
              maiorV <- valor
           fimse
           
           se ( valor < menorV ) entao
              menorV <- valor
           fimse
      fimenquanto
      
      escreval( "Maior: ", maiorV )
      escreval( "Menor: ", menorV )
fimalgoritmo

Obs.: Sei que há parênteses desnecessário, mas é uma questão de organização pessoal.

 

Foi identificado o maior valor e, consequentemente, atribuído à variável correspondente.

Porém para descobrir o menor valor, é feita a comparação, mas o valor não é atribuído. Sei que por se tratar de uma variável sem valor definido ele "entende" como zero, logo, não há valor menor que zero.

 

Como proceder com relação à isso?

Sem título 2.png

  • Obrigado 1
Postado

@Hatchiko, isso mesmo que o @Flávio Pedroza disse, logo que pegar o primeiro valor atribua ele a variável menorV, e nas outras leituras não faça mais isso, e poderia ser assim:

 

escreva( "Informe o valor do ", contador, "º produto: " )
leia( valor )
se contador = 1 entao
  menorV = valor
fimse
se ( valor > maiorV ) entao
  maiorV <- valor
fimse

 

  • Curtir 1
  • Membro VIP
Postado
Em 26/12/2020 às 03:59, Hatchiko disse:

Sei que por se tratar de uma variável sem valor definido ele "entende" como zero, logo, não há valor menor que zero.

 

Exatamente... apenas troque "entende como" por "é inicializado com". Tecnicamente não existe uma variável sem valor... sempre vai ter algo lá... nem que seja null ou NaN, 😆.

 

Funcionaria mais ou menos assim: quanto executam-se um código no VisualG, vai sendo interpretado (VisualG não compila códigos) linha a linha ... da forma que lemos textos... ou seja: da esquerda para direita, de cima para baixo. Ao chegar lá no var, o o VisualG entente que é para "criar uma variável na memória"... mas como nada se cria nesse mundo, na verdade o VisualG vai "reservar um pedaço da memória RAM... de modo que consiga armazenar dados doe determinado tipo que foi definido". Assim, quando criou o menorV, ou qualquer outra variável - de qualquer tipo, essa variável vai ficar com o valor que já está lá na memória... também conhecido como "lixo"... no caso os bits que eram de outro programa (que pode ser do próprio programa de uma execução anterior.....). Acontece que, por conveniência, o desenvolvedor do VisualG resolveu "inicializar automaticamente todas as variáveis após declará-las". Entenda que isso é um "favor do programador". Daí, todas as variáveis ficam com um valor padrão (default). Para números é o 0; para caractere é ""; para logico é FALSO etc.

 

ADENDO:

  1. essa característica de inicializar as variáveis automaticamente é herdade de seu pai, o Pascal/Delphi;
  2. no Pascal não é inicializado dentro de funções e procedimentos. No VisualG é meio nebuloso, testei aqui e tá inicializado, mas lembro de casos que não ocorreu e deu problemas na lógica;
  3. na dúvida, sempre quando não é uma variável que vai ser lida, dê um valor inicial;
  4. em outras linguagens do dia a dia, é comum ser obrigatório inicializar (caso contrário, não compila ou pelo menos a IDE dá um alerta avisando)

 

  • Curtir 2
Postado
Em 26/12/2020 às 12:06, devair1010 disse:

@Hatchiko, isso mesmo que o @Flávio Pedroza disse, logo que pegar o primeiro valor atribua ele a variável menorV, e nas outras leituras não faça mais isso, e poderia ser assim:


escreva( "Informe o valor do ", contador, "º produto: " )
leia( valor )
se contador = 1 entao
  menorV = valor
fimse
se ( valor > maiorV ) entao
  maiorV <- valor
fimse

Mas de qualquer modo não indicará sempre que o numero 1 é o menor valor? Meio que já fica como o menor sem ter a necessidade de realizar novas comparações exceto se o usuário informar 0.1.

  • Curtir 1
  • Membro VIP
Postado
13 horas atrás, Hatchiko disse:

Mas de qualquer modo não indicará sempre que o numero 1 é o menor valor? Meio que já fica como o menor sem ter a necessidade de realizar novas comparações exceto se o usuário informar 0.1.

 

Creio que não. Esse trecho, infracitado, está inicializando com o "primeiro valor", que é diferente de inicializar  com o "valor 1".

 

13 horas atrás, Hatchiko disse:

se contador = 1 entao
  menorV = valor
fimse

 

No caso, sempre vai ficar com o primeiro valor... o se está verificando a quantidade já cadastrada, não o valor informado.

 

Só vai inicializar sempre com 1, se o primeiro valor informado pelo usuário sempre for 1. :)

 

Inclusive daria para fazer assim:

se contador = 1 entao
  menorV = valor
  maiorV = valor
fimSe

 

Já que o primeiro menor e o primeiro maior é o primeiro valor mesmo.

 

Adendo: quando é o primeiro valor, não precisaria verificar novamente. Poderia ficar algo como:

contator <- 0
enquanto (contador < 8) faca
   contador <- contador + 1

   escreva("Informe o valor do ", contador:1, "º produto: ")
   leia(valor)

   se contador = 1 entao
      menorV = valor
      maiorV = valor
   senao
      se (valor > maiorV) entao
         maiorV <- valor
      senao
         se (valor < menorV) entao
            menorV <- valor
         fimSe
      fimSe
   fimSe
fimEnquanto

 

Observe que um novo valor NUNCA poderá ser um novo menor e um novo maior ao mesmo tempo, por isso ficariam também com um senao entre eles. (Se o número for um novo menor, não precisa verificar se também seria um maior, pois nunca será.)

 

  • Curtir 2
  • Amei 1

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