valenki13

lesson_321_19

Oct 4th, 2023
856
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.58 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. double check_solve(double coeff[], double x);
  6.  
  7. int sum(int a, int b) {
  8.     return a + b;
  9. }
  10.  
  11. int glob; // глобальная переменная
  12.  
  13. void task0() {
  14.     for (int k = 0; k < sum(2, 3); k++) {
  15.         cout << sum(k, k) << endl;
  16.     }
  17.  
  18.     int a = sum(6, 7);
  19.     cout << sum(a, sum(5, 6)) << endl;
  20.     cout << sum(3, 4) << endl;
  21.     cout << glob;
  22.     cout << sum << endl;
  23.     //cout << &(sum(3,4)) << endl;
  24.     //cout << &(7) << endl;
  25.     int f = sum(3,4);
  26.     //7 = 5466;
  27.     cout << &f << endl;
  28. }
  29.  
  30. void show(int x) {
  31.     cout << "Целое: " << x << endl;
  32. }
  33.  
  34. void show(char x) {
  35.     cout << "Символ: " << x << endl;
  36. }
  37.  
  38. void task_overload() {
  39.     // перегрузка <---> полиморфизм
  40.     show(49);
  41.     show('b');
  42.     show(char(49)); // char(49) --> '1'
  43. }
  44.  
  45. //glob = sum(1, -5); //
  46. //glob = sum(1, -5); // писать код вне функций аморально (и вызывает ошибку).
  47.  
  48. int analitic_solve(double coeff[], double sol[]) {
  49.     double a = coeff[0];
  50.     double b = coeff[1];
  51.     double c = coeff[2];
  52.  
  53.     if (a == 0) {
  54.         if (b != 0) {
  55.             sol[0] = -c / b;
  56.             return 1;
  57.         } else
  58.             return 0;
  59.     }
  60.     double d = b * b - 4 * a * c;
  61.     if (d > 0) {
  62.         d = sqrt(d);
  63.         sol[0] = (-b + d) / (2 * a);
  64.         sol[1] = (-b - d) / (2 * a);
  65.         return 2;
  66.     }
  67.     if (d == 0) {
  68.         sol[0] = -b / (2 * a);
  69.         sol[1] = sol[0];
  70.         return 2;
  71.     }
  72.     return 0;  
  73. }
  74.  
  75. double numeric_solve(double coeff[], double sol[]) {   
  76.     for (double x = -2; x < 2; x += 0.000001) {
  77.         if (abs(check_solve(coeff, x)) < 0.00001) {
  78.             sol[0] = x;
  79.             return 1;
  80.         }      
  81.     }
  82.     return 0;
  83. }
  84.  
  85. double check_solve(double coeff[], double x) {
  86.     // эта функция вызывается много раз
  87.     // поэтому роскошь дополнительнх присвоений
  88.     // желатьльно не использовать и работать с coeff напрямую
  89.     double a = coeff[0];
  90.     double b = coeff[1];
  91.     double c = coeff[2];
  92.     return a * x * x + b * x + c;
  93. }
  94.  
  95. void task_solve() {
  96.     double coeff[]{3, 2, -7};
  97.     double sol[2]; 
  98.     int num_sol = analitic_solve(coeff, sol);
  99.    
  100.     for (int k = 0; k < num_sol; k++) {
  101.         cout.width(15);
  102.         cout.precision(12);
  103.         cout << sol[k] << " : "
  104.             << check_solve(coeff, sol[k]) << endl;
  105.     }
  106.  
  107.     double nsol[2];
  108.     num_sol = numeric_solve(coeff, nsol);
  109.  
  110.     for (int k = 0; k < num_sol; k++) {
  111.         cout.width(15);
  112.         cout.precision(12);
  113.         cout << nsol[k] << " : "
  114.             << check_solve(coeff, nsol[k]) << endl;
  115.     }
  116.  
  117.  
  118. }
  119.  
  120. int main() {
  121.     setlocale(LC_ALL, "ru");
  122.     //task0();
  123.     //task_overload();
  124.     task_solve();      
  125.     return 0;  
  126. }
Advertisement
Add Comment
Please, Sign In to add comment