やりたいこと
以下の内容の関数を作りmainで呼び出すことが自分の課題になっている。
・double型の行列
・最初の行列Aを表示(形は123,456,789の3x3で決まっている)
・転置行列ATの計算からの表示
・A+ATの計算
・A-ATの計算
これらの処理を動くように書いてみたがもうちょっとスマートにかけないか??
もっと別の方法で書けないか??さらにはc言語の規則的にどう書くのが正しいのか??というかぶっちゃけこの頭悪そうなコードが嫌すぎるというのがあります
が気になってしまっていろいろ調べてみたが、先人の知恵をお借りできれば新しい考えが浮かぶと思って質問しました。
今回書いたプログラム
内容は
・double型の行列
・最初の行列Aを表示(形は123,456,789の3x3で決まっている)
・転置行列ATの計算からの表示
・A+ATの計算
・A-ATの計算
のようになっている
c
1#include <stdio.h> 2 3// 関数初期化宣言 4double tenti(double A[3][3], double AT[3][3]); 5double make_gyouretu(double A[3][3],double AT[3][3]); 6double add_tenti(double A[3][3],double AT[3][3]); 7double deff_tenti(double A[3][3],double AT[3][3]); 8 9// main関数 10int main(void) { 11 double A[3][3] = {{1.0,2.0,3.0},{4.0,5.0,6.0},{7.0,8.0,9.0}}; 12 double AT[3][3]; 13 14 // 関数呼び出し 15 make_gyouretu(A,AT); 16 tenti(A, AT); 17 add_tenti(A,AT); 18 deff_tenti(A,AT); 19 20 return 0; 21} 22 23// 行列の表示 24double make_gyouretu(double A[3][3],double AT[3][3]) 25{ 26 int i,j; 27 28 printf("行列A\n"); 29 30 for (i=0; i < 3; i++) { 31 for (j=0; j< 3; j++) { 32 printf("%.1f ", A[i][j]); 33 } 34 printf("\n"); 35 } 36} 37 38// 転置行列 39double tenti(double A[3][3],double AT[3][3]) 40{ 41 int i,j; 42 for (i=0; i < 3; i++) { 43 for (j=0; j< 3; j++) { 44 AT[j][i] = A[i][j]; 45 } 46 printf("\n"); 47 } 48 printf("転置行列AT\n"); 49 for (i=0; i < 3; i++) { 50 for (j=0; j< 3; j++) { 51 printf("%.1f ", AT[i][j]); 52 } 53 printf("\n"); 54 } 55 printf("\n"); 56 57} 58 59// 和を求める 60double add_tenti(double A[3][3],double AT[3][3]) 61{ 62 int i,j; 63 printf("AT-A\n"); 64 for (i=0; i < 3; i++) { 65 for (j=0; j< 3; j++) { 66 printf("%.1f ", A[i][j] + AT[i][j]); 67 } 68 printf("\n"); 69 } 70 printf("\n"); 71} 72 73//差を求める 74double deff_tenti(double A[3][3],double AT[3][3]) 75{ 76 int i,j; 77 printf("AT-A\n"); 78 for (i=0; i < 3; i++) { 79 for (j=0; j< 3; j++) { 80 printf("%.1f ", A[i][j] - AT[i][j]); 81 } 82 printf("\n"); 83 } 84 printf("\n"); 85}
結果
行列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で呼び出すことなのでご了承ください。
皆さん知恵を貸していただき好きに魔改造していただきたいです。
何か至らない点があればご指摘よろしくお願いします。
回答5件
あなたの回答
tips
プレビュー