Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.72 KB | None | 0 0
  1. #define _USE_MATH_DEFINES
  2. #define IDI_ICON1  
  3. #include <stdio.h>  
  4. #include <conio.h>  // getch
  5. #include <math.h>   // fabs, pow, ceil\floor, log, log10, exp, sqrt
  6. #include <cstdlib>  //  rand
  7. #include <windows.h> // SetConsoleOutputCP(1251); SetConsoleCP(1251);
  8. #include <iostream>
  9. #include <ctime>
  10.  
  11.  
  12. const double xx[7] = { 0.00001, -0.99, -1, -0.1, 0.1, 1, 0.99 };
  13. using namespace std;
  14.  
  15. int main()
  16. {
  17.     SetConsoleTitleW(L"Лабораторная работа №5       Карелин Влад       A-04-18");
  18.     SetConsoleOutputCP(1251);
  19.  
  20.     srand(time(NULL));
  21.  
  22.     printf_s("Введите e=");
  23.     double e;
  24.     scanf_s("%lf", &e);
  25.     while (!(e > 0 && e <= 0.1))
  26.     {
  27.         printf_s("Некорректный ввод, e должно быть в (0..0.1], введите еще раз -  ");
  28.         scanf_s("%lf", &e);
  29.     }
  30.     fflush(stdin);  // очищаем буфер (лишние символы после ввода e)
  31.  
  32.     printf_s("Введите n=");
  33.     int n;
  34.     scanf_s("%d", &n);
  35.     while (!(n >= 1 && n <= 20))
  36.     {
  37.         printf_s("Некорректный ввод, n должно быть в [1..20], введите еще раз - ");
  38.         scanf_s("%d", &n);
  39.     }
  40.     fflush(stdin);
  41.  
  42.     double *x;
  43.     x = new double[n];  // выделяем память для n элементов массива
  44.  
  45.     printf_s("Введите n=%d значений X из интервала (-1,+1):\n", n);
  46.     for (int i = 0; i < n; i++)
  47.     {
  48.         scanf_s("%lf", &x[i]);
  49.         if (fabs(x[i]) >= 1)
  50.         {
  51.             x[i] = xx[rand() % 8]; // одно из семи значений массива xx
  52.             if (fabs(x[i]) == 1)
  53.             {
  54.                 x[i] = x[i] * (rand() % 100) / 100;
  55.                 if (x[i] == 0) x[i] = e; // для некоторых вариантов x=/=0
  56.             }
  57.             printf_s("Некорректное значение заменено на %15.10lf\n", x[i]);
  58.         }
  59.     }
  60.  
  61.     int z;
  62.     z = ceil(fabs(log(e) / log(10.0))) + 1;
  63.  
  64.     printf_s("\n\ne = %*.*lf\n", z + 2, z, e); // вывод e:(z+2):z
  65.     printf_s(" N |        X        |      Sum(X)     | K |       F(X)      |  Sum(X)-F(X)\n");
  66.  
  67.     for (int i = 0; i < n; i++)
  68.     {
  69.         double sl, sum;
  70.         sum = sl = x[i] * (4 - x[i]) / 24;
  71.         int k = 1;
  72.         while ((fabs(sl) >= e) && (k != 500))
  73.         {
  74.             sl *= (pow(x[i], 4) *(4 * k + 4 - x[i])) / ((4 * k - x[i]) * (4 * k + 1)*(4 * k + 2)*(4 * k + 3)*(4 * k + 4));
  75.             sum += sl;
  76.             k++;
  77.         };
  78.  
  79.         double f;
  80.         f = (2 - sin(x[i]) - cos(x[i]) - pow(M_E, -x[i])) / (2 * pow(x[i], 2));
  81.  
  82.         printf_s("%3d|%17.*lf|%17.*lf|%2d|%17.*lf|%17.*lf\n", i + 1, z, x[i], z, sum, k, z, f, z + 2, fabs(sum - f));
  83.     }
  84.  
  85.     delete[] x; //  освобождение памяти для одномерного дин.массива
  86.  
  87.     cout << "\nНажмите любую клавишу для выхода";
  88.     _getch();
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement