2016-04-02 20 views
1

3by3行列クラスが正しく動作しません。 3番目のインスタンスを使用して乗算して回答を保存し、2つのインスタンスを掛けると、正しく動作します。しかし、私が* *しようとすると、それは私に奇妙な数字を与えます。3by3行列乗算

ここでの正規*と* =機能:何らかの理由で私を得る[18] [18] [18] [108] [228] [18] [108] [708] [については

threeby3matrix operator*(threeby3matrix& multiplier) 
    { 
    threeby3matrix m1; 
    m1[0] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6]; 
    m1[1] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7]; 
    m1[2] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8]; 
    m1[3] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6]; 
    m1[4] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7]; 
    m1[5] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8]; 
    m1[6] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6]; 
    m1[7] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7]; 
    m1[8] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8]; 
    return m1; 
    } 
    threeby3matrix& operator*=(threeby3matrix& multiplier) 
    { 
    matrix[0] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6]; 
    matrix[1] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7]; 
    matrix[2] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8]; 
    matrix[3] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6]; 
    matrix[4] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7]; 
    matrix[5] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8]; 
    matrix[6] = matrix[0] * multiplier[0] + matrix[1] * multiplier[3] + matrix[2] * multiplier[6]; 
    matrix[7] = matrix[3] * multiplier[1] + matrix[4] * multiplier[4] + matrix[5] * multiplier[7]; 
    matrix[8] = matrix[6] * multiplier[2] + matrix[7] * multiplier[5] + matrix[8] * multiplier[8]; 
    return *this; 
    } 

1638]

すべてが18であるべきである。私は括弧で囲むことを試みたが、何も動作していないようだ。

+0

も、私は言及を忘れてしまったあなたはまだ、まだループ、「用」については何も知りました、私は2次元配列 – student

+1

を保存するために、単一の次元動的配列を使用? –

+0

@SamVarshavchik - 私は彼らが刻むためにタイピングをしたいと思うよ、 –

答えて

1

あなたは計算に使用するように行列を修正しています。

はこのような何かを試してみてください。

threeby3matrix& operator*=(threeby3matrix& multiplier) 
{ 
    std::swap(*this, operator*(multiplier)); 
    return *this; 
} 
+1

ああ、うわー、愚かな間違いのように見える今、それを見る、ありがとう。そして、私たちはループを学びました。複数のループと変数が必要になるため、あまり実用的ではないように思えました。 – student