如何使用for循环来使用表的分区?

时间:2017-08-23 10:55:23

标签: c

我有这个代码,我想将一个表inp[2560]分成4个部分,每个部分我要计算一下:

MI = calcul__min(inp,640);
MA = calcul__max(inp,640);
MOY = calcul__moy(inp,640);
ectt = calcul__ect(inp,640);

我不知道如何使用for循环。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define ORDER 65

#define NP 2560

float inp[2560];
float ED1, ED2, ED3, ED4, Ap4;
float d1, d2, d3, d4, a4, total;
int i;

double calcul__max(float tab[], int N)
{
    double max;
    int i;
    for (i = 0; i < N; i++)
    {
        if(tab[i]>max)
        max=tab[i];
    }
    return max;
}

double calcul__min(float tab[], int N)
{
    double min;
    int i;
    for (i = 0; i < N; i++)
    {
        if(tab[i]<min)
        min=tab[i];
    }
    return min;
}

double calcul__moy(float tab[],int N)
{
    double  moyenne,somme;
    int i;
    for (i = 0; i < N; i++)
    {
        somme = somme + tab[i];
        moyenne = somme /640;
    }
    return  moyenne;
}

float calcul__ect(float tab[], int N)
{
    double moyenne, TM, som, ec, ect;
    moyenne = calcul__moy(inp,640);
    int i;

    for (i = 0; i < N; i++)
    {
        TM = tab[i] - moyenne;
        TM *= TM;
        som += TM;
    }
    ec = som / 639;
    ect = sqrt(ec);

    return ect;
}

struct Calculstat
{
    float Ea;
    float amplitudemin;
    float ecarttype;
    float Ed2;
    float amplitudemax;
};

filter(int ord, float *a, float *b, int np, float *x, float *y) {
    int i, j;
    y[0] = b[0] * x[0];
    for (i = 1; i < ord + 1; i++) {
        y[i] = 0.0;
        for (j = 0; j < i + 1; j++)
            y[i] = y[i] + b[j] * x[i-j];
        for (j = 0; j < i; j++)
            y[i] = y[i] - a[j+1] * y[i-j-1];
    }
    for (i = ord + 1; i < np + 1; i++) {
        y[i] = 0.0;
        for (j = 0; j < ord + 1; j++)
            y[i] = y[i] + b[j] * x[i-j];
        for (j = 0; j < ord; j++)
            y[i] = y[i] - a[j+1] * y[i-j-1];
    }
}

main()
{
    float x[NP]= { -84.786,...};
    float y[NP], a[ORDER+1], b[ORDER+1];
    int i, j;
    b[0] = -0.005574892;
    // [...]
    b[65] = -0.005574892;

    a[0] = 0;
    // [...]
    a[65] = 0;

    filter(ORDER, a, b, NP, x, y);

    for (i = 0; i < NP; i++)
    {
        x[i]=y[NP-i-1];
    }
    filter(ORDER,a,b,NP,x,y);
    for (i=0;i<NP;i++)
    {
        x[i] = y[NP-i-1];
    }
    for (i = 0; i < NP; i++)
    {
        y[i] = x[i];
    }
    for (i = 0; i < NP; i++)
    {
        //printf("%f\n",y[i]);
        inp[i]=y[i];
    }

    double MA,MI,MOY;
    float ectt;

    MI = calcul__min(inp,640);
    MA = calcul__max(inp,640);
    MOY = calcul__moy(inp,640);
    ectt = calcul__ect(inp,640);

    printf("Le min de tableau est ""%f\n",MI);
    printf("Le max de tableau est ""%f\n",MA);
    printf ("la moyenne est de ""%g\n", MOY);
    printf ("ecart type est ""%g\n", ectt);
}

1 个答案:

答案 0 :(得分:0)

众所周知,C中的数组作为指向第一个字节的指针传递。

而且正如我们所知,我们可以将指针算术应用于C中的指针(void除外)。

以下是示例

#include <stdio.h>

void foo(float *f)
{
    // Some stuff
}

int main()
{
    float inp[2560];
    foo(inp);
    foo(inp+(640));
    foo(inp+(2*640));
    foo(inp+(3*640));
}

inp+X跳过X个数组浮点数。不要明确键入X * sizeof(float);这是错误的。

  

我有这个代码,我想将一个表格[2560]分成4部分   对于每个部分,我想计算一下:

这是一个灵感:

int i = 0;
while (i < 4)
{
    whatever = calcul__min(inp+(i * 640),640);
}