昨日から丸一日考えてわからなかったので、質問お願いします。
テキストファイルから、各列の最大値を読み込み、その読み込んだ最大値の中から最小値を読み込んで出力するプログラムを作成したいのですが、どうすればいいのかがわかりません。
今回のテキストファイルと、現時点でのプログラム、コンパイル結果を以下に示します。
<テキストファイル(center.txt)>
4 0.0 4.0 5.0 7.0 4.0 0.0 3.0 3.0 5.0 3.0 0.0 4.0 7.0 3.0 4.0 0.0
<プログラム>
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> const int FNLEN = 50; /* ファイル名の長さ */ const int MAX_N = 100; /* ノード数最大値 */ int main() { FILE *fp; int i, j, nnode; double dem[MAX_N], dist[MAX_N][MAX_N], wdist[MAX_N][MAX_N],dist2[MAX_N]; char file_name[FNLEN]; /* データファイル名 */ printf("Data file name: "); scanf("%s", file_name); if ((fp = fopen(file_name,"r")) == NULL){ /* ファイルオープンに失敗した場合は終了 */ printf("%s: ファイルをオープンできません!\n", file_name); return -1; } printf("データファイル名: %s\n", file_name); fscanf(fp,"%d",&nnode); /* ノード数の読み込み */ if (nnode < 1 || nnode > MAX_N) { printf("ノードの数は1以上%3d以下にしてください!\n", MAX_N); return -1; } for (i = 0; i < nnode; i++){ /* 距離行列の読み込み */ for (j = 0; j < nnode; j++){ fscanf(fp, "%lf", &dist[i][j]); } } fclose(fp); /* ファイルクローズ */ for (i = 0; i < nnode; i++) { // 行 for (j = 0; j < nnode; j++) { // 列 printf("%.3f ", dist[i][j]); } printf("\n"); } int max1_index=0,max2_index=0;//各列の最大値 for (j = 0; j < nnode; j++) { for (i = 0; i < nnode; i++) { if(dist[i][j]>dist[max1_index][max2_index]){ max1_index=i; max2_index=j; } } } int min_index = 0;//各列の最大値の中の最小値(最大値の最小値) for (j = 0; j < nnode; j++) { if (dist[min_index] > dist[j]) { max1_index = j; } } printf("\n\nノードの列番号は %dで、その値は %.3f\n", min_index + 1, dist[max1_index][min_index]); /* 結果の出力 */ return 0; }
<現時点の実行結果>
$ ./a.out Data file name: center.txt データファイル名: center.txt 0.000 4.000 5.000 7.000 4.000 0.000 3.000 3.000 5.000 3.000 0.000 4.000 7.000 3.000 4.000 0.000 ノードの列番号は 1で、その値は 7.000
<期待する結果>
$ ./a.out Data file name: center.txt データファイル名: center.txt 0.000 4.000 5.000 7.000 4.000 0.000 3.000 3.000 5.000 3.000 0.000 4.000 7.000 3.000 4.000 0.000 ノードの列番号は 2で、その値は 4.000
実行結果を見ていて感じたことは、左から一列目の最大値を求められていることから、あとはすべての列の最大値を求め、そのすべての列の最大値の中の最小値を求めるプログラムを作成したいのですが、どうすればいいのかがわかりませんでした。
どのように実装すればいいのでしょうか。回答よろしくお願いします。
https://ja.stackoverflow.com/questions/72870/
center.txt の入力データが対象行列になっていますが、そういう制約があるんでしょうか?