특정 조건을 충족시킬 큰 배열의 인덱스 번호를 갖는 새로운 배열을 만들려고합니다. 온큰 배열의 새로운 배열 배열
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도 필요합니다. 아무도 알아낼 수 있습니까?
'imin []'의 선언은'imin_index'의 값으로부터 크기를 가져옵니다. * 선언 시점에서 * -'imin []'은'imin_index'가 바뀌면 나중에 크기를 변경하지 않습니다. – Dmitri
실제로 - 많은 의무가 있습니다! 아마 그 라인을 int imax [N - 2]로 바꾸면, imin [N - 2]는 충분한 수정이 될 것입니다. – Nunchy
그 문제는 'imax_index'또는 'imin_index'가 무엇인지 알 필요가 없다는 사실입니다. 내가 이미 알고있는 샘플 세트는 'imax_index'가 13이고 '-1'이거나 데이터 세트에서 아래로 내려 간다. (데이터 세트는 거리와 시간을 나타내므로 거리의 감소는 피크를 나타낸다) . 내가 말했듯이, 'imin'에 대한 루프를 주석 처리하면 잘 작동합니다. 나중에 어레이를 초기화 할 수 있습니까? 나는 그것을 시도 할 것이다. – user3587529