はじめに
この実験では、C プログラミングで 2 つの行列を加算する方法を学びます。この実験では、両方の行列の次元と要素を読み込む、対応する要素を加算する、そして結果の行列を出力する、という手順をカバーします。まず、行列の次元と要素を読み込む C プログラムを作成し、次に行列加算のロジックを実装し、最後に最終的な行列を出力します。この実験は、C を用いた行列と線形代数の操作に関する実践的な経験を提供することを目的としています。
この実験では、C プログラミングで 2 つの行列を加算する方法を学びます。この実験では、両方の行列の次元と要素を読み込む、対応する要素を加算する、そして結果の行列を出力する、という手順をカバーします。まず、行列の次元と要素を読み込む C プログラムを作成し、次に行列加算のロジックを実装し、最後に最終的な行列を出力します。この実験は、C を用いた行列と線形代数の操作に関する実践的な経験を提供することを目的としています。
このステップでは、C プログラムで 2 つの行列の次元と要素を読み込む方法を学びます。行列の加算では、行列のサイズが同じである必要があります。そのため、最初に行列の次元と要素の入力を実装します。
まず、行列加算用の新しい C ファイルを作成します。
cd ~/project
nano matrix_addition.c
次に、行列の次元と要素を読み込むコードを記述します。
#include <stdio.h>
#define MAX_SIZE 10
int main() {
int rows, cols;
int matrix1[MAX_SIZE][MAX_SIZE], matrix2[MAX_SIZE][MAX_SIZE];
// 行列の次元を読み込む
printf("Enter number of rows (max %d): ", MAX_SIZE);
scanf("%d", &rows);
printf("Enter number of columns (max %d): ", MAX_SIZE);
scanf("%d", &cols);
// 最初の行列の要素を入力
printf("Enter elements of first matrix:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("Enter element [%d][%d]: ", i, j);
scanf("%d", &matrix1[i][j]);
}
}
// 二番目の行列の要素を入力
printf("Enter elements of second matrix:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("Enter element [%d][%d]: ", i, j);
scanf("%d", &matrix2[i][j]);
}
}
return 0;
}
プログラムをコンパイルします。
gcc matrix_addition.c -o matrix_addition
プログラムを実行すると、行列の次元と要素を入力するよう求められます。
Enter number of rows (max 10): 2
Enter number of columns (max 10): 3
Enter elements of first matrix:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter elements of second matrix:
Enter element [0][0]: 7
Enter element [0][1]: 8
Enter element [0][2]: 9
Enter element [1][0]: 10
Enter element [1][1]: 11
Enter element [1][2]: 12
#define MAX_SIZE 10 は、行列の次元の最大値を設定します。scanf() は、行数、列数、および行列要素の整数入力を読み取るために使用されます。for ループは、両方の行列の要素を入力するために使用されます。このステップでは、2 つの行列の対応する要素を加算し、その結果を新しい行列に格納する方法を学びます。
以前の C ファイルを開きます。
cd ~/project
nano matrix_addition.c
行列要素を加算するようにプログラムを修正します。
#include <stdio.h>
#define MAX_SIZE 10
int main() {
int rows, cols;
int matrix1[MAX_SIZE][MAX_SIZE], matrix2[MAX_SIZE][MAX_SIZE], result[MAX_SIZE][MAX_SIZE];
// 前の入力コードは同じままです
// ... (matrix1 と matrix2 の次元と要素の入力)
// 対応する要素を加算する
printf("\nResulting Matrix (Matrix1 + Matrix2):\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i][j] = matrix1[i][j] + matrix2[i][j];
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
更新されたプログラムをコンパイルします。
gcc matrix_addition.c -o matrix_addition
プログラムを実行します。
./matrix_addition
Enter number of rows (max 10): 2
Enter number of columns (max 10): 3
Enter elements of first matrix:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter elements of second matrix:
Enter element [0][0]: 7
Enter element [0][1]: 8
Enter element [0][2]: 9
Enter element [1][0]: 10
Enter element [1][1]: 11
Enter element [1][2]: 12
Resulting Matrix (Matrix1 + Matrix2):
8 10 12
14 16 18
resultが作成されます。forループは、両方の行列の各要素を反復処理します。result[i][j] = matrix1[i][j] + matrix2[i][j] は、対応する要素を加算します。printf() は、結果の行列を表示するために使用されます。このステップでは、結果の行列をきれいで読みやすい方法でフォーマットして出力する方法を学びます。
以前の C ファイルを開きます。
cd ~/project
nano matrix_addition.c
専用の行列出力関数でプログラムを更新します。
#include <stdio.h>
#define MAX_SIZE 10
// 行列を出力する関数
void printMatrix(int matrix[MAX_SIZE][MAX_SIZE], int rows, int cols, const char* matrixName) {
printf("%s:\n", matrixName);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%4d ", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
int main() {
int rows, cols;
int matrix1[MAX_SIZE][MAX_SIZE], matrix2[MAX_SIZE][MAX_SIZE], result[MAX_SIZE][MAX_SIZE];
// 前の入力コードは同じままです
// ... (matrix1 と matrix2 の次元と要素の入力)
// 対応する要素を加算する
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
// 行列を出力する
printMatrix(matrix1, rows, cols, "First Matrix");
printMatrix(matrix2, rows, cols, "Second Matrix");
printMatrix(result, rows, cols, "Resulting Matrix (Matrix1 + Matrix2)");
return 0;
}
更新されたプログラムをコンパイルします。
gcc matrix_addition.c -o matrix_addition
プログラムを実行します。
./matrix_addition
Enter number of rows (max 10): 2
Enter number of columns (max 10): 3
Enter elements of first matrix:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter elements of second matrix:
Enter element [0][0]: 7
Enter element [0][1]: 8
Enter element [0][2]: 9
Enter element [1][0]: 10
Enter element [1][1]: 11
Enter element [1][2]: 12
First Matrix:
1 2 3
Second Matrix:
7 8 9
Resulting Matrix (Matrix1 + Matrix2):
8 10 12
printMatrix() 関数は、一貫したフォーマットで行列を出力するために作成されます。%4d フォーマット指定子は、整列された列出力を実現します。この実験では、C プログラムで 2 つの行列の次元と要素を読み取る方法を学びました。これは、行列の加算において同じサイズの行列が必要となるため、重要なステップです。行列の次元と要素の入力を実装し、プログラムが最大 10x10 の行列を処理できるようにしました。
行列の次元と要素を読み取った後、次のステップは、2 つの行列の対応する要素を加算し、結果の行列を格納することです。