C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で多次元配列を使って2つの行列を加算する方法を解説

行列とは

行列(マトリックス)とは、数値を行と列の形式に整理して配置した長方形の配列のことです。行列は数学やプログラミングの分野で広く活用されており、画像処理やグラフ理論、線形代数の計算など、さまざまな場面で登場します。

例えば、以下のような4行3列の行列(4×3行列)が挙げられます。

3 5 1
7 1 9
3 9 4
1 6 7

このように、行列は「行数 × 列数」のサイズで表現されます。C++では、このような行列を多次元配列(2次元配列)として扱うことができます。

2つの行列を加算するC++プログラム

それでは、多次元配列を使用して2つの行列を加算するC++プログラムを見ていきましょう。行列の加算では、対応する位置にある要素同士を足し合わせます。そのため、加算できるのは行数と列数が同じ行列同士だけである点に注意が必要です。

サンプルコード

#include <iostream>
using namespace std;
int main() {
    int r=2, c=4, sum[2][4], i, j;
    int a[2][4] = {{1,5,9,4} , {3,2,8,3}};
    int b[2][4] = {{6,3,8,2} , {1,5,2,9}};
    cout<<"The first matrix is: "<<endl;
    for(i=0; i<r; ++i) {
        for(j=0; j<c; ++j)
        cout<<a[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;
    cout<<"The second matrix is: "<<endl;
    for(i=0; i<r; ++i) {
        for(j=0; j<c; ++j)
        cout<<b[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;
    for(i=0;i<r;++i)
    for(j=0;j<c;++j)
    sum[i][j]=a[i][j]+b[i][j];
    cout<<"Sum of the two matrices is:"<<endl;
    for(i=0; i<r; ++i) {
        for(j=0; j<c; ++j)
        cout<<sum[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}

実行結果

The first matrix is:
1 5 9 4
3 2 8 3

The second matrix is:
6 3 8 2
1 5 2 9

Sum of the two matrices is:
7 8 17 6
4 7 10 12

プログラムの解説

1. 行列の定義と表示

まず、プログラムの冒頭で2つの行列 a と b を定義しています。ここでは2行4列の2次元配列として初期化しています。

int a[2][4] = {{1,5,9,4} , {3,2,8,3}};
int b[2][4] = {{6,3,8,2} , {1,5,2,9}};

続いて、ネストしたforループ(二重ループ)を使って、それぞれの行列の要素を順番に出力します。外側のループが行、内側のループが列を担当しており、1行分の要素を表示した後に改行することで、行列の形を保ったまま画面に表示できます。

cout<<"The first matrix is: "<<endl;
for(i=0; i<r; ++i) {
    for(j=0; j<c; ++j)
    cout<<a[i][j]<<" ";
    cout<<endl;
}

2. 行列の加算処理

2つの行列の加算は、ネストしたforループを用いて行います。対応する要素同士を足し合わせた結果は、行列 sum[][] に格納されます。この部分が行列加算の核心となる処理です。

for(i=0;i<r;++i)
for(j=0;j<c;++j)
sum[i][j]=a[i][j]+b[i][j];

この処理では、例えば a[0][0] + b[0][0] の結果が sum[0][0] に、a[0][1] + b[0][1] の結果が sum[0][1] に、というように全要素に対して順番に加算が行われます。

3. 計算結果の表示

2つの行列の和が求まったら、その結果を画面に出力します。表示方法は行列 a や b の場合と同様に、二重ループを使用します。

cout<<"Sum of the two matrices is:"<<endl;
for(i=0; i<r; ++i) {
    for(j=0; j<c; ++j)
    cout<<sum[i][j]<<" ";
    cout<<endl;
}

まとめ

このプログラムでは、C++の多次元配列(2次元配列)とネストしたforループを組み合わせることで、行列の定義・表示・加算という一連の処理を実現しています。行列の加算は「同じ位置の要素同士を足す」というシンプルなルールに基づいているため、二重ループの基本構造を理解すれば簡単に実装できます。

この考え方は、行列の減算や転置、積の計算など、より高度な行列演算プログラムを書く際の基礎にもなります。ぜひ、行数や列数を変更したり、減算に書き換えたりして、動作を試してみてください。

  1. 接続行列を使ってグラフを表現するC++プログラムの解説

    接続行列(インシデンス行列)とはグラフの接続行列(インシデンス行列)は、グラフをメモリ上に格納するためのもうひとつの表現方法です。隣接行列と異なり、接続行列は正方行列ではありません。そのサイズは V × E で表されます。ここで V はグラフの頂点数、E は辺の数です。この行列では、各行に頂点が配置され、各列に辺が配置されます。ある辺 e {u, v} に対しては、列 e のうち頂点 u と頂点 v に対応する位置に「1」がマークされます。これにより、「どの頂点がどの辺に接続しているか」という情報を直感的に把握できます。接続行列の計算量とメモリ使用量接続行列による表現では、構築時に O(V ×

  2. 隣接行列を使ってグラフを表現するC++プログラムの解説

    グラフの隣接行列(Adjacency Matrix)とは、サイズが V × V の正方行列のことです。ここでの V はグラフ G の頂点数を表します。行列の行と列にはそれぞれ頂点が対応しており、頂点 i から頂点 j への辺が存在する場合は、i 行 j 列の要素に「1」(重み付きグラフの場合は非ゼロの値)を格納します。辺が存在しない場合は、その位置には「0」が入ります。 隣接行列表現の計算量 隣接行列は計算時に O(V2) の記憶領域を必要とします。グラフが最大数の辺を持つ場合でも最小数の辺しか持たない場合でも、必要なメモリ量は同じです。つまり、辺の数に依存せず常に V × V 分の領域を確