0

配列とこの配列自体の外側の差を計算し、正の結果のみを保存する関数を作成しました (以下のコードを参照)。

void outer_pos(double *x, int *n, double *output){
    int i, j, l;
    for(i=0, l=0; i<*n; i++){
        for(j=0; j<*n; j++){
            if((x[j]-x[i])>0){
                output[l+1]=x[j]-x[i];
                output[0]=(double)(++l);
            }
        }
    } 
}

次に、以下の関数で を呼び出しますouter_pos。1 つの問題は、配列 xouter に同順位の値が含まれている可能性があることです。同順位の値がない場合、正の差の数は ( nsamp) (*nsamp-1)/2 ですが、同順位の値がある場合、実際の数は小さくなります。したがって、サイズが の結果に依存するように v1v2 を宣言する方法があるかどうか疑問に思いますouter_pos。私は主に R を使用していますが、これは配列を初期化する必要がないため、C でこれを行う方法がわかりません。

void foo(double *x, double *y, int *nsamp){
    int i, j, k, oper=2, l;
    double* result=malloc(sizeof(double)*((*nsamp)*(*nsamp-1)/2 + 1));
    double* xouter=malloc(sizeof(double)*(*nsamp));

    for(i=0;i<*nsamp;i++) 
         xouter[i]=x[i]+y[i];

    outer_pos(xouter, nsamp, &result[0]);

    free(xouter);    
        .
        .
        .
        .
}
4

1 に答える 1

1
  1. malloc の代わりに calloc() を試し、outer_pos() 内の出力用にメモリを割り当てます。

    void outer_pos(double *x, int *n, double *output){
        int i, j, l;
        &output[0]=malloc(sizeeof(double));
        for(i=0, l=0; i<*n; i++){
            for(j=0; j<*n; j++){
                if((x[j]-x[i])>0){
                    &output[l+1]=malloc(sizeeof(double));
                    output[l+1]=x[j]-x[i];
                    output[0]=(double)(++l);
                }
            } 
        }
    }
    
于 2013-05-10T14:54:07.467 に答える