30/09/2018, 16:17

Hỏi về code giải phương trình bậc 2

Cám ơn mọi người đã chú ý
Em mới học xong bài phương trình bậc 2 nên áp dụng luôn, nhưng mà vì sao khi giải, em nhập a = 1, b = 2, c = 1 thì console không hiện ra x1, x2. Lẽ ra khi này phải xét cái if thứ 2 ở hàm void FullEquation(float h, float i, float j) rồi in ra giá trị x1, x2 chứ. Ở đây nếu có thêm hàm void SpecialCases(float m, float n, float p) nữa thì sẽ giải được nhưng em “che” lại để tìm hiểu xem vì sao hàm kia không hoạt động. Ý tưởng em để note ở trên đầu ấy.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*ax^2 + bx + c = 0 (a # 0)
{
    a = 0, send to 1st Equation
}
{b = 0
    b = 0, ax^2 + c = 0 <=> x^2 = -c/a
    c/a <= 0 => x = sqrt(-c/a); x = -sqrt(-c/a)
    c/a > 0 => printf("Equation in empty");
}

{c = 0
    c = 0, ax^2 + bx = 0     <=> x(ax + b) = 0
    <=> x = 0 and x = -b/a
}
{
    delta = b^2 - 4ac;
    if(delta < 0)
        x in empty
        if(delta = 0)
            x1 = x2 = -b/2a
            if(delta > 0)
        g1 = -1;
        g2 = -c/a;
        printf("x1 = %.2f", g1);
        printf("x1 = %.2f", g1);
    }*/

//Start here
/*void SpecialCases(float m, float n, float p)
{
    float g1, g2;
    if(m + n + p == 0){
        g1 = 1;
        g2 = p/m;
        printf("x1 = %.2f", g1);
        printf("x2 = %.2f", g2);
    }
    if(m - n + p == 0){
        g1 = -1;
        g2 = -p/m;
        printf("x1 = %.2f", g1);
        printf("
x2 = %.2f", g2);
    }
}*/

void aEqual0(float a, float b) // when a = 0
{
    float t;
    if(a == 0) {
        if(b == 0)
            printf("x in R");
        else
            printf("x in empty");
    } else {
        t = -b/a;
        printf("x = %.1f", t);
    }
}

void bEqual0(float c, float d, float e) // When b = 0
{
    float x1, x2;
    if(e/d <= 0) {
        x1 = sqrt(-e/c);
        x2 = -sqrt(-e/c);
        printf("x1 = %.2f", x1);
        printf("
x2 = %.2f", x2);
    } else
        printf("x in empty");
}

void cEqual0(float f, float g)// when c = 0
{
    float y1, y2;
    y1 = 0;
    y2 = -g/f;
    printf("x1 = %.2f", y1);
    printf("
x2 = %.2f", y2);
}

void FullEquation(float h, float i, float j)
{
    float delta, z1, z2;
    delta = pow(i, 2) - (4 * h * j);
    if(delta < 0)
        printf("x in empty");
    if(delta = 0) {
        z1 = -i/(2*h);
        printf("x1 = x2 = %.2f", z1);
    }
    if(delta > 0) {
        printf("equation has 2 roots");
        z1 = (-i - sqrt(delta))/2 * h;
        z2 = (-i + sqrt(delta))/2 * h;
        printf("x1 = %.2f", z1);
        printf("x2 = %.2f", z2);
    }
}

int main()
{
    float a, b, c;
    printf("Input a, b and c
");
    // Input a
    printf("a = ");
    scanf("%f", &a);
    // Input b
    printf("b = ");
    scanf("%f", &b);
    // Input c
    printf("c = ");
    scanf("%f", &c);
    // Solve
//    SpecialCases(a, b, c);
    if(a == 0)
        aEqual0(b, c);
    else if(b == 0)
        bEqual0(a, b, c);
    else if(c == 0)
        cEqual0(a, b);
    else
        FullEquation(a, b, c);
    return 0;
}
Lập Trình Sư viết 18:24 ngày 30/09/2018

if(delta = 0) {

lỗi chỗ này … em coi lại logic so sánh

nhatlonggunz viết 18:25 ngày 30/09/2018

a, tai hại thật, cám ơn anh

Nguyễn Minh Dũng viết 18:29 ngày 30/09/2018

I moved 2 posts to a new topic: Tham số của các hàm khác nhau nhưng trùng tên có bị lỗi hay không?

Nguyễn Minh Dũng viết 18:24 ngày 30/09/2018

I moved a post to an existing topic: Tham số của các hàm khác nhau nhưng trùng tên có bị lỗi hay không?

Nguyễn Minh Dũng viết 18:18 ngày 30/09/2018

I moved 4 posts to a new topic: Cách dừng chương trình khi thỏa mãn một điều kiện?

Bài liên quan
0