問 7(提出プログラム名:ex0907.h)
※ex0907.c ではなく ex0907.h を提出なので注意!
このプログラム(ex0907.c)とヘッダ(ex0907.h)をそれぞれダウンロードし,
ヘッダの中の関数 inner_product を完成させなさい.
(書き換えるのは ex0907.h のみであり,ex0907.c はコンパイルと実行に使うだけなので間違えないこと)
関数 inner_product では,引数として与えられた 2 つの int 配列 a, b について,
それらが表す N 次元ベクトルどうしの内積を求めて返すものとする(N はマクロで定義されている).
なお,この関数内では if 文を使ってはいけません※そもそも if 文で場合分けを行う必要はないが,以下に示すように題意を誤解して直交判定までやろうとする受講生が例年数名いるため,あえてこの注意書きを入れている.
※このプログラムではベクトルの直交を判定しているが,inner_product ではその判定までは行っていない.この問題で求められているのは,内積を計算する inner_product を完成させることだけなので題意を誤解しないこと.直交判定は main の方で行っているので何もする必要はない.
【注意】
この問題では ex0907.h を提出しなさい(ex0907.c ではない).
また,マクロの定義部分以外に 3 と直接書いてはいけません.
【ヒント】
2 つの配列 a と b で表されるベクトルの内積は,一般には
で求まることになります(ただし, と は a[i] と b[i] に対応します).つまり,仮に直接書いたとすれば
a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + … + a[N-1]*b[N-1]
ということになります.それゆえ,N がどのような値であってもこのような計算が可能なように for 文か while 文を使った繰り返し構造でこの計算を実現する必要があります.
※繰り返しを使わずに上の計算式を直接書くなどは論外です.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
3 次元ベクトル a を入力してください:1 3 4 3 次元ベクトル b を入力してください:1 -3 2 両者は直交しています⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
3 次元ベクトル a を入力してください:1 3 4 3 次元ベクトル b を入力してください:1 1 1 両者は直交していません⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
3 次元ベクトル a を入力してください:1 0 0 3 次元ベクトル b を入力してください:0 2 3 両者は直交しています⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例)内積の計算を間違っていたり,合計を求める変数を 0 に初期化するのを忘れている.
■ 内積の計算が 3 次元ベクトルの場合に限定されてしまっている(マクロ N を使っていない).
あるいは a[0]*b[0] + a[1]*b[1] + a[2]*b[2] と直接書いてしまっている(論外である)
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 問 6 (ex0906.h) ]
ミスが無いことを確認したら次の問題へ → [ 問8 (ex0908.h) ]