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

Vou ressuscitar esse post pq tenho uma dúvida ainda kkkkkk…

Nesse caso eu estou adicionando uma condicional para que ele funcione

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

Mas será que eu consigo fazer sem essa condicional apenas usando o Senão?
Ex.

      cont <- 1
      S <- 0
      Enquanto (cont <= 5) faça
        Escreva ("Digite o ", cont, "º. valor: ")
        Leia (N)
        Se (N > maior) então
           maior <- N
        Senão
           menor <- N
        Fimse
        S <- S + N
        cont <- cont + 1
      FimEnquanto
      Escreval ("Terminei de contar!")
      Escreval ("O resultado da soma dos valores é: ", S)
      Escreval ("E o maior valor digitado foi: ", maior)
      Escreva ("E o menor valor digitado foi: ", menor)
fimalgoritmo

Depende do cenário, a condicional existe porquê o número lido pode ser positivo ou negativo, e neste caso não existe uma forma de saber os valores estabelecendo um parâmetro base, por isso a primeira iteração do usuário quando ele fornece o primeiro número o consideramos como sendo o maior e menor já lido, à partir disso vai sendo atualizado com os valores subsequentes!

Por isso precisa ser da forma como foi estruturado, saca?

Agora, vamos supor que o algorítimo só permita serem lidos números inteiros positivos, neste caso os valores de maior e menor poderiam ser inicializados em zero e à partir daí irem sendo atualizados com os subsequentes, pois neste caso existe um critério mínimo.

Mesmo nas demais atualizações o senão não caberia, pois você só deve atualizar o menor caso o número lido seja menor que o atual valor que ele armazena, percebe que mesmo o número lido não sendo maior que o maior valor armazenado, isso não quer dizer que ele seja menor que menor armazenado.

1 curtida

Perfeito mano, muito obrigado pela explicação!

Boa tarde amigão.

Se você utilizou a estrutura condicional SE para identificar o maior número, basta finalizar a estrutura com o SENAO também. Segue o exemplo:

var
contador, N, S, maior, menor:inteiro
inicio
contador ← 1
S ← 0
Enquanto (contador <=5) faca
EscrevaL ("Digite o ", contador, "º número: ")
Leia (N)
Se (N > maior) entao
maior ← N
Senao
menor ← N
FimSE
S ← S+N
contador ← contador +1
FimEnquanto
EscrevaL (“A soma de todos os valores foi:”, S)
EscrevaL (“O maior valor digitado foi:”, maior)
EscrevaL (“O menor valor digitado foi:”, menor)
fimalgoritmo

11 meses depois para colocar um algoritmo errado?
O menor vai devolver valor errado.

1 curtida

Irmão, bom dia. Se eu coloquei aí é pq foi testado. Você testou ?

Acho que é a segunda vez que vou comentar algo aqui, mas fala sério.

Só inverte a entrada, digita: 1,2,3,5,10.

E manda o print do resultado…

Obs.: acredito que esse print nunca irá aparecer no fórum…

Digitando os números de forma aleatória funciona, em ordem crescente não, mas então qual seria a solução ?

Um bocadinho de noção e humildade precisa-se por aí.
Não podes vir ressuscitar tópicos antigos com soluções que não estão totalmente corretas e partir a insultar quem te corrige.
Como já alguém constatou, a tua solução só funciona quando os números estão por ordem crescente. Ora, para isso, não preciso de andar a comparar os números todos, o menor é sempre o primeiro e o maior é o último.

A solução para qualquer caso, já está aqui acima, colocada há quatro anos…

5 curtidas

Tem que trocar esse seu “se - senão” por dois “se”.

Você está assumindo que se um número não é maior então ele é menor e isso está errado.

cara, de fato deu certo. Teria como você explicar o pq da forma em que desenvolvi não da certo ? veja:

var
n,s,maior,menor,inte,c:inteiro
inicio
Escreval ("Digite quantos números serão informados: ")
leia (inte)
s<-0
c<-1
repita
Escreval ("Digite o ",c,"° número: ")
leia (n)
se (n>maior) entao
maior<-n
fimse
se (n<menor) entao
menor<-n
fimse
s<-s+n
c<-c+1
ate (c>inte)
Escreval ("A soma entre os números é: ", s)
Escreval ("O número maior entre els é: ", maior)
Escreval ("O número menor entre eles é: ",menor)

fimalgoritmo

É o mesmo problema da dúvida original do post!

A explicação está algumas respostas acima:

1 curtida

deu pra entender perfeitamente, valeu !

então, para que o programa execute as condições de maior ou menor, é necessário que ele tenha um valor para ele comparar, certo ? eu fiz outro codigo, so que agora, sem estrura de repetição. Ele deu certo, mas será que não dava para melhorar ele, ou algo do tipo.
var
n1,n2,maior,menor:inteiro
inicio
Escreval ("Digite dois números: ")
leia (n1,n2)
maior<-0
menor <-n2
se (n1>maior) entao
maior <-n1
fimse
se (n2>maior) entao
maior<-n2
fimse
se (n1<menor) entao
menor<-n1
fimse
se (n2<menor) entao
menor<-n2
fimse
escreval (menor)
escreval (maior)

fimalgoritmo

Para comparar apenas dois números não precisas de todos esses ifs, simplesmente comparas os dois números:

se (n1 > n2) entao
    maior = n1
    menor = n2
senao
    maior = n2
    menor = n1
fimse
1 curtida

verdade, valeu !!