Исправить код, что бы он заработал - C (СИ)
Формулировка задачи:
Листинг программы
- #include <stdio.h>
- #include <math.h>
- #define F 50.0 /*частота, Гц*/
- #define TD 20.0 /*длина сигнала, с*/
- #define N 80.0 /*количество точек дискретизаци на период*/
- #define SZ (N*F*TD) /*количество точек на всей длине сигнала*/
- #define Inorm 2.0 /*амплитуда тока нормального режима, А*/
- #define Iavar 5.0 /*амплитуда тока аварийного режима, А*/
- #define PSYnorm 20.0 /*начальная фаза тока нормального режима, градусы*/
- #define PSYavar 30.0 /*начальная фаза тока аварийного режима, градусы*/
- #define PI 3.14159265359 /*число ПИ*/
- #define n 35000.0 /*возникновение аварийного режима*/
- #define BUF_SZ (2*N) /*размер буфера*/
- typedef struct {
- int head;
- double data[BUF_SZ];
- } buffer_t;
- buffer_t input2;
- buffer_t sum2;
- buffer_t output;
- int main(void)
- {
- int i;
- double h, T, w;
- T = 1.0/(double)F; /*период, с*/
- h = T/N; /*шаг интегрирования, с*/
- w = 2*PI*F; /*угловая частота, рад/с*/
- for (i = 0; i < SZ; ++i) {
- double t = i*h;
- double sample;
- if (i > n) {
- sample = Iavar * sin(w * t + PSYavar); /*аварийный режим*/
- } else {
- sample = Inorm * sin(w * t + PSYnorm); /*нормальный режим*/
- }
- sum2.data[i] = 0.0;
- input2.data[i] = sample[i]*sample[i];
- for (i = 1; i < SZ; ++i) {
- sum2.data[i] = sum2.data[i-1] + input2.data[i];
- }
- double sum, r;
- if (i < N) {
- sum = sum2.data[i];
- } else {
- sum = sum2[i] - sum2[i-N];
- }
- r = sqrt(sum/N);
- printf("RMS=%lf\n",r);
- }
- return 0;
- }
Решение задачи: «Исправить код, что бы он заработал»
textual
Листинг программы
- #include <stdio.h>
- #include <math.h>
- #define F 50 /*частота, Гц*/
- #define TD 20 /*длина сигнала, с*/
- #define N 80 /*количество точек дискретизаци на период было 80.0 */
- #define SZ (N*F*TD) /*количество точек на всей длине сигнала*/
- #define Inorm 2.0 /*амплитуда тока нормального режима, А*/
- #define Iavar 5.0 /*амплитуда тока аварийного режима, А*/
- #define PSYnorm 20.0 /*начальная фаза тока нормального режима, градусы*/
- #define PSYavar 30.0 /*начальная фаза тока аварийного режима, градусы*/
- #define PI 3.14159265359 /*число ПИ*/
- #define n 35000.0 /*возникновение аварийного режима*/
- #define BUF_SZ (N*F*TD) /*размер буфера */
- typedef struct
- {
- int head;
- double data[BUF_SZ];
- } buffer_t;
- buffer_t input2;
- buffer_t sum2;
- buffer_t output;
- int main(void)
- {
- int i,j;
- double h, T, w;
- T = 1.0/(double)F; /*период, с*/
- h = T/N; /*шаг интегрирования, с*/
- w = 2*PI*F; /*угловая частота, рад/с*/
- for (i = 0; i < BUF_SZ; ++i)
- {
- double t = i*h;
- double sample;
- if (i > n)
- sample = Iavar * sin(w * t + PSYavar); /*аварийный режим*/
- else
- sample = Inorm * sin(w * t + PSYnorm); /*нормальный режим*/
- sum2.data[i] = 0.0;
- input2.data[i] = sample*sample;// sample[i]*sample[i]
- for (j = 1; j < SZ; ++j)
- {
- sum2.data[j] = sum2.data[j-1] + input2.data[j]; // нужен другой индекс j
- }
- double sum, r;
- if (i < N) {
- sum = sum2.data[i];
- } else {
- sum = sum2.data[i] - sum2.data[i-N]; // было без data
- }
- r = sqrt(sum/N);
- printf("RMS=%lf\n",r);
- }
- return 0;
- }
Объяснение кода листинга программы
- В начале кода подключаются необходимые заголовочные файлы: iostream.h, math.h и cmath.
- Определяются константы: F, TD, N, SZ, Inorm, Iavar, PSYnorm, PSYavar, PI и n.
- Определяется структура буфера: buffer_t.
- Создаются переменные: input2, sum2 и output типа buffer_t.
- В функции main() инициализируются переменные: i, j, T, h, w.
- Вычисляется период T и шаг интегрирования h.
- Вычисляется угловая частота w.
- Запускается цикл for для заполнения буфера input2. В каждой итерации вычисляется время t, значение которого используется для вычисления текущего значения сигнала в нормальном или аварийном режиме. Значение сигнала возводится в квадрат и сохраняется в массиве input2.
- Запускается вложенный цикл for для вычисления суммы элементов в буфере sum2.
- Если i меньше N, то сумма sum обновляется значением sum2.data[i]. Если i больше или равно N, то сумма sum обновляется как разность между sum2.data[i] и sum2.data[i-N].
- Вычисляется среднее значение суммы sum по всем элементам буфера.
- Вычисляется среднеквадратичное значение RMS.
- Выводится значение RMS на экран.
- Функция main() возвращает 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д