Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
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 đỡ.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  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ông cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã đượ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