質問: A[i][j]; } printf("\n"); } printf("転置行列AT\n"); for (i=0; i < 3; i++) { for (j=0; j< 3; j++) { printf("%.1f ", AT[i][j]); } printf("\n"); } printf("\n"); } // 和を求める double add_tenti(double A[3][3],double AT[3][3]) { int i,j; printf("AT-A\n"); for (i=0; i < 3; i++) { for (j=0; j< 3; j++) { printf("%.1f ", A[i][j] + AT[i][j]); } printf("\n"); } printf("\n"); } //差を求める double deff_tenti(double A[3][3],double AT[3][3]) { int i,j; printf("AT-A\n"); for (i=0; i < 3; i++) { for (j=0; j< 3; j++) { printf("%.1f ", A[i][j] - AT[i][j]); } printf("\n"); } printf("\n"); } ``` ### 結果 ``` 行列A 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 転置行列AT 1.0 4.0 7.0 2.0 5.0 8.0 3.0 6.0 9.0 AT-A 2.0 6.0 10.0 6.0 10.0 14.0 10.0 14.0 18.0 AT-A 0.0 -2.0 -4.0 2.0 0.0 -2.0 4.0 2.0 0.0 ``` ### まとめ 自分の中で書き換えられると思えるのは転置行列を求めるところが一番である。 本来mainの中で書けば全然問題ないのだが、目的はあえて自作関数をスマートに書いてmainで呼び出すことなのでご了承ください。 皆さん知恵を貸していただき好きに魔改造していただきたいです。 何か至らない点があればご指摘よろしくお願いします。
回答: コメントと命名を見て気になった部分を書きました。 * 関数の名前が実際の処理と矛盾している make_gyouretuというよりもprint_gyouretu add_tentiだと転置行列を元の行列と足すと感じられるので、add_gyouretuの方が良い。(あるいは和を表示するだけなのでprint_add_gyouretuとか) * スペルミス ex:defではなくdiff(different)。そもそも引き算は英語でsubtractionなのでsub_gyouretuの方が良い。 * 戻り値ない。 * 和なのにAT-Aと表示している。 * コメントが実際の処理と違って困惑する。//差を求めると書くと、定義が関数なのでなんらかの計算して値を返してくれるのかなと期待する。実際には //差を表示する でしょう。 * 行列は英語でmatrixなのでそう書いた方がかっこいい。