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

与えられた行列をC++で対角行列に変換するプログラム


サイズnxnの行列を指定すると、任意のタイプの指定された行列を対角行列に変換するタスクが与えられます。

対角行列とは

対角行列は、すべての非対角要素がゼロであり、対角要素が任意の値であるnxn行列です。

以下に、非対角要素を0に変換する図を示します。

$$ \ begin {bmatrix} 1&2&3 \\ 4&5&6 \\ 7&8&9 \ end {bmatrix} \:\ rightarrow \:\ begin {bmatrix} 1&0&3 \\ 0 &5&0 \\ 7&0&9 \ end {bmatrix} $$

アプローチは、すべての非対角要素に対して1つのループを開始し、対角要素に対して別のループを開始し、非対角要素の値をゼロに置き換え、対角要素を変更しないままにすることです。

Input-: matrix[3][3] = {{ 1, 2, 3 },
   { 4, 5, 6 },
   { 7, 8, 9 }}
Output-: {{ 1, 0, 3},
   { 0, 5, 0},
   { 7, 0, 9}}
Input-: matrix[3][3] = {{ 91, 32, 23 },
   { 40, 51, 26 },
   { 72, 81, 93 }}
Output-: {{ 91, 0, 23},
   { 0, 51, 0},
   { 72, 0, 93}}

アルゴリズム

Start
Step 1-> define macro for matrix size as const int n = 10
Step 2-> Declare function for converting to diagonal matrix
   void diagonal(int arr[][n], int a, int m)
      Loop For int i = 0 i < a i++
         Loop For int j = 0 j < m j++
            IF i != j & i + j + 1 != a
               Set arr[i][j] = 0
            End
         End
      End
      Loop For int i = 0 i < a i++
         Loop For int j = 0 j < m j++
            Print arr[i][j]
         End
         Print \n
      End
Step 2-> In main()
   Declare matrix as int arr[][n] = { { 1, 2, 3 },
      { 4, 5, 6 },
      { 7, 8, 9 } }
   Call function as diagonal(arr, 3, 3)
Stop

#include <iostream>
using namespace std;
const int n = 10;
//print 0 at diagonals in matrix of nxn
void diagonal(int arr[][n], int a, int m) {
   for (int i = 0; i < a; i++) {
      for (int j = 0; j < m; j++) {
         if (i != j && i + j + 1 != a)
         arr[i][j] = 0;
      }
   }
   for (int i = 0; i < a; i++) {
      for (int j = 0; j < m; j++) {
         cout << arr[i][j] << " ";
      }
      cout << endl;
   }
}
int main() {
   int arr[][n] = { { 1, 2, 3 },
      { 4, 5, 6 },
      { 7, 8, 9 } };
   diagonal(arr, 3, 3);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます

0 2 0
4 0 6
0 8 0

  1. C++で対角行列とスカラー行列をチェックするプログラム

    行列M[r][c]が与えられた場合、「r」は行数を示し、「c」はr=cが正方行列を形成するような列数を示します。与えられた正方行列が対角であるかどうかを確認する必要があります およびスカラー 対角の場合、行列かどうか およびスカラー マトリックスを作成し、結果にyesを出力します。 対角行列 正方行列m[][]は、主対角を除く要素がゼロの場合にのみ対角行列になります。 下の図のように- ここで、赤の要素は主対角線であり、主対角線がゼロであることを除いてゼロ以外の残りの要素であり、対角行列になっています。 。 例 Input: m[3][3] = { {7, 0, 0},  

  2. 隣接行列を実装するためのC++プログラム

    グラフの隣接行列は、サイズV x Vの正方行列です。VはグラフGの頂点の数です。この行列では、各辺にV個の頂点がマークされています。グラフにiからjの頂点までのエッジがある場合、i thの隣接行列に 行とjth 列は1(または加重グラフの場合はゼロ以外の値)になります。それ以外の場合、その場所は0を保持します。 隣接行列表現の複雑さ: 隣接行列表現は、計算中にO(V2)のスペースを取ります。グラフに最大数のエッジと最小数のエッジがある場合、どちらの場合も必要なスペースは同じになります。 入力: 出力: 0 1 2 3 4