Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Lỗi khi trừ số âm trong linux?

  1. #1
    Ngày gia nhập
    08 2013
    Nơi ở
    Hà Nội
    Bài viết
    4

    Mặc định Lỗi khi trừ số âm trong linux?

    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 đỡ.

  2. #2
    Ngày gia nhập
    08 2014
    Bài viết
    4

    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.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn