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;
}
Bài liên quan
lỗi chỗ này … em coi lại logic so sánh
a, tai hại thật, cám ơn anh
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?
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?
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?