Исправить код, что бы он заработал - 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, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д