1

次の問題があります: ファイルがあります。次のデータを含むfile1.datとしましょう:

1 2
3 1
2 1
1 3
3 2

このファイルから読み取り、新しいファイルに NxN 行列を作成するプログラムを C で作成したいと思います。行列の i 番目と j 番目の要素の両方がfile1.datに含まれている場合は 1 、それ以外の場合は 0です。 . この場合、次のような 3x3 マトリックスがあります。

0 1 1
1 0 0
1 1 0

私にとって難しいのは、 file1.dat内の数値が、1 を配置する必要があるマトリックス要素の座標であり、他のサイトでは 0 を配置する必要があることをコンピューターに明確にすることです。

ユーザーの1人からの提案として、次のコードを試しました:

#include <stdio.h>
#define N 131827

int main(void){
int x,y;
int matrix[N][N];
FILE *ifp = fopen("file1.dat", "r");
FILE *ofp = fopen("matrice_A_1.dat", "w");
while(fscanf(ifp, "%d %d", &x, &y) != EOF){
x--;
y--;
matrix[x][y] = 1;
}
fclose(ifp);
for(x=0; x<N; x++){
  for(y=0; y<N; y++){
fprintf(ofp, "%d ", matrix[x][y]);
  }
  fprintf(ofp, "\n");
}
fclose(ofp);
return(0);
}

しかし、131827 行 (および 2 列) の別のfile1.datを使用しましたが、セグメンテーション違反エラーが発生します。何か助けはありますか?

4

2 に答える 2

1
#include <stdio.h>
//Create NxN matrix with input coordinates used to set element val=1; rest 0
void doStuff(int N){
    int x,y;
    int matrix[N][N] = {{0}};
    FILE *ifp = fopen("file1.dat", "r");
    FILE *ofp = fopen("out.dat", "w");
    while(fscanf(ifp, "%d %d", &x, &y) != EOF){
        x--;
        y--;
        matrix[x][y] = 1;
    }
    fclose(ifp);
    for(x=0; x<N; x++){
        for(y=0; y<N; y++){
            fprintf(ofp, "%d ", matrix[x][y]);
        }
        fprintf(ofp, "\n");
    }
    fclose(ofp);
}
于 2012-12-17T23:53:34.040 に答える
1

次のように簡単にできます。

// Define static matrix containing all zeroes.
const int ROWS = 3;
const int COLS = 3;
int m[ROWS][COLS] = {0};

それから読むには...

int i, j;
FILE * fp = fopen( "file1.dat", "rt" );
if( fp != NULL ) {
    while( 2 == fscanf( fp, "%d%d", &i, &j ) {
        if( i < 1 || i > ROWS || j < 1 || j > COLS ) {
             printf( "Bad address: %d, %d\n", i, j );
             continue;
        }
        m[i-1][j-1] = 1;
    }
    fclose(fp);
}
于 2012-12-17T23:42:00.100 に答える