View difference between Paste ID: LjnH2EVe and g0Y9RJbe
SHOW: | | - or go back to the newest paste.
1-
/******************************************************************************
1+
2
#include <math.h>
3-
Задание: 
3+
4-
реализовать класс С++, моделирующий ФМ сигнал вида
4+
5-
s(t) = a*cos(w*t + b*f(t)),
5+
6-
где f(t) - модулирующий сигнал, |f(t)|<=1
6+
7-
Коэффициенты a, b, w и функцию f(t) задавать в момент инициализации сигнала
7+
    return sin(x);
8-
Генерировать массив N (задать с клавиатуры) сигналов одинаковой модулирующей частоты w. 
8+
9-
Для каждого сигнала получить энергию на длительности 10 с.
9+
10
class FM_signal {
11-
*******************************************************************************/
11+
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-
    return x / 100;
18+
19
20
int main()
21
{
22
    // Получаем данные
23
    int n;
24-
        double (*f) (double);
24+
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-
    // Получаем необходимые данные
35+
36-
    cout << "Please, enter n: ";
36+
37
    cout << "Vvedi b: " << endl;
38
    for (int i = 0; i < n; i++)
39
    {
40-
    cout << "Please, enter w: ";
40+
41
        cin >> b[i];
42-
    cout << "Please, enter a: " << endl;
42+
43
    
44
    // Выделение памяти
45
    FM_signal* mass = static_cast<FM_signal*>(operator new[] (n * sizeof(FM_signal)));
46
    
47
    // Инициализация каждого элемента массива
48-
    cout << "Please, enter b: " << endl;
48+
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-
        cout << "Energy of signal #" << i + 1 << " = " << mass[i].get_energy(0, 10) << endl;
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-
    this -> f = f;
76+
77
		lastHeight = height;
78
		height = pow(this -> get(start + h * k), 2);
79-
    return this -> a * cos(this -> w * t + this -> b * this->f(t));
79+
80
	}
81
	return s;
82
}
83