Ajuda com script de maior e menor números

1. Ajuda com script de maior e menor números

JGC
calasans

(usa Outra)

Enviado em 07/09/2019 - 18:34h

Preciso criar um script que apresente a maior e menor média de cinco alunos..



media1= `echo " scale=2; (n1_aluno1+n2_aluno1) /2" |bc
media2= `echo " scale=2; (n1_aluno2+n2_aluno2) /2" |bc
media3= `echo " scale=2; (n1_aluno3+n2_aluno3) /2" |bc
media4= `echo " scale=2; (n1_aluno4+n2_aluno4) /2" |bc
media5= `echo " scale=2; (n1_aluno5+n2_aluno5) /2" |bc


Essa foi a forma que eu utilizei para calcular as médias de cada aluno..
Quando tento fazer os comandos para ver qual deles terá a maior e menor nota não consigo encontrar o resultado..


if [ $media1 > $media2];
then
echo "A maior nota é a do aluno1.. média final [$media1].."
elif [$media 1 > $media3]
then
echo "A maior nota é a do aluno1.. média final [$media1].."
else
echo "O aluno 1 não possui a maior nota.."
fi


Utilizando o "IF" funciona, porém o aluno 1 obtém a maior nota sempre, mesmo quando outro aluno obteve nota maior..
Se alguém puder dar uma ajuda agradeço..


  


3. Re: Ajuda com script de maior e menor números

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/09/2019 - 22:44h

calasans escreveu:

Preciso criar um script que apresente a maior e menor média de cinco alunos..



media1= `echo " scale=2; (n1_aluno1+n2_aluno1) /2" |bc
media2= `echo " scale=2; (n1_aluno2+n2_aluno2) /2" |bc
media3= `echo " scale=2; (n1_aluno3+n2_aluno3) /2" |bc
media4= `echo " scale=2; (n1_aluno4+n2_aluno4) /2" |bc
media5= `echo " scale=2; (n1_aluno5+n2_aluno5) /2" |bc


Essa foi a forma que eu utilizei para calcular as médias de cada aluno..
Quando tento fazer os comandos para ver qual deles terá a maior e menor nota não consigo encontrar o resultado..


if [ $media1 > $media2];
then
echo "A maior nota é a do aluno1.. média final [$media1].."
elif [$media 1 > $media3]
then
echo "A maior nota é a do aluno1.. média final [$media1].."
else
echo "O aluno 1 não possui a maior nota.."
fi


Utilizando o "IF" funciona, porém o aluno 1 obtém a maior nota sempre, mesmo quando outro aluno obteve nota maior..
Se alguém puder dar uma ajuda agradeço..

Boa noite Calasans.
o seu "test" está incorreto!
[ $media1 > $media2];
O correto é
[ $media1 -gt $media2 ];
Ou
(($media1 > $media2))
O Detalhe é que só testa números inteiros....

Para contornar e simplificar,
Use o "sort".
Exemplo:
m[0]=$(bc <<< "scale=2;(9+6)/2") #Exemplo de uso do "bc", não é necessário o "echo"
#Médias "Como Arrays"
m[0]=9.99;m[1]=4.25;m[2]=2.50;m[3]=8.80;m[4]=8.50;m[5]=3.00;m[6]=9.90;m[7]=7.70
#Ordena em ordem crescente:
printf "%s\n" ${m[@]}|sort -g
2.50
3.00
4.25
7.70
8.50
8.80
9.90
9.99

#Pega a menor
printf "%s\n" ${m[@]}|sort -g|head -n1

#Pega a maior
printf "%s\n" ${m[@]}|sort -g|tail -n1

Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver