前提・実現したいこと
C言語で2つのdatファイルを読み込み、結合して新しいファイルに出力するプログラムを作ってます。2つのdatファイルには、節点のx座標、y座標、z座標があり、それぞれのファイルから値を二次元配列に保存するところまではできたのですが、新しいファイルに出力する際に、重複をなくして出力しないといけないのですが、重複をなくしてすっきりと表示できません。
二次元配列には 接点1のx座標は[0][0]、y座標は[0][1]、z座標は[0][2]、接点2のx座標は[1][0]、y座標は[1][1]、z座標は[1][2]、のように保存してあります。
今回が最初の質問なので伝わりにくかったらごめんなさい。お願いします。
コードもきれいとは言えないので改善点もあればお願いします。
発生している問題・エラーメッセージ
for文とif文を使ったのですが、重複を取り除いた後の座標の数がとても多くなってしまいました。
きれいに取り除けず、取り除いた値が重複してしまいます。
該当のソースコード
C
1#include <stdio.h> 2 3int main(){ 4int point1[1024][16]; 5int point2[1024][16]; 6double epoint1[1024][2]; 7double epoint2[1024][2]; 8double ecomb2[1024][2]; 9 10/* ファイル読み込みなどは割愛 */ 11 12 13//読み取って配列に保存 14for(int i = 1; i < point1[0][0]+1; i++){ 15 //point1[0][1]、point2[0][1]はヘッダー部分に記された接点の数 16 //すでに配列に保存済み。 17 for(int j = 0; j < 3; j++){ 18 fscanf(readf_in1,"%lf", //lfは倍精度実数で読み取る 19 &(epoint1[i][j]), 20 &(epoint1[i][j+1]), 21 &(epoint1[i][j+2]) 22 ); 23 } 24 } 25 for(int i = 1; i < point2[0][0]+1; i++){//配列に保存 26 for(int j = 0; j < 3; j++){ 27 fscanf(readf_in2,"%lf", //lfは倍精度実数で読み取る 28 &(epoint2[i][j]), 29 &(epoint2[i][j+1]), 30 &(epoint2[i][j+2]) 31 ); 32 } 33 } 34 35/* -- ここからわかりません -- */ 36 int k = 0; 37 for(int i = 0; i < point2[0][0]; i++){ 38 for(int j =0; j < point1[0][0]; j++){ 39 if(epoint1[i][0] == epoint2[j][0] && epoint1[i][1] == epoint2[j][1] && 40epoint1[i][3] == epoint2[j][3] ){ 41 printf("match\n");//確認用 42 } 43 else{ 44 k = k + 1; 45 ecomb2[k][0] = epoint2[j][0]; 46 ecomb2[k][1] = epoint2[j][1]; 47 ecomb2[k][2] = epoint2[j][2]; 48 } 49 } 50 } 51/* -- -- */ 52 //確認用 53 for(int i = 0; i < k; i++){ 54 fprintf(writef_in,"%24.13E%24.13E%24.13E\n", 55 ecomb2[i][0], ecomb2[i][1], ecomb2[i][2] 56 ); 57}
回答2件
あなたの回答
tips
プレビュー