#include <stdio.h>
#include <stdlib.h>
void mat_mul(int size[], double *a[], double *b[], double *c[]) {
int i, j, k;
double val;
for(i=0;i<size[0];++i) {
for(j=0;j<size[2];++j) {
val=0;
for(k=0; k<size[1]; ++k)
val=val+a[i][k]*b[k][j];
c[i][j]=val;
}
}
}
int main() {
FILE *fin;
int i,j,k;
double **arrA, **arrB, **arrC; //행렬 값의 주소를 넣을 포인터
double *ptr;
int temp[3];
/* temp[3]: 배열의 크기 행, 열(행), 열 */
fin = fopen("inp.txt","r");
for(i=0;i<3;i++) { //
fscanf(fin,"%d",&temp[i]);
printf("%d\n",temp[i]);
}
// *****배열 arrA, arrB, arrC 의 헤더를 위한 메모리 할당 ,, 열의 갯수만큼 필요
arrA=(double **)malloc(temp[0]*sizeof(int));
arrB=(double **)malloc(temp[1]*sizeof(int));
arrC=(double **)malloc(temp[0]*sizeof(int));
// *** 배열 arrA 를 위한 메모리 할당 행의 수 * 열의 수 만큼 필요
ptr=(double *)malloc(temp[0]*temp[1]*sizeof(double)); // arrA 의 크기
for(i=0;i<temp[0];++i) {
arrA[i]=(double *)(ptr+i*temp[1]); // 각열을 초기화
}
// *** 배열 arrB 를 위한 메모리 할당 행의 수 * 열의 수 만큼 필요
ptr=(double *)malloc(temp[1]*temp[2]*sizeof(double)); // arrB의 크기
for(i=0;i<temp[1];++i) {
arrB[i]=(double *)(ptr+i*temp[2]); // 각열을 초기화
}
// *** 배열 arrC 를 위한 메모리 할당 행의 수 * 열의 수 만큼 필요
ptr=(double *)malloc(temp[0]*temp[2]*sizeof(double)); // arrC 의 크기
for(i=0;i<temp[0];++i) {
arrC[i]=(double *)(ptr+i*temp[2]); // 각열을 초기화
}
//****행렬 A 을 입력하는 부분
for(i=0;i<temp[0];++i) {
for(j=0;j<temp[1];++j) {
fscanf(fin,"%lf", &arrA[i][j]);
printf("%lf ", arrA[i][j]);
}
printf("\n");
}
printf("\n");
//****행렬 B 을 구하는 부분
for(i=0;i<temp[1];++i) {
for(j=0;j<temp[2];++j) {
fscanf(fin,"%lf", &arrB[i][j]);
printf("%lf ", arrB[i][j]);
}
printf("\n");
}
printf("\n");
//printf("*********************************************\n");
mat_mul(temp, arrA, arrB, arrC);
//printf("*********************************************\n");
//****행렬 C 을 출력하는 부분
for(i=0;i<temp[0];++i) {
for(j=0;j<temp[2];++j) {
printf("%lf ", arrC[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
행렬의 덧셈, 뺄셈, 곱셈 - 동적할당 (0) | 2012.03.25 |
---|---|
하노이탑 이해하기 (0) | 2012.03.24 |
10000팩토리얼 구하기 (0) | 2012.03.23 |
bit field로 2진수 출력하기 (0) | 2012.03.22 |
순환호출과 반복문 (0) | 2012.03.22 |