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

2つの行列が等しいかどうかを判定するC言語プログラム

このプログラムでは、ユーザーが2つの行列の次数(行数と列数)および各要素を入力し、入力された2つの行列を比較します。

2つの行列のサイズ(行数・列数)とすべての要素が一致している場合、「2つの行列は等しい」と表示されます。

サイズは同じでも要素が1つでも異なる場合には、「行列は比較できるが、等しくはない」と表示されます。

サイズ自体が一致しない場合には、「2つの行列は比較できない」と表示されます。

プログラム

以下は、2つの行列が等しいかどうかを比較するCプログラムです。

#include <stdio.h>
#include <conio.h>
main(){
   int A[10][10], B[10][10];
   int i, j, R1, C1, R2, C2, flag =1;
   printf("Enter the order of the matrix A\n");
   scanf("%d %d", &R1, &C1);
   printf("Enter the order of the matrix B\n");
   scanf("%d %d", &R2,&C2);
   printf("Enter the elements of matrix A\n");
   for(i=0; i<R1; i++){
      for(j=0; j<C1; j++){
         scanf("%d",&A[i][j]);
      }
   }
   printf("Enter the elements of matrix B\n");
   for(i=0; i<R2; i++){
      for(j=0; j<C2; j++){
         scanf("%d",&B[i][j]);
      }
   }
   printf("MATRIX A is\n");
   for(i=0; i<R1; i++){
      for(j=0; j<C1; j++){
         printf("%3d",A[i][j]);
      }
      printf("\n");
   }
   printf("MATRIX B is\n");
   for(i=0; i<R2; i++){
      for(j=0; j<C2; j++){
         printf("%3d",B[i][j]);
      }
      printf("\n");
   }
   /* Comparing two matrices for equality */
   if(R1 == R2 && C1 == C2){
      printf("Matrices can be compared\n");
      for(i=0; i<R1; i++){
         for(j=0; j<C2; j++){
            if(A[i][j] != B[i][j]){
               flag = 0;
               break;
            }
         }
      }
   }
   else{
      printf(" Cannot be compared\n");
      exit(1);
   }
   if(flag == 1 )
      printf("Two matrices are equal\n");
   else
   printf("But,two matrices are not equal\n");
}

実行結果

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

Run 1:
Enter the order of the matrix A
2 2
Enter the order of the matrix B
2 2
Enter the elements of matrix A
1
2
3
4
Enter the elements of matrix B
1
2
3
4
MATRIX A is
   1 2
   3 4
MATRIX B is
   1 2
   3 4
Matrices can be compared
Two matrices are equal

Run 2:
Enter the order of the matrix A
2 2
Enter the order of the matrix B
2 2
Enter the elements of matrix A
1
2
3
4
Enter the elements of matrix B
5
6
7
8
MATRIX A is
   1 2
   3 4
MATRIX B is
   5 6
   7 8
Matrices can be compared
But,two matrices are not equal

プログラムの解説

このプログラムのポイントは、初期値が 1フラグ変数(flag)を使って等しいかどうかを判定している点です。

まず、2つの行列の行数(R1 と R2)および列数(C1 と C2)が一致しているかどうかを確認します。サイズが一致しない場合は比較が不可能なため、メッセージを表示してプログラムを終了します。

サイズが一致している場合は、二重の for ループで全要素を順番に比較します。もし1つでも異なる要素が見つかった時点で、フラグ変数を 0 に設定し、break 文でループを抜けます。

最終的にフラグ変数が 1 のままなら「2つの行列は等しい」、0 に変更されていれば「2つの行列は等しくない」と判定して結果を表示します。

  1. C言語のトークンとは?6つの種類とサンプルコードでわかりやすく解説

    トークンとはトークン(token)とは、コンパイラにとって意味を持つ、プログラムを構成する最小単位のことです。コンパイラはソースコードをこの最小単位へと分割し、生成されたトークンを基にコンパイルの各段階へと処理を進めていきます。トークンの種類C言語のトークンは、主に以下の6種類に分類されます。キーワード(予約語):int、return など、言語仕様によって意味が定められた語識別子:変数名や関数名など、開発者が自由に命名できる名前定数:10、3.14 など、プログラム中で値が変わらない固定値文字列:ダブルクォート( )で囲まれた文字の並び特殊記号:{ }、( )、; など、構文を区切るための記

  2. C言語で正方行列をZ字形に表示するプログラム

    プログラムの概要本記事では、C言語を使って正方行列の要素を「Z」の字形に沿って出力するプログラムを解説します。正方行列とは、行数と列数が等しい行列のことです。n行n列の行列は「n次の正方行列」と呼ばれ、2×2、3×3、4×4などの行列が該当します。Z字形出力のアルゴリズム行列の要素をZ字形で表示するには、次の3つの部分を順番に出力します。最上行(1行目):左端から右端までのすべての要素対角成分:右上から左下へ向かう斜めの要素(両端の角は除く)最下行(最終行):すべての要素これらを順につなげると、アルファベットの「Z」の形が完成します。3×3の行列の場合: a00 a01 a02