#include<stdio.h>
#include<stdlib.h>
int** Heap(int n);
void Input(int** imsi,int n);
void show(int** arr,int n);
void Multiply(int** arr1,int** arr2,int n);
int main(void)
{
while(1)
{
int n;
int **arr1; //첫번째 행렬
int **arr2; //두번째 행렬
printf("n x n 행렬을 만드실 건가요?(정수 입력) : ");
scanf("%d",&n);
arr1=Heap(n); //첫번째 행렬에 메모리 동적할당 2차원으로..
arr2=Heap(n); //두번째 행렬에 메모리 동적할당 2차원으로..
Input(arr1,n); //첫번째 행렬에 값 입력 1행1열~n행n열까지!
Input(arr2,n); //두번째 행렬에 값 입력 1행1열~n행n열까지!
system("cls"); //화면 클리어
show(arr1,n); //첫번째 행렬을 보여줌
printf("\n");
show(arr2,n); //두번째 행렬을 보여줌
printf("\n");
Multiply(arr1,arr2,n);
fflush(stdin);
fgetc(stdin);
system("cls");
}
return 0;
}
int** Heap(int n)
{
int i;
int **temp=(int **)malloc(sizeof(int) * n);
for(i = 0; i < n ; i ++)
{
temp[i]=(int *)malloc(sizeof(int) * n);
}
return temp;
}
void Input(int** imsi,int n)
{
int j,k;
static int a=1;
printf("%d번째 행렬 값 입력 \n",a++);
for(j = 0; j < n ; j ++)
{
for(k = 0 ; k < n ; k++)
{
printf("%d행 %d열 : ",j+1,k+1);
scanf("%d",&imsi[j][k]);
}
}
}
void show(int** arr,int n)
{
int i,j;
static int b=1;
if(b != 3)
{
printf("%d번째 행렬 \n",b++);
}
else
printf("곱의 결과 \n");
for(i = 0; i < n ; i++)
{
for(j = 0; j<n ;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
void Multiply(int** arr1,int** arr2,int n)
{
int i,j,k; //반복문 돌리는것
int temp=0; //값 임시 저장
int** result = Heap(n);
for(i = 0 ; i < n ; i++)
{
for(j = 0 ; j<n ; j++)
{
for(k = 0; k<n ; k++)
{
temp+=arr1[i][k] * arr2[k][j];
}
result[i][j] = temp;
temp = 0; //들어있는 값 초기화
}
}
show(result,n);
}
n x n 행렬 곱 소스 입니다.
처음에 몇 곱하기 몇 행렬을 할건지 정한다음 1행1열부터 n행n열까지
2개의 행렬에 전부 써 주시면 답이 나옵니다.
'My Study > Programming&Theory' 카테고리의 다른 글
메일슬롯을 사용한 프로세스간 채팅프로그램 (0) | 2009.12.08 |
---|---|
n원 1차 연립 방정식 해 구하기 (7) | 2009.12.07 |
Trap Flag (0) | 2009.12.05 |
PEB.ProcessHeap.ForceFlags (0) | 2009.12.05 |
PEB.ProcessHeap.Flags (0) | 2009.12.05 |