2. ±×¸®°í ÇÔ¼ö¿¡¼ Æ÷ÀÎÅ͸¦ ¹Ýȯ ½ÃÅ°°í ½ÍÀºµ¥ ¸¸¾à ÀÌ Æ÷ÀÎÅÍ°¡ µ¿Àû ÇÒ´çµÈ °´Ã¼¸é ¾î¶»°Ô/¾îµð¼ ¹Ýȯ ½ÃÄÑ¾ß Çϳª¿ä? Á¦°¡ ÀÛ¼ºÇÑ Äڵ忡¼ sug_region ÇÔ¼ö ³¡ÀÚ¶ô¿¡ º¸¸é Æ÷ÀÎÅÍ °´Ã¼¸¦ ¹Ýȯ½ÃÅ°°í ³ª¼ ÀÌ°É ÇØü½ÃÅ°´Âµ¥ ÀÌ·± ¹æ¹ýµµ ±¦Âú³ª¿ä? ¸¸¾à ¾È±¦Âú´Ù¸é ¾îµð¼/¾î¶»°Ô ÇØÁ¦È÷ÄÑ¾ß Çϳª¿ä?
#include <stdio.h>
#include <stdlib.h>
float *sub_region(float *in_fld, int in_fld_nx, int in_fld_ny, int in_sub_nx, int in_sub_ny, int in_sub_num);
int main()
{
int i,j,k;
int x_siz = 12,
y_siz = 12,
sub_region_x_siz = 3,
sub_region_y_siz = 6,
sub_region_siz = x_siz/sub_region_x_siz * y_siz/sub_region_y_siz;
float *arr = malloc(sizeof(float) * x_siz * y_siz),
*sub = malloc(sizeof(float) * sub_region_x_siz * sub_region_y_siz);
printf("orig arrayn");
for (j=0;j<y_siz;j++)
{
for (i=0;i<x_siz;i++)
{
arr[j * x_siz + i] = j * x_siz + i;
//printf("%3d %3.1fn",j * x_size + i, arr[j * x_size + i]);
printf("%3d ",j * x_siz + i);
}
printf("n");
}
for (k=0;k<sub_region_siz;k++)
{
sub = sub_region((float*)arr, x_siz, y_siz, sub_region_x_siz, sub_region_y_siz, k);
printf("nnsub area : %d nn",k);
for (j=0;j<sub_region_y_siz;j++)
{
for (i=0;i<sub_region_x_siz;i++)
{
printf("%3.0f ",sub[j * sub_region_x_siz + i]);
}
printf("n");
}
}
free(arr);
free(sub);
return 0;
}
float *sub_region(
float *in_fld ,
int in_fld_nx ,
int in_fld_ny ,
int in_sub_nx ,
int in_sub_ny ,
int in_sub_num
)
{
// function that sub-sets a specified size of an input array
// inputs :
// 1. *in_fld : 2d field array [float* ]
// 2. in_fld_nx : size of x dimension of the 2d field array [integer]
// 3. in_fld_ny : size of y dimension of the 2d field array [integer]
// 4. in_sub_nx : size of x dimension of the sub-set array [integer]
// 5. in_sub_ny : size of y dimension of the sub-set array [integer]
// 6. in_sub_num : number of sub-set array [integer]
//
// outputs :
// 1. out_arr : sub-set array [float* ]
int i,j;
int x_idx_siz = in_fld_nx/in_sub_nx ,
y_idx_siz = in_fld_ny/in_sub_ny ,
y_stride = in_fld_ny * in_sub_ny,
*lt_idxs = malloc(sizeof(int) * x_idx_siz * y_idx_siz);
float *out_arr = malloc(sizeof(float) * in_sub_nx * in_sub_ny);
printf("ny stride : %dn",y_stride);
printf("idxs: ");
// calculating left top indexes for the sub-set arrays (x-direction)
for (j=0;j<y_idx_siz;j++)
for (i=0;i<x_idx_siz;i++)
{
lt_idxs[j * x_idx_siz + i] = j * y_stride + i * in_sub_nx;
printf("%d ",j * y_stride + i * in_sub_nx);
}
// sub-setting array
for (j=0;j<in_sub_ny;j++)
for (i=0;i<in_sub_nx;i++)
{
out_arr[j * in_sub_nx + i] = in_fld[lt_idxs[in_sub_num] + j * in_fld_nx + i];
}
return out_arr;
free(out_arr);
free(lt_idxs);
free(in_fld);
}
°¨»çÇÕ´Ï´Ù.
Àâ´ã | 3385¸íÀÌ Àоú¾î¿ä. 18.97.9.173