下のような文章に沿ったプログラムを書きたいです。内積はすんなり出せたのですが、直積を求める時に計算も違うし、表示の仕方もわかりません。どうすればいいのでしょうか?
任意の次元数nのベクトルを2個入力させ,作成した関数を用いて内積と直積とを計算し,結果を表示するプログラムを作成せよ. ただし,次元数nの最大値は100とし,それぞれの関数は以下の基準に従うこと.
内積(inner product)
double inner_product ( const double vectA[], const double vectB[], int n)
引数として与えられた実数型配列vectA, vectBをそれぞれ n 次元ベクトルと見なし,内積を算出する.返却値は算出された内積とする.
直積(outer product)
void outer_product ( const double vectA[], const double vectB[], int n, double M[][])
引数として与えられた実数型配列vectA, vectBをそれぞれ n 次元ベクトルと見なし,直積を算出する.算出された行列(テンソル)は引数で与えられた実数型2次元配列 M に格納する. 上記宣言のの部分には正しい数値(オブジェクト形式マクロでも良い)を入れる必要がある.
C
1 #include <stdio.h> 2 3/*内積を求める関数*/ 4 double inner_product ( const double vectA[], const double vectB[], int n) 5{ 6 int i; 7 double answer; 8 for ( i = 0 ; i < n; i ++ ){ 9 answer += vectA[i] * vectB[i]; 10 } 11 return answer; 12} 13 14/* 直積を求める関数 */ 15 void outer_product ( const double vectA[], const double vectB[], int n, double M[][100]) 16{ 17 int i, j, k; 18 double vecta[1][100]; 19 double vectb[100][1]; 20 double answer[i][j]; 21 22 for ( i = 0 ; i < n ; i++ ) { 23 vecta[0][i] = vectA[i]; 24 vectb[i][0] = vectB[i]; 25 } 26 for ( i = 0; i <n; i++ ) { 27 for ( j = 0 ; j < n ; j++ ) { 28 M[i][j] = 0.0; 29 M[i][j] += vecta[0][i] * vectb[i][0]; 30 printf("%4.2f", M[i][j]); 31 putchar('\n'); 32 } 33 } 34} 35 int main(void) 36{ 37 int n = 100; 38 double vecta [100]; 39 double vectb [100]; 40 double vectc [100]; 41 double answer[100][100]; 42 double ANSWER[100][100]; 43 int i = 0; 44 double naiseki; 45 int j = 0; 46 int k= 0; 47 48 49 naiseki = 0; 50 51 printf("ベクトルの次数は?"); 52 scanf("%d", &n); 53 54 printf("ベクトルAを入力して下さい"); 55 for (i = 0; i < n; i ++){ 56 scanf("%lf", &vecta[i]); 57 } 58 59 printf("ベクトルBを入力して下さい"); 60 for (i = 0; i < n; i ++){ 61 scanf("%lf", &vectb[i]); 62 } 63 64 printf("ベクトルA = "); 65 for (i = 0; i < n; i++){ 66 printf("%.2f ", vecta[i]); 67 } 68 69 printf("\nベクトルB = "); 70 for (i = 0; i < n; i++){ 71 printf(" %.2f ", vectb[i]); 72 } 73 74 printf("\n"); 75 76 naiseki = inner_product ( vecta, vectb, n ); 77 78 printf("内積:%.2f\n", naiseki); 79 80 answer[0][0] = 0; 81 printf("直積:"); 82 outer_product(vecta, vectb, n, answer); 83 84 printf("\n"); 85 86 return 0; 87} 88
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。