ilyakanyshev

Ya ebal #3

Nov 24th, 2020
603
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <math.h>
  3.  
  4. using namespace std;
  5.  
  6. double fun(double x) {
  7.     return sin(x);
  8. }
  9.  
  10. class FM_signal {
  11.     private:
  12.         double a = 0, w = 0, b = 0;
  13.         double (*fun) (double);
  14.     public:
  15.         FM_signal(double, double, double, double (*f) (double));
  16.         double get(double);
  17.         double get_energy(double, double);
  18. };
  19.  
  20. int main()
  21. {
  22.     // Получаем данные
  23.     int n;
  24.     double w;
  25.     cout << "Vvedi n: ";
  26.     cin >> n;
  27.     double *a = new double[n];
  28.     double *b = new double[n];
  29.     cout << "Vvedi w: ";
  30.     cin >> w;
  31.     cout << "Vvedi a: " << endl;
  32.     for (int i = 0; i < n; i++)
  33.     {
  34.         cout << "  #" << i + 1 << ": ";
  35.         cin >> a[i];
  36.     }
  37.     cout << "Vvedi b: " << endl;
  38.     for (int i = 0; i < n; i++)
  39.     {
  40.         cout << "  #" << i + 1 << ": ";
  41.         cin >> b[i];
  42.     }
  43.    
  44.     // Выделение памяти
  45.     FM_signal* mass = static_cast<FM_signal*>(operator new[] (n * sizeof(FM_signal)));
  46.    
  47.     // Инициализация каждого элемента массива
  48.     for (int i = 0; i < n; i++)
  49.     {
  50.         new (mass + i) FM_signal(a[i], b[i], w, fun);
  51.     }
  52.    
  53.     // Выводим на экран необходимые значения
  54.     for (int i = 0; i < n; i++)
  55.     {
  56.         cout << "Energiya signala #" << i + 1 << " = " << mass[i].get_energy(0, 10) << endl;
  57.     }
  58.     return 0;
  59. }
  60.  
  61. FM_signal::FM_signal(double a, double b, double w, double (*f) (double)) {
  62.     this -> a = a;
  63.     this -> b = b;
  64.     this -> w = w;
  65.     this -> fun = f;
  66. }
  67.  
  68. double FM_signal::get(double t) {
  69.     return this -> a * cos(this -> w * t + this -> b * this->fun(t));
  70. }
  71.  
  72. double FM_signal::get_energy(double start, double end) {
  73.     double h = 0.001, s = 0, lastHeight = 0, height = pow(this -> get(a), 2);
  74.     int n = (end - start) / h;
  75.     for (int k = 1; k <= n; k++)
  76.     {
  77.         lastHeight = height;
  78.         height = pow(this -> get(start + h * k), 2);
  79.         s += (lastHeight + height) / 2 * h;
  80.     }
  81.     return s;
  82. }
  83.  
RAW Paste Data