2017-08-23 5 views
-1

私はこのコードを持っていると私は4つの部分にテーブルinp[2560]をpartionしたいとパートごとに私はこれを計算したい:forループを使用してテーブルの一部を使用する方法はありますか。

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); 
} 
+0

このコードにはforループがかなりあります。どちらがあなたに問題を抱えていますか、そしてあなたはどんな問題を抱えていますか? – interjay

+0

@interjay私の問題はherrです inp [i] = y [i]; } double MA、MI、MOY; 浮動小数点; 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); – meri

答えて

0

私が知っているように、Cの配列は最初のバイトへのポインタとして渡されます。

私たちも知っているように、Cのポインタにポインタ演算子を適用することができます(voidを除く)。ここ

は、例えばアレイ内Xフロートをスキップinp+X

#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)); 
} 

あります。明示的に入力しないでくださいX * sizeof(float);それは間違っています。

私はこのコードを持っていると私は4一部 にテーブルINP [2560] partionする各部分について、私は、この計算する:ここ

は、吸気ある:

int i = 0; 
while (i < 4) 
{ 
    whatever = calcul__min(inp+(i * 640),640); 
} 
関連する問題