Advertisement
ilyakanyshev

Ya ebal #2

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