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

Cプログラムで指定された配列から下三角行列パターンを出力する方法

n×n の行列が与えられたとき、その行列を下三角行列(下三角形パターン)の形で出力するのが本記事のテーマです。

下三角行列とは、主対角線より下の要素(主対角線上の要素を含む)が元の値をそのまま保持し、主対角線より上の要素がすべて 0 になった行列のことです。

次の図を見ると理解しやすくなります。

Cプログラムで指定された配列から下三角行列パターンを出力する方法

図の緑色の要素は主対角線より下(および主対角線上)の要素で、元の値がそのまま残ります。一方、赤色の要素は主対角線より上の要素で、すべて 0 に設定されます。

入力と出力の例

入力: matrix[3][3] = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 } }
出力:
    1 0 0
    4 5 0
    7 8 9

アルゴリズム

処理の流れは非常にシンプルです。行番号 i と列番号 j を比較し、i < j(主対角線より上)であれば 0 を出力し、それ以外では元の要素の値を出力します。

int lower_mat(int mat[n][m])
START
STEP 1: 変数 i と j を宣言する
STEP 2: i = 0 から i < n の間、以下を繰り返す
    j = 0 から j < m の間、以下を繰り返す
        IF i < j THEN
            "0\t" を出力
        ELSE
            mat[i][j] を出力
        END IF
    END FOR
    改行を出力
END FOR
STOP

C言語での実装例

#include <stdio.h>
#define n 3
#define m 3
int lower_mat(int mat[n][m]){
    int i, j;
    for ( i = 0; i < n; i++){
        for ( j = 0; j < m; j++){
            if( i < j )
                printf("0\t");
            else
                printf("%d\t", mat[i][j]);
        }
        printf("\n");
    }
}
int main(int argc, char const *argv[]){
    int mat[n][m] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    lower_mat(mat);
    return 0;
}

実行結果

上記のプログラムをコンパイルして実行すると、次のような出力が得られます。

1 0 0
4 5 0
7 8 9

このように、二重ループと条件分岐を組み合わせるだけで、行列を下三角行列のパターンに変換して表示できます。時間計算量は O(n×m)、この例では O(n²) となり、行列のすべての要素を一度ずつ走査する効率的な方法です。

  1. C++で行列の各列の0の個数に基づいて列をソートし、インデックスを出力する方法

    N行M列のサイズを持つ行列が与えられたとき、各列に含まれる0の個数を数え、その個数に基づいて列をソートし、ソート後の列のインデックスを出力するのが課題です。 例えば、1列目に0が1つ含まれ、2列目には0がまったく含まれず、3列目に0が2つ含まれている場合、0の少ない順に並べると出力は「2 1 3」になります。 入力例と出力例 Input:     0 0 0     1 1 1     1 0 1 Output: 1 3 2 解説 上記の入力における各列の0の個数は次のとおり

  2. C++で行列が下三角行列かどうかを判定するプログラム

    行数 r と列数 c が等しい(r = c)正方行列 M[r][c] が与えられたとき、その行列 M が「下三角行列」であるかどうかを判定する方法を解説します。 下三角行列とは 下三角行列とは、主対角線(およびその下側)の要素が非ゼロであり、主対角線より上側の要素がすべてゼロである行列のことです。 次の図の例を見てみましょう。 上の図で赤く強調されている要素は主対角線より上側の要素で、これらはすべてゼロになっています。それ以外の要素は非ゼロです。 入力例と出力例 Input: m[3][3] = { {1, 0, 0},    {2, 3, 0},   &nbs