সমস্যা: দ্বিঘাত সমীকরণের রুট খুঁজে বের করা
দ্বিঘাত সমীকরণ: ax² + bx + c = 0। এর দুটি রুট থাকে।
ফর্মুলা
r₁ = (-b + √(b² - 4ac)) / 2a
r₂ = (-b - √(b² - 4ac)) / 2a
এখানে D = b² - 4ac = ডিসক্রিমিন্যান্ট (Discriminant)।
অ্যালগরিদম
- শুরু
a, b, cইনপুট নিনD = b² - 4acক্যালকুলেট করুন- যদি
D > 0: দুটি বাস্তব ও ভিন্ন রুট - যদি
D == 0: দুটি বাস্তব ও সমান রুট - যদি
D < 0: কাল্পনিক (imaginary) রুট - শেষ
সি প্রোগ্রাম
#include <stdio.h>
#include <math.h>
int main() {
float a, b, c, r1, r2, d;
printf("Enter a, b, c: ");
scanf("%f %f %f", &a, &b, &c);
d = b*b - 4*a*c;
if (d > 0) {
r1 = (-b + sqrt(d)) / (2*a);
r2 = (-b - sqrt(d)) / (2*a);
printf("Real and distinct roots: %.2f, %.2f\n", r1, r2);
} else if (d == 0) {
r1 = r2 = -b / (2*a);
printf("Real and equal roots: %.2f\n", r1);
} else {
printf("Roots are imaginary\n");
// কাল্পনিক রুট দেখাতে চাইলে:
float real = -b / (2*a);
float imag = sqrt(-d) / (2*a);
printf("Roots: %.2f + %.2fi, %.2f - %.2fi\n", real, imag, real, imag);
}
return 0;
}
টেস্ট কেস ও আউটপুট
| ইনপুট (a b c) | ডিসক্রিমিন্যান্ট | আউটপুট |
|---|---|---|
| 1 4 3 | D = 16-12 = 4 > 0 | r₁ = -1, r₂ = -3 |
| 1 2 1 | D = 4-4 = 0 | r₁ = r₂ = -1 |
| 1 1 4 | D = 1-16 = -15 < 0 | Imaginary roots |
নোট
math.hইনক্লুড করুন এবং কম্পাইল টাইমে-lmলিংক করুন (GCC:gcc prog.c -lm)।a != 0হতে হবে (অন্যথায় লিনিয়ার সমীকরণ হবে)।- ফ্লোটিং পয়েন্ট প্রিসিশনের জন্য
doubleব্যবহার করা ভালো।