piątek,
Bash: Pierwiastki równania kwadratowego
Rozwiązywanie równań kwadratowych bezpośrednio w czystym bash, bez korzystania z zewnętrznych narzędzi takich jak bc
, jest mocno skomplikowane, ponieważ bash nie obsługuje obliczeń zmiennoprzecinkowych ani pierwiastków kwadratowych. Można to osiągnąć z pewnymi ograniczeniami, jeśli współczynniki i rozwiązania są liczbami całkowitymi.
Dla przypomnienia:
- równanie kwadratowe ma postać ax^2 + bx + c = 0;
- delta = b^2 - 4ac;
- pierwszy pierwiastek: x1 = (-b + sqrt(delta)) / (2a);
- drugi pierwiastek: x2 = (-b - sqrt(delta)) / (2a)
gdzie
a
,b
,c
są współczynnikami równania kwadratowego;Delta
jest wyróżnikiem, określającym naturę pierwiastków;sqrt(Delta)
oznacza pierwiastek kwadratowy z delty.
Oto przykładowy skrypt Bash, który oblicza pierwiastki równania kwadratowego ( ax^2 + bx + c = 0 ) dla całkowitych współczynników i całkowitych rozwiązań:
#!/bin/bash
# Wartości współczynników
a=1
b=-3
c=2
# Obliczanie delty
delta=$((b*b - 4*a*c))
# Sprawdzanie, czy delta jest większa lub równa zero
if [ "$delta" -lt 0 ]; then
echo "Równanie nie ma rozwiązań rzeczywistych."
exit
fi
# Obliczanie pierwiastka kwadratowego z delty
sqrt_delta=0
while [ $((sqrt_delta * sqrt_delta)) -lt "$delta" ]; do
sqrt_delta=$((sqrt_delta + 1))
done
# Sprawdzanie, czy delta jest kwadratem liczby całkowitej
if [ $((sqrt_delta * sqrt_delta)) -ne "$delta" ]; then
echo "Równanie nie ma rozwiązań w liczbach całkowitych."
exit
fi
# Obliczanie pierwiastków - krok pierwszy
x1=$((-b + sqrt_delta))
x2=$((-b - sqrt_delta))
# Dzielenie przez 2a
x1=$((x1 / (2*a)))
x2=$((x2 / (2*a)))
echo "Pierwiastki równania kwadratowego to: x1 = $x1, x2 = $x2"
Ten skrypt:
- oblicza deltę;
- sprawdza, czy delta jest ujemna (brak rozwiązań rzeczywistych);
- oblicza pierwiastek kwadratowy z delty w sposób przybliżony (tylko dla liczb całkowitych);
- sprawdza, czy delta jest kwadratem liczby całkowitej (w przeciwnym razie równanie nie ma rozwiązań całkowitych);
- oblicza pierwiastki równania.
Pamiętaj, że ten skrypt działa tylko dla przypadków, gdzie wszystkie współczynniki są liczbami całkowitymi i gdzie rozwiązania są również liczbami całkowitymi. W przypadkach, gdy rozwiązania są liczbami zmiennoprzecinkowymi, konieczne byłoby użycie narzędzi zewnętrznych, takich jak bc
.
Modyfikacja skryptu
Skrypt może być wywoływany z przekazaniem argumentów, po niewielkiej przeróbce:
# Wartości współczynników
a=$1
b=$2
c=$3