gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:33:22 24 4
gpt4 key购买 nike

我有这段代码,我想将表 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);
}

最佳答案

众所周知,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 float 。不要显式输入 X * sizeof(float); 否则会出错。

i have this code and i want to partion a table inp[2560] into 4 part and for each part i want to calculate this :

这是一个灵感:

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

关于c - 如何使用for循环来使用表的分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45837726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com