행렬 더하고 곱하고 하는 프로그램 짠건데...
문제가 하나 있어
이차원 배열 리턴시에는 int*로 보내는데 내가 PRINTMATRIX라는 행렬 출력만을 위한 함수를 따로 하나 만들어서 써야하는데
이거 int형 자료 받는 함수란 말야... 근데 MULTIPLYMATRIX 랑 ADDMATRIX 함수는 리턴값이 int*로 나와서 저 PRINTMATRIX 함수를 사용 할수 가 없는데 어떻게 해야함....
이거때매 엄청 고민중인데 내 머리로는 안되는거 같음... ㅠㅠ 도와줘....
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define R 3
#define C 3
int* ADDMATRIX(int(*a)[C], int(*b)[C]);
int* MULTIPLYMATRIX(int(*a)[C], int(*b)[C]);
void PRINTMATRIX(int(*a)[C]);
int main()
{
int p[R][C], q[R][C];
int i, j;
int rand_num;
srand(time(NULL));
for (i = 0; i < R; ++i)
{
for (j = 0; j < C; ++j)
{
rand_num = rand() % 10;
p[i][j] = rand_num;
rand_num = rand() % 10;
q[i][j] = rand_num;
}
}
printf("\n p =\n");
PRINTMATRIX(p);
printf("\n q =\n");
PRINTMATRIX(q);
printf("\n p+q =\n");
PRINTMATRIX(ADDMATRIX(p, q));
printf("\n p*q=\n");
PRINTMATRIX(MULTIPLYMATRIX(p, q));
getchar();
return 0;
}
void PRINTMATRIX(int(*p)[C])
{
int i, j;
printf("\n");
for (i = 0; i < R; ++i)
{
for (j = 0; j < C; ++j)
{
printf("=", p[i][j]);
}
printf("\n");
}
printf("\n");
}
int* ADDMATRIX(int(*p)[C], int(*q)[C])
{
int sum[R][C];
int i,j;
for (i = 0; i < R;i++)
{
for (j = 0; j < C; j++)
{
sum[i][j] = p[i][j] + p[i][j];
}
}
return (int*)sum;
}
int* MULTIPLYMATRIX(int(*p)[C], int(*q)[C])
{
int product[R][C];
int i,j,k;
for (i = 0; i < R; i++)
{
for (j = 0; j < C; j++)
{
for (k = 0; j < R;k++)
{
product[i][j] += (p[i][k])*(q[k][j]);
}
}
}
return (int*)product;
함수 원형이 꼭 저렇게 해야하는거야?
꼭 저렇게 하는게 아니면 int (*ADDMATRIX(int(*a)[C], int(*b)[C]))[C]; 이렇게 해
이렇게하면 함수에서 2차원 배열 리턴가능해
와... 교수가 그냥 함수 만들어서 꺼내서 쓴거라 그러니까 상관 없을듯!!!! 진짜 고마워....
다시 수정하고 보니까 주소를 리턴해 버리네... 어