#include <stdio.h>
#include <stdlib.h>
void matAdd(double **a, double **b, double **c, int rows, int cols) {
int i, j;
for(i=0;i<rows;i++)
for(j=0;j<cols;j++)
c[i][j]=a[i][j]+b[i][j];
}
void matSub(double **a, double **b, double **c, int rows, int cols) {
int i, j;
for(i=0;i<rows;i++)
for(j=0;j<cols;j++)
c[i][j]=a[i][j]-b[i][j];
}
void matMult(double **a, double **b, double **c, int num1, int num2, int num3) {
int i, j, k;
double x;
for(i=0;i<num1;i++) {
for(j=0;j<num3;j++) {
x=0.;
for(k=0;k<num2;k++)
x=x+a[i][k]*b[k][j];
c[i][j]=x;
}
}
}
void matPrint(double **a, int rows, int cols) {
int i, j;
for(i=0;i<rows;i++) {
for(j=0;j<cols;j++) {
printf("%10.4f", a[i][j]);
}
printf("\n");
}
}
int n1, n2, n3;
int i, j;
double x;
double *ptr;
double **arrA, **arrB, **arrC;
// 곱셈의 테스트를 위해서 세수를 입력 받았다.
// 덧셈 뺄셈을 위해서는 두수만 필요하다,
// 요령을 부려서 3 3 3 같이 같은 수들을 넣으면
// 덧셈, 뺄셈, 곱셈을 테스트 하는데 다 쓸수 있다.
// 실제로는 곱셈의 경우 두번째 행렬은 첫번째 행렬과 곱할수 있으면 된다.
printf("행렬의 덧셈 뺄셈 곱셈을 위해서 3 수를 입력하세요: ");
scanf("%d %d %d", &n1, &n2, &n3);
arrA=(double **)malloc(4*n1);
arrB=(double **)malloc(4*n2);
arrC=(double **)malloc(4*n1);
ptr=(double *)malloc(8*n1*n2);
for(i=0;i<n1;i++) arrA[i]=(double *)((int)ptr+8*n2*i);
ptr=(double *)malloc(8*n2*n3);
for(i=0;i<n2;i++) arrB[i]=(double *)((int)ptr+8*n3*i);
ptr=(double *)malloc(8*n1*n3);
for(i=0;i<n1;i++) arrC[i]=(double *)((int)ptr+8*n3*i);
for(i=0;i<n1;i++) {
for(j=0;j<n2;j++) {
printf("행렬 1 [%d][ %d] 의 값: ", i, j);
scanf("%lf", &x);
arrA[i][j]=x;
}
}
for(i=0;i<n1;i++) {
for(j=0;j<n2;j++) {
printf("행렬 2 [%d][ %d] 의 값: ", i, j);
scanf("%lf",
&x );
arrB[i][j]=x;
}
}
matAdd(arrA, arrB, arrC, n1, n2);
printf("\n행렬의 덧셈: \n");
matPrint(arrC, n1, n2);
matSub(arrA, arrB, arrC, n1, n2);
printf("\n행렬의 뺄셈: \n");
matPrint(arrC, n1, n2);
// #########################################################################
// 행렬A의 행 n1 열 n2 행렬B의 행 n2 열 n3 이어야 한다. 행렬C의 행 n1 열 n3 이어야 한다.
//##########################################################################
matMult(arrA, arrB, arrC, n1, n2, n3);
printf("\n행렬의 곱셈: \n");
matPrint(arrC, n1, n3);
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
주민번호 체크수자는 어떻게 구하나? (0) | 2012.03.26 |
---|---|
네이버 질문 중에서 (0) | 2012.03.26 |
하노이탑 이해하기 (0) | 2012.03.24 |
동적할당 행렬의 곱셈 (0) | 2012.03.24 |
10000팩토리얼 구하기 (0) | 2012.03.23 |