Giải phương trình bậc 2 trong Java – Code mẫu chi tiết

0
2182
code giai phuong trình bac 2 trong java swing

Bài tập viết chương trình giải phương trình bậc 2 trong java swing hướng đối tượng. Giải PT bậc 2, PT bậc 1 với Java có ứng dụng try catch bắt lỗi nhập dữ liệu.

1. Giới thiệu bài toán

Viết chương trình giải phương trình bậc 2 là một bài tập đơn giản và thường gặp phải khi bạn mới học lập trình. Giải PT bậc 2 giúp bạn hiểu rõ hơn cấu trúc if, else và cách sử dụng biến trong ngôn ngữ lập trình. Cách giải quyết bài toán theo tư duy lập trình đều giống nhau với các ngôn ngữ.

Trong Java hay C++, Python đều vậy. Đều ứng dụng cách giải dựa vào cách giải thực tế về mặt toán học. Giả sử mình có đầu bài bài toán như sau:

Bạn hãy viết chương trình giải phương trình bậc 2 bằng ngôn ngữ Java hướng đối tượng. Xây dựng lớp Phuongtrinhbac2 gồm các thuộc tính a, b, c lần lượt là các hệ số của phương trình.
Xây dựng phương thức nhapPT() để nhập các hệ số a, b, c.
Xây dựng phương thức giaiPT() để giải phương trình vừa nhập.
Các giá trị nghiệm in ra màn hình làm tròn đến phần thập phân thứ 2.
Nếu phương trình không hợp lệ, in kêt quả ra màn hình.

2. Phương pháp giải bài toán

Thuật toán giải quyết giống với cách giải đã học trong môn Toán học. Trong lập trình có các trường hợp có thể xảy ra như sau:

  1. Phương trình có hệ số của a =0 ( b và c khác 0)
  2. Phương trình có đầy đủ hệ số.

Đối với phương trình có hệ số a =0. Lúc này chúng ta quay trở về bài toán giải phương trình bậc 1. Nghiệm x = -c/b

Đối với chương trình bậc 2 bình thường ( đầy đủ các hệ số a, b c) thì cách giải như sau: Chúng ta khai báo biến delta.
delta = b^2 – 4*a*c. Sau đó lại có 3 trường hợp:

  • Nếu delta < 0 thì phương trình vô nghiệm!
  • Nếu delta == 0 thì phương trình có nghiệm kép x= -b/(2*a)
  • Nếu delta >0 thì phương trình có 2 nghiệm phân biệt:
    x1 = (-b + sqrt(delta)) / (2*a);
    x2 = (-b – sqrt(delta)) / (2*a);

Nếu giả sử người dùng nhập vào hệ số a=b=0 thì sẽ thông báo phương trình không hợp lệ!

3. Code giải phương trình bậc 2 Java

Để chạy được chương trình, bạn cần cài đặt java, cấu hình java cho ide nào đó thì mới chạy được nhé! Ở đây mình đang sử dụng Eclipse.

Trong chương trình, mình có sử dụng làm tròn biến đến phần thập phân thứ 2 trong java. Nếu bạn không hiểu có thể xem thêm tại đây.

Ngoài các phương thức như đã nếu ở phần giới thiệu bài toán. Mình có tạo thêm phương thức nhapDouble(). Phương thức này giúp bạn nhập vào từ bàn phím một biến kiểu double. Nếu người dùng nhập sai thì cần nhập lại.

Mời bạn tham khảo chương trình hoàn chính của mình!

// code by admin tailieu.pro
// https://github.com/duongdinh24/
import java.util.Scanner;
//import java.math.*;
import java.io.*;

public class Phuongtrinhbac2 {
	private double a;
	private double b;
	private double c;
	public Phuongtrinhbac2(){
		
	}
        // Phương thức tạo lập
	public Phuongtrinhbac2(double a, double b, double c){
		this.a=a;
		this.b=b;
		this.c=c;
	}
        // Phương thức nhập dữ liệu
	public double nhapDouble() {
		double so;
		Scanner scan = new Scanner(System.in);
		try {
		so = Double.parseDouble(scan.nextLine());
		}
		catch (Exception e) {           // Nếu nhập vào lỗi
			System.out.println("Nhap lai!");
			so=nhapDouble();  // Đệ quy hàm nhập
		}
		return so;     // Trả về giá trị nhập
	}
	void nhapPT() {
		System.out.println("Moi ban nhap phuong trinh can giai: ");
		System.out.println("a: ");a=nhapDouble();
		System.out.println("b: ");b=nhapDouble();
		System.out.println("c: ");c=nhapDouble();
	}
	void giaiPt() {
		if(a==0) {
			if(b!=0) {
				double x;
                                x= -c/b;
				x=Math.round(x*100.0)/100.0;    // làm tròn số thập phân
				System.out.println("Nghiem phuong trinh: "+x);
			}
			else if(b==0) {
				System.out.println("Phuong trinh khong hop le!");
				return;
			}
			
		}
		else {
			double delta= b*b -4*a*c;
			if(delta<0) {
//				System.out.println("Phuong trinh  " +a+ "x^2 +" + b+"x + "+c+"  vo nghiem");
				System.out.println("Phuong trinh vo nghiem!");
			}
			else if(delta ==0) {
				double x;
				x=(-b)/(2*a);
				System.out.println("Phuong trinh co nghiem kep: ");
				System.out.println("x= "+Math.round(x*100.0)/100.0);
			}
			else {
				double x1;
				double x2;
				x1=(-b +Math.sqrt(delta))/(2*a);
				x2=(-b -Math.sqrt(delta))/(2*a);
				System.out.println("Phuong trinh co nghiem phan biet: ");
				System.out.println("x1: "+ Math.ceil(x1*100.0)/100.0);
				System.out.println("x2: "+ Math.round(x2*100.0)/100.0);
			}
		}
	}
	public static void main(String[] args) {
		Phuongtrinhbac2 _ptb2 = new Phuongtrinhbac2();
		_ptb2.nhapPT();
		_ptb2.giaiPt();
	}

}

Kết quả khi chạy chương trình

Kết quả khi chạy chương trình trường hợp a =0.

xay dung lop giai phuong trinh bac 2 trong java

Kết quả khi chạy chương trình trường hợp đầy đủ hệ số!
(test luôn phương thức nhập, mình nhập vào kí tự xem chuyện gì xảy ra)

giai phuong trinh bac 2 java

Trường hợp nhập vào các giá trị tạo thành chương trình không hợp lệ!

nhap vao ba he so a b c bang 0

Bài chia sẻ của mình đến đây là hết, cảm ơn bạn đã quan tâm. Nếu có gì thắc mắc, để lại comment phía dưới bài viết này nhé!

Xem thêm các bài chia sẻ của mình về học lập trình Java

LEAVE A REPLY

Please enter your comment!
Please enter your name here