2016-07-30 2 views
1

특정 조건을 충족시킬 큰 배열의 인덱스 번호를 갖는 새로운 배열을 만들려고합니다. 온큰 배열의 새로운 배열 배열

0 
1 
4 
5 

: 결과와

int A[] = {1,1,0,0,1,1,0,0,0,0};  
    int B[4];  
    ...  
    for(i = 0;i < 4;i++) 
    { 
    printf("%d \n",B[i]); 
    } 

: 예를 들어

, 나는 일이있는 각 인덱스를 나열하는 배열을 원하는 것, 0과 1의 큰 배열있다 소규모 (위의 경우), 중첩 된 for 루프 및 중단 명령을 사용하여 작동하도록했습니다.

//nested loop 
//reading index 
#include <stdio.h> 

int main() 
{ 
    int a,b; 
    int c[10] = {-1, -1, 0, 0, -1, 1, 0, 0, 0, 0}; 
    int d[4]; 

    b = 0; 
    for(a = 0;a < 5;) 
    { 
     for(;b < 10;b++) 
     { 
      if(c[b] == -1) 
      { 
       d[a] = b; 
       break; 
      } 

     } 
     b++; 
     a++; 
    } 

    for(a = 0;a < 4;) 
    { 
     printf("%d \n",d[a]); 
     a++; 
    } 
} 

이 문제는 훨씬 더 큰 배열 집합에 대해 대규모로 구현하려고 할 때 발생합니다 (여기서 두 번째 배열은 얼마나 큰지 알 수 없습니다). 이 표시되면

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

#define N 283 

int im_index_finder(int inarray[N - 2],int min_or_max); 

void main() 
{ 
    double t[N], d[N], velocity[N], averagevelocity[N - 1], n_d[N]; 
    double dx[N - 1]; 
    int b[N - 1], d_b[N - 2]; 
    int i,j,k,a,c,imax_index,imin_index; 
    int imax[N - 2], imin[imin_index]; 

    FILE *fid; 

    fid = fopen("squatsedit.csv","r"); 

    //  Reading the data from csv file, velocity, and average velocity 

    for(i = 0;i < N;) 
    { 
     fscanf(fid, "%lf, %lf", &t[i], &d[i]); 
     //printf("%g %g\n", t[i], d[i]); 
     velocity[i] = d[i]/t[i]; 
     i++; 
    } 

    for(i = 1;i < N;) 
    { 
     averagevelocity[i - 1] = (d[i] - d[i-1])/(t[i] - t[i-1]); 
     i++; 
    } 

    for(i = 0;i < N;) 
    { 
     n_d[i] = d[i]; 
     i++; 
    } 

    //  Filtering of the distance data 

    for(i = 0;i < 2;) 
    { 
     for(j = 2;j < N;) 
     { 
      k = j - 1; 
      n_d[k] = (n_d[k - 1] + n_d[k] + n_d[k + 1])/3; 
      j++; 
     } 
     i++; 
    } 

    //  start of extrema replica 

    for(i = 1;i < N;) 
    { 
     dx[i - 1] = (n_d[i] - n_d[i-1]); 
     i++; 
    } 

    for(i = 0;i < N - 1;) 
    {         //checking peaks for maxima and minima 
     if(dx[i] > 0) 
     { 
      b[i] = 1;     //b[i] = 1 for positive changes in slope 
     } 
     else 
     { 
      b[i] = 0;     //b[i] = 0 for negative changes in slope 
     } 
     i++; 
    } 

    for(i = 1;i < N - 1;) 
    { 
     d_b[i - 1] = b[i] - b[i - 1]; 
     i++; 
    } 

    imax_index = im_index_finder(d_b,1); 
    imin_index = im_index_finder(d_b,0); 

    c = 0; 
    for(a = 0;a < imax_index;) 
    { 
     for(;c < N - 2;c++) 
     { 
      if(d_b[c] == -1) 
      { 
       imax[a] = c + 1; 
       break; 
      } 
     } 
     c++; 
     a++; 
    } 

    c = 0; 
    for(a = 0; a < imin_index;) 
    { 
     for(;c < N - 2;c++) 
     { 
      if(d_b[c] == 1) 
      { 
       imin[a] = c + 1; 
       break; 
      } 
     } 
     c++; 
     a++; 
    } 

    printf("Our squatsedit is:\n"); 
    for(i = 0;i < 5;) 
    { 
     printf("%g %g \n",t[i],d[i]); 
     i++; 
    } 
    printf("...\n"); 
    printf("Our velocities are:\n"); 
    for(i = 0; i < 5;) 
    { 
     printf("%e \n",velocity[i]); 
     i++; 
    } 
    printf("...\n"); 
    printf("Our average velocities are:\n"); 

    for(i = 0;i < 5;) 
    { 
     printf("%f \n",averagevelocity[i]); 
     i++; 
    } 
    printf("...\n"); 
    printf("Our filtered distances are:\n"); 
    for(i = 0;i < 5;) 
    { 
     printf("%f \n",n_d[i]); 
     i++; 
    } 
    printf("...\n"); 
    printf("Then some differences are:\n"); 
    for(i = 0;i < 5;) 
    { 
     printf("%f \n",dx[i]); 
     i++; 
    } 
    printf("...\n"); 
    printf("Our positve and negative detector says:\n"); 
    for(i = 0;i < 5;) 
    { 
     printf("%d \n",b[i]); 
     i++; 
    } 
    printf("...\n"); 
    printf("Our xb equivalent is:\n"); 
    for(i = 0;i < 10;) 
    { 
     printf("%d \n",d_b[i]); 
     i++; 
    } 
    printf("...\n"); 
    printf("our imax_index is %d \n",imax_index); 
    printf("our imin_index is %d \n",imin_index); 
    for(i = 0;i < imax_index;) 
    { 
     printf("%d \n",imax[i]); 
     i++; 
    } 
    //printf("our imin is:\n"); 
    //for(i = 0;i < imin_index;) 
    //{ 
    // printf("%d \n",imin[i]); 
    // i++; 
    //} 

    fclose(fid); 

} 

int im_index_finder(int inarray[N - 2],int min_or_max) 
{ 
    int a; 
    int max_index = 0; 
    int min_index = 0; 

    for(a = 0;a < N - 2;) 
    { 
     if(inarray[a] == -1) 
     { 
      max_index++; 
     } 
     else if(inarray[a] == 1) 
     { 
      min_index++; 
     } 
     a++; 
    } 

    if(min_or_max = 1) 
    { 
     return max_index; 
    } 
    else 
    { 
     return min_index; 
    } 
} 

는 그러나 Imin으로 배열의 마지막 7 개 요소 있었어야 아이 맥스 배열의 시작 요소입니다 : 이것은 내가 가지고있는 것입니다.

imin 루프를 주석 처리 할 때 imax가 올바르게 표시되지만 imin도 필요합니다. 아무도 알아낼 수 있습니까?

답변

1

imin []의 선언에서 imin_index를 사용하고 있지만 imin_index 값은 무엇입니까?

int i,j,k,a,c,imax_index,imin_index; 
int imax[N - 2], imin[imin_index]; 

그래서 imin []의 크기는 얼마입니까?

+1

'imin []'의 선언은'imin_index'의 값으로부터 크기를 가져옵니다. * 선언 시점에서 * -'imin []'은'imin_index'가 바뀌면 나중에 크기를 변경하지 않습니다. – Dmitri

+0

실제로 - 많은 의무가 있습니다! 아마 그 라인을 int imax [N - 2]로 바꾸면, imin [N - 2]는 충분한 수정이 될 것입니다. – Nunchy

+0

그 문제는 'imax_index'또는 'imin_index'가 무엇인지 알 필요가 없다는 사실입니다. 내가 이미 알고있는 샘플 세트는 'imax_index'가 13이고 '-1'이거나 데이터 세트에서 아래로 내려 간다. (데이터 세트는 거리와 시간을 나타내므로 거리의 감소는 피크를 나타낸다) . 내가 말했듯이, 'imin'에 대한 루프를 주석 처리하면 잘 작동합니다. 나중에 어레이를 초기화 할 수 있습니까? 나는 그것을 시도 할 것이다. – user3587529

0

1) 주 배열에 루프를 걸어 조건에 맞는 요소의 수를 찾으십시오. 2)이 수와 동일한 크기의 배열을 동적으로 할당하십시오. 3) 첫 번째 배열을 다시 반복하고 일치하는 요소를 동적으로 할당 된 두 번째 배열로 이동합니다.