quadratische Gleichungen
Die Ausführungen der
vorherigen Seiten über Programmfenster werden hier weitergeführt. Das Lösen quadratischer Gleichungen gehört zu den Grundlagen der Mathematik. Begriffe wie pq-Formel abc-Formel Mitternachtsformel kennt wahrscheinlich jeder. Ein Beispiel |
Es wird hier ein bash-script aufgeschrieben mit dem die Lösungen x
solcher Gleichungen
bestimmt werden. Beim Aufrufen des scriptes öffnet sich ein yad-Fenster in das man Werte eingeben kann. |
Nach dem Drücken der Berechnen-Schaltfläche erhält man die Lösungen für x |
Die eingegebenen Daten können Kommazahlen oder Punktzahlen oder Multiplikationen oder Brüche sein. Sogar mathematische Terme können eingegeben werden sofern diese so geschrieben werden daß bc diese versteht. Z.B. |
Das yad-Fenster enthält eine Bild-Datei die Sie auf Ihren Computer kopieren müssen. Diese Bild-Datei muß in dem selben Ordner liegen in dem auch das script abgelegt wird. |
Das script wird wieder in dem Ordner ~/Bla abgelegt: |
nano ~/Bla/quadratischeGLEICHUNG.sh |
Eingabe in den Editor |
#!/bin/bash yB=$(yad --title="quadratische Gleichung zweiten Grades" --width=350 --on-top --columns="1" --form --image-on-top --image-path=/home/$USER/Bla/ --image=quad.png --align=center --field=" a eingegen":CE --field=" b eingegen":CE --field=" c eingegen":CE --button="Berechnen" ) if [ $? -ne 0 ]; then exit fi IFS="|" read Ta Tb Tc <<< "$( echo "$yB" | sed 's/,/\./g' )" if [[ ! "$Ta" ]]; then zenity --info --width="280" --title="Fehler" --text "Eingabedaten für a nicht vorhanden\n\n mindestens 0 eingeben" exit fi if [[ ! "$Tb" ]]; then zenity --info --width="280" --title="Fehler" --text "Eingabedaten für b nicht vorhanden\n\n mindestens 0 eingeben" exit fi if [[ ! "$Tc" ]]; then zenity --info --width="280" --title="Fehler" --text "Eingabedaten für c nicht vorhanden\n\n mindestens 0 eingeben" exit fi Qaa=$( echo "$Ta/1" | bc -l | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//' ) Qbb=$( echo "$Tb/1" | bc -l | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//' ) Qa=$( echo "($Ta)/1" | bc -l ) Qb=$( echo "($Tb)/1" | bc -l ) Qc=$( echo "($Tc)/1" | bc -l ) Qe=$( echo "(-1)*($Qc)/$Qb" | bc -l ) if [ $(echo $Qe | grep - | wc -w) -eq 0 ]; then We=$( echo "$Qe+.000000000005" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//') else We=$( echo "$Qe-.000000000005" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//') fi if [ $Qaa = 0 ]; then if [ $Qbb = 0 ]; then zenity --info --width="280" --title="Fehler" --text "Eingabedaten erlauben keine x-Berechnung" exit else zenity --info --width="280" --icon-name=emblem-default --title="Ergebnis" --text "Es gibt nur eine\n\n Lösung\n\n $We" exit fi else Wu=$( echo "$Qb*$Qb-4*$Qc*$Qa" | bc -l ) fi Qf=$( echo "(-1)*($Qb)/(2*$Qa)" | bc -l ) if [ $(echo $Qf | grep - | wc -w) -eq 0 ]; then Wf=$( echo "$Qf+.000000000005" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//') else Wf=$( echo "$Qf-.000000000005" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//') fi Wuu=$( echo "$Wu/1" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//' | sed 's/-//' ) if [ $Wuu = 0 ]; then zenity --info --width="280" --icon-name=emblem-default --title="Ergebnis" --text "Es gibt nur eine\n\n Lösung\n\n $Wf" exit fi Ws=$( echo $Wu | sed 's/-//' ) if [ $(echo $Qa | grep - | wc -w) -eq 0 ]; then Wv=$( echo "e(l($Ws)/2)/(2*$Qa)+.000000000005" | bc -l ) else Wv=$( echo "e(l($Ws)/2)/(2*$Qa)-.000000000005" | bc -l ) fi if [ $(echo "$Qf + $Wv" | bc -l | grep - | wc -w) -eq 0 ]; then Wm=$( echo "$Qf + $Wv+.00000000005" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//') else Wm=$( echo "$Qf + $Wv-.00000000005" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//') fi if [ $(echo "$Qf - ($Wv)" | bc -l | grep - | wc -w) -eq 0 ]; then Wn=$( echo "$Qf - ($Wv)+.00000000005" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//') else Wn=$( echo "$Qf - ($Wv)-.00000000005" | bc -l | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//') fi Wi=$( echo $Wv | sed 's/-//' | sed -r '/\./s/.{10}$//' | sed 's/^0$/0.0/' | sed -r 's/^(-?)\./\10./' | sed -r 's/(\.?)0*$//' | sed 's/$/ i/') if [ $(echo "$Wu" | grep - | wc -w) -eq 0 ]; then zenity --info --width="280" --icon-name=emblem-default --title="Ergebnis" --text "Es gibt zwei\n\n reelle Lösungen \n\n $Wm \n\n $Wn" else zenity --info --width="280" --icon-name=emblem-default --title="Ergebnis" --text "Es gibt zwei\n\n komplexe Lösungen\n\n $Wf + $Wi \n\n $Wf - $Wi" fi |
Nun muß man das script ausführbar machen. |
chmod +x ~/Bla/quadratischeGLEICHUNG.sh |