Viết chương trình giải phương trình bậc 2 dụng if else

Viết chương trình giải phương trình bậc 2 trong C. Phương trình bậc 2 có dạng:

Viết chương trình giải phương trình bậc 2 dụng if else

Lời giải

Lời giải của chúng tôi sử dụng phương thức sqrt() để tính căn bậc 2 của một số trong C. Sử dụng phương thức scanf(“%f”, &a) để đọc số thực từ bàn phím và gán cho biến a.

#include <stdio.h> /** * giai phuong trinh bac 2: ax2 + bx + c = 0 * * @param a: he so bac 2 * @param b: he so bac 1 * @param c: so hang tu do */ void giaiPTBac2(float a, float b, float c) { // kiem tra cac he so if (a == 0) { if (b == 0) { printf("Phuong trinh vo nghiem!"); } else { printf("Phuong trinh co mot nghiem: x = %f", (-c / b)); } return; } // tinh delta float delta = b*b - 4*a*c; float x1; float x2; // tinh nghiem if (delta > 0) { x1 = (float) ((-b + sqrt(delta)) / (2*a)); x2 = (float) ((-b - sqrt(delta)) / (2*a)); printf("Phuong trinh co 2 nghiem la: x1 = %f va x2 = %f", x1, x2); } else if (delta == 0) { x1 = (-b / (2 * a)); printf("Phong trinh co nghiem kep: x1 = x2 = %f", x1); } else { printf("Phuong trinh vo nghiem!"); } } /** * ham main */ int main() { float a, b, c; printf("Nhap he so bac 2, a = "); scanf("%f", &a); printf("Nhap he so bac 1, b = "); scanf("%f", &b); printf("Nhap so hang tu do, c = "); scanf("%f", &c); giaiPTBac2(a, b, c); return 1; }

Kết quả:

Nhap he so bac 2, a = 2 Nhap he so bac 1, b = 3 Nhap so hang tu do, c = 1 Phuong trinh co 2 nghiem la: x1 = -0.500000 va x2 = -1.000000

Cách giải phương trình bậc 2 thì chúng ta đã được học ở lớp dưới rồi phải không nào ? Vậy giải phương trình bậc 2 trong C/C++ thì sẽ như thế nào ? Hôm nay chúng ta sẽ cùng tìm hiểu.

Cách giải phương trình bậc 2

Viết chương trình giải phương trình bậc 2 dụng if else
                  Phương trình bậc 2

Phương trình bậc 2 là phương trình có dạng: ax² +bx + c = 0. (a≠0)  (1)

Ở các lớp dưới ta đã có phương pháp giải bằng cách tính delta:

  • Đầu tiên tính delta = b² – 4ac
  • Nếu delta < 0 thì kết luận vô nghiệm
  • Nếu delta = 0 thì có nghiệm kép
  • Nếu delta > 0 thì sẽ có 2 nghiệm phân biệt

Ý tưởng

  • Dùng một vòng do while để nhập a, b, c nếu a = 0, thì nhập lại.
  • Chúng ta dùng hàm sqrt() trong thư viện math.h để tính căn delta hoặc tính căn không dùng hàm sqrt()tại đây.
  • Chúng ta tạo hàm giaiPT trả về kiểu int chính là số nghiệm của phương trình (1).
  • Chúng ta sẽ đưa tham chiếu 2 biến x1 , x2 vào hàm giaiPT để gán giá trị hai nghiệm.
  • Nếu pt (1) vô nghiện thì giaiPT sẽ trả về 0 , đồng thời gán x1 = x2 =0 .
  • Nếu pt (1) có nghiệm kép thì giaiPT sẽ trả về 1 , đồng thời gán x1 = x2 = -b/2a .
  • Nếu pt (1) có 2 nghiệm thì giaiPT sẽ trả về 2 , gán x1 = (-b+√delta ) / 2a  x = (-b-√delta ) / 2a .

Code C

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

#include<stdio.h>

#include<math.h>

int giaiPT(float a, float b, float c,float &x1, float &x2){

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

    if(delta<0){

        x1=x2=0.0;

        return 0;

    }

    else if(delta==0){

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

        return 1;

    }

    else{

        delta = sqrt(delta);

        x1 = (-b + delta) / (2*a);

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

        return 2;

    }

}

int main(){

    float a,b,c;

    float x1,x2;

    do{

        printf("Nhap a (a!=0): ");

        scanf("%f",&a);

        printf("Nhap b: ");

        scanf("%f",&b);

        printf("Nhap c: ");

        scanf("%f",&c);

    }

    while(!a);// Nếu a=0 thì nhập lại

    int numNo = giaiPT(a,b,c,x1,x2);

        if(numNo == 0) {

        printf("Phuong trinh da cho vo nghiem");

    }

    else if(numNo == 1){

        printf("Phuong trinh da cho co nghiem kep x=%.4f",x1);

    }

    else{

        printf("Phuong trinh da cho co hai nghiem phan biet\nx1=%.4f \nx2=%.4f",x1,x2);

    }

}

Nhap a (a!=0): 3

Nhap b: -5

Nhap c: 2

Phuong trinh da cho co hai nghiem phan biet

x1=1.0000

x2=0.6667

Code C++

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

#include<iostream>

#include<math.h>

using namespace std;

int giaiPT(float a, float b, float c,float &x1, float &x2){

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

    if(delta<0){

        x1=x2=0.0;

        return 0;

    }

    else if(delta==0){

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

        return 1;

    }

    else{

        delta = sqrt(delta);

        x1 = (-b + delta) / (2*a);

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

        return 2;

    }

}

int main(){

    float a,b,c;

    float x1,x2;

    do{

        cout<<"Nhap a (a!=0): ";

        cin>>a;

        cout<<"Nhap b: ";

        cin>>b;

        cout<<"Nhap c: ";

        cin>>c;

    }

    while(!a);

        int numNo = giaiPT(a,b,c,x1,x2);

    if(numNo ==0 ) {

        cout<<"Phuong trinh da cho vo nghiem";

    }

    else if(numNo==1){

        cout<<"Phuong trinh da cho co nghiem kep x=%.4f" << x1;

    }

    else{

        cout<<"Phuong trinh da cho co hai nghiem phan biet"<<endl;

        cout<< "x1=" << x1<<endl;

        cout<< "x2=" << x2<<endl;

    }

}

Nhap a (a!=0): 3

Nhap b: -5

Nhap c: 2

Phuong trinh da cho co hai nghiem phan biet

x1=1

x2=0.666667

Bài học của mình đến đây là kết thúc.