Ler 10 números e dizer o maior e o menor

Comecei semana passada com o Visualg, e já estou dando cabeçada.
Peguei esse exercício na web:
“Escreva um programa que solicita 10 números ao usuário, através de um laço while, e ao final mostre qual destes números é o maior.”
E escrevi isso:

algoritmo "semnome"
// Função :
// Autor :
// Data : 30/05/2019
// Seção de Declarações 
var
num,cont,maior,menor:inteiro
inicio
// Seção de Comandos
cont<-1
enquanto cont<10 faca
         escreval("Digite 10 números aleatoriamente")
         leia(num)
         maior<-num
         menor<-num
         cont<-cont+1
         escreval("Digite 10 números aleatoriamente")
         leia(num)
                  se num>maior entao
                  maior<-num
                  fimse
                  se num<menor entao
                  menor<-num
                  fimse
         cont<-cont+1
fimenquanto
escreval("O número maior é ",maior," e o número menor é ",menor)
fimalgoritmo

Testei digitando de 1 a 10.
A parte do número maior até que funcionou, mas o número menor está dando o 9.
Simplesmente não consigo entender porque não está dando certo.

Você não pode fazer o maior<-num e nem menor<-num porque na hora do teste “se” ele vai testar por exemplo 9 > 9 e 9 < 9 entao as variaveis maior e menor irão conter o valores digitados

@guilherme-borges
Não entendi.
Na entrada do processamento, com o primeiro número digitado, as variáveis “maior” e “menor” vão receber o mesmo valor, porque é o primeiro número, não tem com o que comparar.
A partir do segundo número digitado, é feita uma comparação, se o número digitado for maior que a variável “maior” então essa variável assume esse valor (o do número digitado).
A mesma coisa com a variável “menor”.
Ainda não consegui entender o meu erro.

Faça o teste começando com o valor 10 e vai até 1 você vai perceber que a variavel a maior irá receber o valor do ultimo número digitado ou seja 1, então você não pode no começo do “enquanto” sobreescrever a variável com o valor digitado porque você quer guardar o maior valor independente da ordem.

1 curtida

Hummm …
Então acho que entendi.
Se fosse um intervalo fechado, eu colocaria os dois extremos.
Dessa forma, “menor” começaria com 0 e “maior” começaria com 10, por exemplo.
Bom acho que entendi o erro, agora falta achar a solução.
Valeu, obrigado pela força.
Um abraço!

Tente assim:

escreval("Digite 10 números aleatoriamente")    
cont<-1
    enquanto cont<10 faca                              	
    	leia(num)
    	
    	se cont=1 entao
    		maior<-num
    		menor<-num
    	fimse
    	
    	se num>maior entao
    		maior<-num
    	fimse
    	
    	se num<menor entao
    		menor<-num
    	fimse
    	
    	cont<-cont+1
    fimenquanto
3 curtidas

Agora tu entregou a paçoca devia ter deixado ele quebrar a cabeça kkk

1 curtida

@guilherme-borges
kkk … “entregou a paçoca” é ótimo, to passando mal de tanto rir aqui.
Mas vou te dizer, eu sou tão cabeçudo que nem com o cara escrevendo pra mim eu ainda não sei se entendi.
Mas vou, como você disse, quebrar a cabeça até entender.
Valeu, gente!

1 curtida

Sem querer ser chato, mas não conseguindo evitar de ser porque eu já nasci assim.
Mas o seu algorítimo não diz qual é o maior e qual é o menor.
Vou tentar completar ele aqui e ver se dá certo.

Beleza!
Funcionou!
Tanto crescente quanto decrescentemente.
Valeu!

Boa colocação kkkk

Tu viu que só modifiquei uma parte do algoritmo né?! (que é a que coloque na resposta)

Não ia refazer o algoritmo todo pra você, ajustei o ponto em que você estava fazendo errado!

Demorou mas agora eu acho que entendi.
A lógica é a seguinte, eu não estava amarrando as comparações ao primeiro número digitado, dessa forma, como o meu amigo Guilherme tentou me explicar, mas eu sou muito burro pra entender, os números acabavam sendo comparados com eles mesmos.
Dessa forma, o maior número seria sempre o último número digitado e o menor seria sempre o penúltimo.
Acho que é isso, né?

Bloco de citação
Tu viu que só modifiquei uma parte do algoritmo né?

Eu sou meio lerdo pra entender as paradas, achei que vinha o algorítimo inteiro, só pra eu rodar e ver se deixo de ser burro e aprendo.

Valeu, gente, vou encerrar esse post.
Abraço a todos os envolvidos.

Também estava com esse deafio, só fui conseguir resolver quando procurei a resposta. :frowning: kkkk

Cara, nem lembrava mais dessa parada.
Já se passaram 2 anos e eu não aprendi nada de programação … kkk

Agora, falando sério, aconteceu de tudo na minha vida nesses últimos anos.
Mas vou retomar essa ideia.

VLW!

Eu tinha começado um curso técnico de desenvolvimento de sistema no começo do ano passado, mas por conta da pandemia eu tive que trancar, e preferir estudar por conta no youtube. https://www.youtube.com/watch?v=8mei6uVttho&list=PLHz_AreHm4dmSj0MHol_aoNYCSGFqvfXV

Eu também estou tentando aprender a programar pelo YouTube.
Só que eu estou que nem cego no meio de um tiroteio, estou atirando pra todos os lados mas não estou acertando nada.
Isso se chama desespero.
Preciso me acalmar e me concentrar em uma direção.
Estava seguindo essa playlist:

Vou voltar a seguir e retomar esse curso.
Boa sorte!

Galera não estou entendendo o pq funciona o menor e o maior com esse codigo?
sem ele funciona só o maior… eu faço a leitura dele mas não consigo encaixar na logica… se cont for igual a 1 então o maior recebe o numero e o menor recebe o numero tbm…

se cont=1 entao
maior<-num
menor<-num
fimse

Simples!

Quando o programa inicia, ainda não existe maior e menor, correto?

Logo o primeiro número informado, ou seja (cont = 1), passa a ser considerado ao mesmo tempo sendo o maior número e também o menor número, afinal, só existe ele até então!

Quando mais números são informados na sequência, ou seja (cont > 1), fazemos a verificação se o número que foi informado é maior que o número que foi considerado como maior anteriormente, e da mesma forma fazemos esta verificação para o menor.

Sacou?

1 curtida

Eu estava com a mesma dúvida o porque ele não aceitava o menor, aceitava apenas o maior e essa explicação simples me fez entender que o primeiro número é os dois, vlw