Calcular a média das duas maiores notas das três obtidas.

1. Calcular a média das duas maiores notas das três obtidas.

Júlio Cesar da Penha
jpenhainfo

(usa Ubuntu)

Enviado em 08/09/2015 - 23:58h

Pessoal, boa noite.

Estou querendo criar um shell script, onde das 3 notas obtidas, eu escolho as duas maiores e divido por 2. Sendo que: se o resultado de qualquer nota for menor do que 4, é considerado nota 0. Consegui chegar até aqui:

clear
#!/bin/bash
read -p "Digite a nota 1: " nota1
read -p "Digite a nota 2: " nota2
read -p "Digite a nota 3: " nota3

if [ $nota1 -ge 0 -a $nota1 -ge 10 -a $nota2 -ge 0 -a $nota2 -ge 10 -a $nota3 -ge 0 -a $nota3 -ge 10 ] ;then
echo "Beleza"

else
echo "As notas deverao estar entre 0 e 10"

fi

Só consegui chegar até ai. Alguém poderia me dar uma dica?




  


2. Re: Calcular a média das duas maiores notas das três obtidas.

Perfil removido
removido

(usa Nenhuma)

Enviado em 09/09/2015 - 01:23h

Você pode fazer uma substituição automática para o caso de a variável ser vazia ela receber o valor zero automaticamente:

if [ -z "nota1"]; then
nota1=0
fi

Prá fazer cálculos inteiros você pode usar:

* comando expr: http://www.vivaolinux.com.br/artigo/expr-Definicao-e-uso-do-comando/
* comando let: let m=(a+b+c)/3
* duplo parêntesis: m=$(((a+b+c)/3))
* colchete: m=$[(a+b+c)/3]

que gerará cálculos sem casas decimais. Como a média é 4, o valor da soma tem que ser maior ou igual a 12.
Afinal. 12/3 = 4 que é a média. Então você não trabalha com divisão e apenas trabalha om somas. Faz um -lt 12 ou um -ge 12.

E com cálculos fracionários o comando bc:

m=$(echo -n "scale=2; ($a+$b+$c)/3.0" | bc -l)

que gerará médias com duas casas decimais. O problema fica sendo como identificar uma entrada como 1.5 ou como válida.

Como é um script, você faz a verificação de dígitos válida read a read, que fica melhor.

Prá saber se foram digitados só dígitos pode ser feita uma verificação pelo BASH na forma a=${a//[0-9]/} ou ou com sed, na forma a=$(echo -n $a | sed 's/[0-9]//g') que deverão ficar vazios se forem digitados apenas dígitos de 0 a 9.

Outra verificação é para não ser digitados números como 01 ou 0009, pois dará erro.

--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts