Mình đang làm chương trình giải phương trình bậc hai trên linux: ax^2+bx+c=0.
nhưng khi làm đến điều kiện a=0, b!=0, c!=0 thì cho ra kết quả x=-c/b.
Có 2 trường hợp mình làm như sau:
+ b dương, c dương --> kết quả đúng.
+ b dương, c âm --> thì nó không ra kết quả.
Cụ thể chương trình của mình như sau:
n=$(echo "scale=3; -$c-$b" | bc -l)
zenity --info \
--text="x= -z/y = $n"
Các số a,b,c mình nhập bằng các câu lệnh sau:
a=`zenity --entry \
--text="a= "`
b=`zenity --entry \
--text="b= "`
c=`zenity --entry \
--text="c= "`
Mình chưa tìm ra lỗi, mong các bạn giúp đỡ.
Chỗ này phép toán là chia chứ nhỉ
n=$(echo "scale=3; -$c-$b" | bc -l) ---> n=$(echo "scale=3; -$c/$b" | bc -l)
Mình thấy nếu chuyển thành -($c)/($b) thì kết quả sẽ đúng trong mọi trường hợp đó bạn ạ.
Còn theo cách cũ, khi c < 0, ví dụ: c=-2, b=2 thì --2/2 sẽ là syntax error.
- - - Nội dung đã được cập nhật ngày 22-12-2014 lúc 11:13 AM - - -
Bạn có thể tham khảo chương trình shell giải phương trình bậc 2 như sau nhé:
#!/bin/bash
echo 'Phuong trinh bac 2 co dang A*x^2 + B*x + C = 0'
read -p "Doc vao gia tri A = " A
if [ $A = 0 ]; then
echo "Khong phai phuong trinh bac 2";
exit 1
fi
read -p "Doc vao gia tri B = " B
read -p "Doc vao gia tri C = " C
D=$(( ($B)*($B)-4*($A)*($C) ));
echo 'Gia tri Delta = ' $D
#shell chi thuc hien phep toan voi so nguyen
#nhung phep khong nguyen chuyen sang bc de thuc hien
if [ $D = 0 ]; then
echo 'Phuong trinh co nghiem kep'
x=$(echo "scale=3; -($B)/(2*($A))" | bc)
echo "x1 = x2 = $x"
exit 0
elif [ $D -gt 0 ]; then
echo 'PTB2 co 2 nghiem phan biet'
x1=$(echo "scale=3; (-($B)+sqrt($D))/(2*($A))" | bc)
x2=$(echo "scale=3; (-($B)-sqrt($D))/(2*($A))" | bc)
echo "x1 = $x1"
echo "x2 = $x2"
exit 0
else
echo 'PTB2 co nghiem phuc'
phanthuc=$(echo "scale=3; -($B)/(2*($A))" | bc)
phanao=$(echo "scale=3; sqrt(-($D))/(2*($A))" | bc)
echo "x1 = ($phanthuc + $phanao * i)"
echo "x2 = ($phanthuc - $phanao * i)"
fi
exit 0
Đã được chỉnh sửa lần cuối bởi anoni : 22-12-2014 lúc 11:18 AM.