새로새록
[c++]5. 행렬 두개와 2D vector 본문
행렬 두 개의 크기를 입력합니다. 두 행렬의 값들을 초기화하고, 행렬의 곱을 한 후에 출력하세요.
1) 행렬은 2D Vector를 활용하여 선언하세요.
2) 행렬의 요소 값은 –9 ~ 9 의 숫자중 하나를 랜덤으로 배정합니다.
3) 행렬을 초기화하는 함수, 행렬을 출력하는 함수, 행렬을 곱하는 함수 세 가지를 구현하시면 됩니다.
4) 두 행렬을 곱할 수 없으면 결과를 출력하지 않고 종료합니다.
#include <iostream>
#include <vector>
#include <random>
#include <iomanip>
using namespace std;
vector<vector<int>> input(int row, int col) {
vector<vector<int>> matrix(row, vector<int>(col));
for (vector<int>& v : matrix) {
for (int& elem : v)
elem = rand() % 19 - 9;
}
return matrix;
}
void print_vec(vector<vector<int>> v) {
for (vector<int>& v1 : v) {
for (int& elem : v1)
cout << setw(6) << elem;
cout << endl;
}
cout << endl;
}
vector<vector<int>> multiply(vector<vector<int>>A, vector<vector<int>>B) {
int row1 = A.size(), col1 = A[0].size();
int row2 = B.size(), col2 = B[0].size();
vector<vector<int>> matrix(row1,vector<int>(col2));
for (int i = 0; i < row1; i++) {
for (int j = 0; j < col2; j++){
matrix[i][j] = 0;
for (int k = 0; k < col1; k++)
matrix[i][j] += A[i][k] * B[k][j];
}
}
return matrix;
}
int main() {
cout << "A의 행, 열의 크기를 입력해주세요 : ";
int row1, row2, col1, col2;
cin >> row1 >> col1;
cout << "B의 행, 열의 크기를 입력해주세요 : ";
cin >> row2 >> col2;
vector<vector<int>> A = input(row1, col1);
vector<vector<int>> B = input(row2, col2);
cout << "A 행렬 :\n";
print_vec(A);
cout << "B 행렬 :\n";
print_vec(B);
if (col1 != row2) {
cout << "두 행렬을 곱할 수 없습니다.";
return 0;
}
vector<vector<int>> AB = multiply(A, B);
cout << "AB 곱행렬 :\n";
print_vec(AB);
return 0;
}
'소프트웨어융합 > 경희대 c++ 과제' 카테고리의 다른 글
[c++]6. 재귀함수와 피보나치 (0) | 2020.07.16 |
---|---|
[c++]6. class :학번 이름 전공 입출력 (0) | 2020.07.16 |
[c++]5. 연속되는 숫자, 배열 검사 -기초 (0) | 2020.07.16 |
[c++] vector에서 push_back 사용 예 (0) | 2020.07.16 |
[c++] 5. vector 역순으로 만들기 (0) | 2020.07.15 |