Advertisement
Solingen

eqstruct1

Apr 17th, 2024
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. struct roots {
  6.   double x1;
  7.   double x2;
  8.   int n;
  9.  
  10.   // Метод для печати корней уравнения
  11.   void print() {
  12.     if (n < 0) {
  13.       printf("Уравнение имеет бесконечное количество корней.\n");
  14.     } else if (n == 0) {
  15.       printf("НЕТ КОРНЕЙ!\n");
  16.     } else if (n == 1) {
  17.       printf("Уравнение имеет один корень: x = %.2f\n", x1);
  18.     } else {
  19.       printf("Уравнение имеет два корня: x1 = %.2f, x2 = %.2f\n", x1, x2);
  20.     }
  21.   }
  22. };
  23.  
  24.  
  25. struct equation {
  26.   double a;
  27.   double b;
  28.   double c;
  29.  
  30.   equation(double a, double b, double c) {
  31.       this->a = a;
  32.       this->b = b;
  33.       this->c = c;
  34.   }
  35.  
  36.   equation(double k, double b) {
  37.       this->b = k;
  38.       this->c = b;
  39.       this->a = 0;
  40.   }
  41.  
  42.   roots solve() {
  43.     roots r;
  44.     if (a == 0) {
  45.       if (b == 0) {
  46.         if (c == 0) {
  47.           r.n = -1; //бесконечно
  48.         } else {
  49.           r.n = 0; //нет корней
  50.         }
  51.       } else {
  52.         r.n = 1; //один корень
  53.         r.x1 = -(b / c);
  54.       }
  55.     } else {
  56.       double d = b * b - 4 * a * c;
  57.       if (d < 0) {
  58.         r.n = 0; //нет корней
  59.       } else if (d == 0) {
  60.         r.n = 1; //один корень
  61.         r.x1 = -b / (2 * a);
  62.       } else {
  63.         r.n = 2; //два корня
  64.         r.x1 = (-b + sqrt(d)) / (2 * a);
  65.         r.x2 = (-b - sqrt(d)) / (2 * a);
  66.       }
  67.     }
  68.     return r;
  69.   }
  70. };
  71.  
  72.  
  73.  
  74. int main() {
  75.     double a, b, c;
  76.     printf("Введите коэффициенты a, b, c для уравнения в формате: ");
  77.  
  78.     if (scanf("%lf %lf", &a, &b) == 2) {
  79.         if (getchar() == '\n') {
  80.             equation eq(a, b);
  81.             roots r = eq.solve();
  82.             r.print();
  83.         } else {
  84.             if (scanf("%lf", &c) == 1) {
  85.                 equation eq(a, b, c);
  86.                 roots r = eq.solve();
  87.                 r.print();
  88.             } else {
  89.                 printf("Неверный ввод.\n");
  90.             }
  91.         }
  92.     } else {
  93.         printf("Неверный ввод.\n");
  94.     }
  95.  
  96.     return 0;
  97. }
  98.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement