2013-04-02 1 views
1

나는 'i'인덱스가 짝수 일 때 하나, 'i'인덱스가 홀수 일 때 하나씩 2 개의 어레이를 생성 할 수있는 함수를 가지고있어 결국 두 개의 어레이로 끝난다. 짝수 'i'배열은 W_e라고 불리우며 N 개의 원소로 이루어져 있으며, 홀수 'i'배열은 W_o라고 불리우며 N 개의 원소로 이루어져 있습니다.두 배열의 항목을 다른 배열의 짝수 및 홀수 항목으로 병합합니다.

이 두 배열을 Wn = [W_e [0], W_o [0], W_e [1], W_o [0]처럼 보이는 다른 배열 Wn (2 * N 요소 있음) 1], ..., W_e [N-1], W_o [N-1]]하지만 어떻게해야할지 모르겠다. 중첩 루프를 사용하려고했지만 작동하지 않았습니다. 배열 W_e 및 W_o 내 계산에 따라 올바르게 생성 된, 난 단지 한 배열로 항목을 결합 할 수 없습니다.

이것은 내가 지금까지 가지고있는 것입니다. 나는 주요한 함수에서 "double * MakeWpowers (int N);"이라는 문제를 일으키는 것을 제외하고는 아무 것도하지 않았다. 이 작업은 N> 2에서 가능하며 N = 1 또는 N = 2는 아직 처리하지 않았습니다.

도움이 될 것입니다. 고맙습니다!!

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

#define pi 4*atan(1) 

double *MakeWpowers(int N); 
void print_vector(double *x,int N); 
double *make_vector(double *x,int N); 

int main(void) 
{ int N; 
double *Wn; 
printf("\n Please enter the size of the NxN matrix:\n"); 
scanf("%d",&N); 
Wn=MakeWpowers(N); 
//print_vector(Wn,N); 
free(Wn); 
return(0); 
} 

double *MakeWpowers(int N) 
{ 
double *Wn,*W_e,*W_o; 
int i,j; 

Wn=make_vector(Wn, 2*N); 
W_e=make_vector(W_e, N); 
W_o=make_vector(W_o, N); 


for(i=0;i<=N-1;i++) 
{ 
    if(i%2==0) 

    { 
     W_e[i]=cos((2*i*pi)/N); 
    } 
    else 
    { 
      W_o[i]=sin((2*i*pi)/N); 
    } 

} 

printf("\nThis is the even vector W_e:\n"); 
print_vector(W_e, N); 
printf("\nThis is the odd vector W_o:\n"); 
print_vector(W_o, N); 


for(j=0;j<2*N;j++) 
{ 
    if(j%2==0) 
    {Wn[j]=W_e[i];} 
     //++i;} 
    else 
    {Wn[j]=W_o[i];} 
     //++i;} 
    printf("\nthis is Wn:\n\n"); 
    print_vector(Wn, 2*N); 
//Wn[j]=W_o[i]; 
//j++; 
} 

return(Wn); 
    } 
void print_vector(double *x,int N) 
{ 
int i; 
for (i=0; i<N; i++) 
{ 
    printf ("%9.4f \n", x[i]); 
} 
printf("\n"); 
} 


double *make_vector(double *x,int N) 
{ int i; 
double xi; 

x=(double *)malloc((N)*sizeof(double)); 

for(i=0;i<N;i++) 
{ 
    x[i]=(double)xi; 
} 
return(x); 
} 
+0

homeworkk 간다 초기화해야

double *make_vector(double *x,int N) { int i; double xi; 

? 헤인? –

+2

예. 그러나 질문은 이것보다 훨씬 큽니다. 이것은 아주 큰 질문에서의 작은 문제 일뿐입니다. –

답변

3

는 여기에 일반적인 논리입니다 :

LET a, b, merge BE ARRAYS 
FOR k IN 0..length(a) 
    merge[2*k] = a[i] 
    merge[2*k+1] = b[i] 
RETURN merge 

a가 만드는 심지어 항목 (2k), b 이상한 것들 (2k+1).

+0

그 지금 일하고있어 라! 감사! .. 나는 그 일을 할 생각을 했었지만 중첩 루프로 계속 놀았습니다. 고마워! –

+0

의사 코드에 대한 upvote! – lucasg

+0

@MaheenSiddiqui : 당신의 흥분은 답을 받아들이고 upvoting로 표현되어야합니다 –

0

이 아마 잘못 당신은 변수 xi 같은 일이 *Wn,*W_e,*W_o