Исправить код, что бы он заработал - 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

Код к задаче: «Исправить код, что бы он заработал - C (СИ)»

#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;
}
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.


СДЕЛАЙТЕ РЕПОСТ

9   голосов, оценка 4.111 из 5

Источник
Похожие ответы