Giải phương trình bậc 3 bằng Python

Đề bài: Viết chương trình bằng ngôn ngữ lập trình Python giải phương trình bậc 2 (đủ): ax^2 + bx + c = 0 (a, b != 0)


Yêu cầu kiến thức:

  • Phân tích, thiết kế giải thuật cho bài toán giải phương trình bậc 2

Code tham khảo dưới đây được viết trên Python ver 3.8:

# Ho ten: Hoang Van Tuan # Website: timoday.edu.vn # Thu vien import math # Nhap du lieu a = float(input('Nhap he so a: ')) while a == 0: if a == 0: print('Hay nhap lai he so a!') a = float(input('Nhap he so a: ')) b = float(input('Nhap he so b: ')) while b == 0: if b == 0: print('Hay nhap lai he so b!') b = float(input('Nhap he so b: ')) c = float(input('Nhap he so c: ')) # Giai va bien luan delta = b * b - 4 * a * c if delta > 0: x1 = (-b + math.sqrt(delta)) / (2 * a) x2 = (-b - math.sqrt(delta)) / (2 * a) print('Phuong trinh co 2 nghiem phan biet la:') print('x1 = ', x1) print('x2 = ', x2) elif delta == 0: x = -b / (2 * a) print('Phuong trinh co nghiem kep la:') print('x1 = x2 = ', x) else: print('Phuong trinh vo nghiem')


Kết luận:

  • Bạn có thể tham khảo thêm khóa học lập trình C từ cơ bản đến nâng cao. Xem tại đây
  • Bạn có thể tham khảo thêm khóa học Thành thạo lập trình C#. Xem tại đây

Hướng dẫn chi tiết:

Phương trình bậc 1 (bậc nhất) là phương trình có dạng: ax + b = 0

Sau đây là một giải thuật cho phương trình bậc nhất:

+ Nhập vào các hệ số a và b

+ Nếu a==0:

- Nếu b==0 => Vô số nghiệm (hay vô định)

- Nếu b!=0 => Vô nghiệm

+ Nếu a!=0:

Phương trình có nghiệm là x = -b/a

Còn dưới đây là lưu đồ cho thuật toán:

Giải phương trình bậc 3 bằng Python

Sau đây là đoạn code demo:

# Bài toán: Hãy viết chương trình giải phương

# trình bậc nhất 1 ẩn: ax + b = 0

# Lập trình:

a = float(input(

"Nhập hệ số a: "

)) b = float(input(

"Nhập hệ số b: "

))

if

a ==

0

:

if

b ==

0

: print(

"Vô số nghiệm"

)

else

: print(

"Vô nghiệm"

)

else

: print(

"Phương trình có nghiệm x ="

,

-b / a)

Tham khảo:

Hãy viết chương trình giải phương trình bậc hai một ẩn ax^2 + bx + c = 0 bằng Python, đây là phương trình mà bạn đã được học ở bậc trung học cơ sở lớp 9.

Giải phương trình bậc 3 bằng Python

Bài giải

-------------------- ######## --------------------

Trước tiên bạn cần phải biết cách giải phương trình bậc hai, và cũng từ công thức toán học đó mà ta đưa ra được thuật toán giải phương trình này bằng ngôn ngữ Python.

Giải phương trình bậc 3 bằng Python

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Để giải phương trình bậc hai ax^2 + bx + c = 0 thì ta phải tính chỉ số Delta, dựa vào kết quả này mà ta xác định được nghiệm. Cụ thể như hình sau:

Giải phương trình bậc 3 bằng Python

Ok, bây giờ ta sẽ viết chương trình trong Python như sau:

Bài viết này được đăng tại [free tuts .net]

Bước 1: Nhập các số a, b và c. Kiểm tra điều kiện một trong hai số a và b phải khác 0.

Bước 2: Tính Delta

Bước 3: Dựa vào Delta để tìm ra nghiệm của phương trình (có 3 trường hợp như trong hình).

# HỌC PYTHON TẠI FREETUTS.NET # TÁC GIẢ: CƯỜNG NGUYỄN # Giải phương trình bậc hai 1 ẩn ax^2 + bx + c = 0 import math print("Chương trình đăng tại freetuts.net!") # Nhập số a và kiểm tra điều kiện khác 0 print("Nhập vào số a: ") a = int(input()) print("Nhập vào số b: ") b = int(input()) while True: if a == 0 and b == 0: print("Một trong hai số a và b phải khác 0: ") print("Nhập lại số a: ") a = int(input()) print("Nhập lại số b: ") b = int(input()) else: break # Nhập số c print("Nhập vào số c: ") c = int(input()) # Tính Delta delta = b**2 - 4 * a * c # Nghiệm if delta < 0: print("Phương trình vô nghiệm") elif delta == 0: print("Phương trình có nghiệm kép x1 = x2 = ", -(b / (2 * a)) ) else: print("Phương trình có hai nghiệm phân biệt:") print("x1 = ", (-(b) + math.sqrt(delta))/(2*a) ) print("x1 = ", (-(b) - math.sqrt(delta))/(2*a) )

Ví dụ mình giải phương trình x^2 - 5x + 4 = 0 thì có hai nghiệm: x1 = 4 và x2 = 1.

Giải phương trình bậc 3 bằng Python

Danh sách bài tập Python cơ bản

Cùng chuyên mục:

Hãy viết chương trình giải phương trình bậc nhất một ẩn bằng Python (ax + b = 0), đây là bài toán giải phương trình khá đơn giản đã được học ở cấp II, hãy dùng ngôn ngữ Python để giải nó.

Bài giải

-------------------- ######## --------------------

Trước tiên bạn cần phải biết cách giải phương trình bậc nhất một ẩn trong toán học đã nhé, sau đó bạn mới biết thuật toán để giải bằng Python.

Giải phương trình bậc 3 bằng Python

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Giả sử ta có phương trình ax + b = 0, đây là phương trình chỉ có một nghiệm duy nhất đó là: x = -b/a.

Vậy các bước để giải nó trong Python như sau:

Bước 1: Yêu cầu nhập vào hai số a và b

Bài viết này được đăng tại [free tuts .net]

Bước 2: Kiểm tra nếu a = 0 thì yêu cầu nhập lại số a, vì phương trình này có điều kiện a # 0.

Bước 2: Tìm nghiệm bằng công thức x = -b/a

Bài giải như sau:

# HỌC PYTHON TẠI FREETUTS.NET # TÁC GIẢ: CƯỜNG NGUYỄN # Giải phương trình bậc nhất 1 ẩn ax + b = 0 print("Chương trình đăng tại freetuts.net!") # Nhập số a và kiểm tra điều kiện khác 0 print("Nhập vào số a: ") a = int(input()) while True: if a == 0: print("Vui lòng nhập số a khác 0: ") a = int(input()) else: break # Nhập số b print("Nhập vào số b: ") b = int(input()) # Nghiệm print("Nghiệm của phương trình là x = ", (-b / a))

Chạy chương trình lên và nếu bạn nhập a = 0 thì Python sẽ nhắc bạn nhập lại như sau:

Giải phương trình bậc 3 bằng Python

Nhập đúng thì kết quả sẽ như hình sau:

Giải phương trình bậc 3 bằng Python

Danh sách bài tập Python cơ bản

Cùng chuyên mục:

Bài toán

Giải phương trình bậc 3


#include 

#include 


#include 

#include 

#include 

using namespace std;


#define float long double


float a, b, c, d;

vector<float> Result;


float h(float x) { return a * x * x * x + b * x * x + c * x + d; }

int sign(float x) {

    if (fabs(x) <= 1e-9return 0;

    return x > 0 ? 1 : -1;

}

void decide(float x) { Result.push_back(x); }


bool solve(float afloat bfloat cfloat &x1float &x2) {

    if (sign(a) == 0) {

        if (sign(b) == 0return false;

        x1 = x2 = -c / b;

        return true;

    }

    float d = b * b - 4 * a * c;

    if (sign(d) == 0) {

        x1 = x2 = -b / (2 * a);

        return true;

    } else if (sign(d) > 0) {

        x1 = (-b - sqrt(d)) / (2 * a);

        x2 = (-b + sqrt(d)) / (2 * a);

        if (x1 > x2) swap(x1, x2);

        return true;

    }

    return false;

}


void search1(float llfloat rr) {

    if (::isinf(ll)) {

        ll = rr - 100;

        while (sign(h(ll)) > 0) ll -= (rr - ll);

    }

    if (::isinf(rr)) {

        rr = ll + 100;

        while (sign(h(rr)) < 0) rr += (rr - ll);

    }

    //printf("search1(%Lg, %Lg)\n", ll, rr);

    if (sign(h(ll)) == 0return decide(ll);

    if (sign(h(rr)) == 0return decide(rr);

    if (sign(h(ll)) > 0 || sign(h(rr)) < 0return;


    float mm = (ll + rr) / 2;

    for (int i = 1; i <= 100; i++) {

        h(mm) > 0 ? rr = mm : ll = mm;

        mm = (ll + rr) / 2;

    }

    return decide(mm);

}


void search2(float llfloat rr) {

    //printf("search2(%g, %g)\n", ll, rr);

    if (sign(h(ll)) == 0return decide(ll);

    if (sign(h(rr)) == 0return decide(rr);

    if (sign(h(ll)) < 0 || sign(h(rr)) > 0return;


    float mm = (ll + rr) / 2;

    for (int i = 1; i <= 100; i++) {

        h(mm) < 0 ? rr = mm : ll = mm;

        mm = (ll + rr) / 2;

    }

    return decide(mm);

}


int main() {

    while (cin >> a >> b >> c >> d) {

        if (sign(a) == 0) {

            float x1, x2;

            if (solve(b, c, d, x1, x2)) {

                decide(x1);

                decide(x2);

            }

        } else {

            if (a < 0) {

                a = -a, b = -b, c = -c, d = -d;

            }

            float x1, x2;

            if (solve(3 * a, 2 * b, c, x1, x2)) {

                search1(-1.0 / 0.0, x1);

                search2(x1, x2);

                search1(x2, +1.0 / 0.0);

            } else {

                search1(-1.0 / 0.00);

                search1(0, +1.0 / 0.0);

            }

        }

        sort(Result.begin(), Result.end());

        Result.erase(unique(Result.begin(), Result.end()), Result.end());

        cout.precision(6);

        for (float x : Result)

            cout << (fabs(x) <= 1e-15 ? 0.0 : x) << endl;

        Result.clear();

    }

}