선형대수를 복습하며 C++ 클래스로 만들어보려고 한다. (코드의 효율은 일단 좀 미뤄두고....)
행렬
: 수 또는 문자들을 행과 열을 갖는 직사각형 모양으로 나열하여 묶어둔 것
위 행렬은 m X n 크기의 행렬이다.
원소 Amn는 m행 n열의 값을 나타낸다.
C++로 구현하기
Matrix라는 클래스로 행렬을 구현했다.
생성자 파라미터로 배열의 크기를 전달받고 생성자에서 배열 크기에 맞는 2차원 배열을 동적할당 및 원소 값 입력을 받는다.
아래와 같은 main() 함수로 행렬을 생성 및 출력해보자.
#include <iostream>
#include "matrix.h"
using namespace std;
int main() {
Matrix m1(3, 3);
Matrix m2(3, 2);
m1.print();
m2.print();
return 0;
}
클래스 코드는 아래와 같다. (이번까지는 처음이니 전체 코드를 올리지만 다음부터는 수정된 부분만 올릴 예정, 전체 코드는 아래 깃허브)
#ifndef __MATRIX_H__
#define __MATRIX_H__
#include <iostream>
class Matrix {
int **mat;
int row;
int col;
public:
Matrix(int row, int col) : row(row), col(col) {
mat = (int **)malloc(sizeof(int *) * row);
for (int i = 0; i < row; i++)
mat[i] = (int *)malloc(sizeof(int) * col);
printf("[ %d X %d Matrix ]\n", row, col);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++)
scanf("%d", &mat[i][j]);
}
printf("\n");
}
~Matrix() {
for (int i = 0; i < row; i++)
free(mat[i]);
free(mat);
}
int getRow() { return row; }
int getCol() { return col; }
// 행렬 출력
void print() {
printf("= %d X %d Matrix =\n", row, col);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (j == 0) {
if (i == 0) printf("┌ ");
else if (i == row - 1) printf("└ ");
else printf("│ ");
}
printf("%d ", mat[i][j]);
if (j == col - 1) {
if (i == 0) printf("┐\n");
else if (i == row - 1) printf("┘\n");
else printf("│\n");
}
}
}
printf("\n");
}
};
#endif
'Computer Science > 선형대수 with C++' 카테고리의 다른 글
[C/C++] 행렬의 연산 : 상등 (1) | 2024.05.02 |
---|---|
[C/C++] 전치 행렬 (0) | 2024.05.02 |
[C/C++] 단위행렬, 영행렬 (0) | 2024.05.02 |