lunedì 31 ottobre 2011

Bash e le equazioni di secondo grado

Ecco un piccolo script (semplice) che risolve le equazioni di secondo grado complete.
L'equazione di secondo grado completa è quel tipo equazione

ax^2 + bx + c = 0

dove tutti i coifficienti (a, b e c) sono diversi da zero.

Essa viene risolta con il cosiddetto metodo del completamento del quadrato. Non mi dilungo su queste cose; anche perchè lo scopo del post non è quello di fare una lezione sulle equazioni quadratiche di II grado :D

Vi propongo tre esempi:

     5 x^2 -3 x -8 = 0 (x^2 vuol dire x elevato a due)

l'equazione ammette due risultati reali distinti

    4 x^2 +12 x + 9 = 0

l'equazione ammette due risultati reali coincidenti

   3 x^2 +7 x + 8 = 0

l'equazione non ammette risultati reali

Lo script vi chiede  tre coifficienti.

Prendendo in considerazione la prima equazione,

5 x^2 - 3 x -8 = 0

il primo coifficiente (a) è 5, il secondo coifficiente (b) è -3 il terzo coifficiente (c) è -8.

Lo script è stato realizzato con la collaborazione preziosa del caro Lightuono :)



#!/bin/bash
# equazione secondo grado complete
#author: Bit3Lux, Lightuono.
echo "dammi il primo termine noto (a)"
read a
echo "dammi il secondo termine noto (b)"
read b
echo "dammi il terzo termine noto (c)"
read c
#Calcoliamo il delta
D=$(echo "scale=2; ($b^2)-(4*$a*$c)" | bc)
if [[ $(echo "$D" | grep -o "-") == "-" ]]; then
      echo "l'equazione non ammette risultati reali"
      exit 1
fi
rq=$(echo "scale=2; sqrt($D)" | bc)
b=$((b*-1))
case $D in
    [0-9]*)
        echo "l'equazione ammette due risultati reali distinti"
         x1=$(echo "scale=2; ($b+$rq)/(2*$a)" | bc)
         echo "x1 = $x1"
         x2=$(echo "scale=2; ($b-$rq)/(2*$a)" | bc)
         echo "x2 = $x2"
    ;;
    0)
        echo "l'equazione ammette due risultati reali coincidenti"
        x=$(echo "scale=2; ($b+$rq)/(2*$a)" | bc)
        echo "x1=$x, x2=$x"
    ;;
    *)
        echo "l'equazione non ammette risultati reali"
    ;;
esac
exit 0


Create un documento di testo sulla scrivania, chiamatelo equa2.sh e incollateci il codice di cui sopra.

Poi dal terminale spostatevi sulla scrivania

$ cd Scrivania

rendete eseguibile lo script

$ chmod +x equa2.sh

Per lanciarlo

$ ./equa2.sh

Ciao :))

3 commenti:

  1. Lo script fu creato dalle viscere di un capitolo di matematica :)

    RispondiElimina
  2. @Cooksappe
    Ma no, è semplice! :D
    Delta=0, risultati coincidenti, x1=x2
    Delta>0, risultati reali distinti
    Delta<0 nessun risultato reale.
    Con D=$(echo "scale=2; ($b^2)-(4*$a*$c)" | bc)
    Calcolo il delta.
    Con if [[ $(echo "$D" | grep -o "-") == "-" ]]; then
    Controllo se il Delta è negativo;
    Con il Costrutto case controllo se il delta è maggiore o uguale a zero :))

    RispondiElimina