본문 바로가기

대학교 1-2/컴프

HW5a

행렬 X(4 X 2)와 Y(2 X 3)에 대해서 두 행렬의 곱(Z에 넣어서)을 구하여 출력하는 프로그램을 작성하시오. 

X와 Y의 행렬원소의 값을 입력 받는다. 앞의 LAB에서 정의한 readMatrix 함수를 사용 할 수 있는가?

배열 Z에 행렬의 곱을 저장하여 출력한다

LAB에서 작성한 함수를 (가능하면)사용하고 일단 행렬곱을 계산하는 부분을 main에서 해 본 다(HW5a_1)

#include void printMatrix(int a[][3], int size)

{

}

void readMatrix(int a[][3], int size)

{

}

void readMatrix2(int a[][2], int size)

{

}

int main(void)

{

int X[4][2], Y[2][3], Z[4][3];

printf("(4 x 2) 행렬 X 입력:\n");

readMatrix2(X, 4);

printf("(2 x 3) 행렬 Y 입력:\n");

readMatrix(Y, 2);

// Z에 행렬곱을 넣는 코드(HW5a_1)

// 함수화는 나중에 해보자!(HW5a_2)

printf("행렬곱:\n");

printMatrix(Z, 4);

printf("\n");

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
void printMatrix(int a[][3], int size)
{
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < 3; j++)
            printf(" %d", a[i][j]);
        printf("\n");
    }
}
 
void readMatrix(int a[][3], int size)
{
    for (int i = 0; i < size; i++)
        for (int j = 0; j < 3; j++)
            scanf("%d"&a[i][j]);
}
 
void readMatrix2(int a[][2], int size)
{
    for (int i = 0; i < size; i++)
        for (int j = 0; j < 2; j++)
            scanf("%d"&a[i][j]);
}
 
int main(void)
{
    int X[4][2], Y[2][3], Z[4][3];
    printf("(4 x 2) 행렬 X 입력:\n");
    readMatrix2(X, 4);
    printf("(2 x 3) 행렬 Y 입력:\n");
    readMatrix(Y, 2);
 
    // Z에 행렬곱을 넣는 코드(HW5a_1)
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 3; j++)
            Z[i][j] = X[i][0* Y[0][j] + X[i][1* Y[1][j];
 
    printf("행렬곱:\n"); 
    printMatrix(Z, 4);
    printf("\n");
}
cs


00 01

y
00 10

         x    y   x   y
00=00*00+01*10

         x  y   x  y
01=00*01+01*11

        x    y    x  y  
10=10*00+11*10
   
        x    y   x   y
02=00*02+01*12
    
        x   y    x   y
32=30*02+31*12
z의 인덱스를 x와 y의 인덱스로 표현해 보았다

그랬더니 신기하게 규칙이 보였다.


i반복
j반복
ij=i0*0j+i1*1j 

-----------------------------------------------------------------------------------------------------------------

Z[i][j] = X[i][0] * Y[0][j] + X[i][1] * Y[1][j];  부분을조금 변형시켜 보았다

1
2
3
4
5
int Z={0};
for (int i = 0; i < 4; i++)
        for (int j = 0; j < 3; j++)
            for (int k = 0; k < 2; k++)
            Z[i][j] = Z[i][j]+X[i][k] * Y[k][j];
cs

 

'대학교 1-2 > 컴프' 카테고리의 다른 글

Project1  (1) 2023.10.12
HW지뢰찾기  (0) 2023.10.09
HW5a_2  (0) 2023.10.04
LAB5a_2  (0) 2023.10.04
LAB5a  (0) 2023.10.04