소개글
우선 프로그램에 설정되어 있는 매트릭스 값으로 연산을 합니다.
필요하시면 매트릭스 입력부분과 메뉴 부분만 만드시면 됩니다.
곱셈, 덧셈, 뺄셈, 역행렬 연산이 가능합니다.
컴파일 실행환경
C 언어로 작성되었습니다.
제가 작성한것은 Visual C++ 6.0으로 했습니다.
하지만 리눅스 상에서도 무리없이 돌아갈 것으로 보입니다.
컴파일 후 실행하시면 됩니다.
본문내용
#include <stdio.h>
#include <stdlib.h>
#define MAX 101
typedef struct term T;
struct term {
int r; // Row
int c; // Column
int v; // Value
};
void create (int m[][6], int r, int c, T *b);
void fast_transpose(T a[], T b[]);
void mmult(T a[], T b[], T d[]);
int COMPARE(int i, int j);
void storesum(T d[], int *totald, int row, int column, int *sum);
void madd(T a[], T b[], T d[]);
void mminus(T b[], T b_minus[]);
int COMPARE_T(T *a, T *b);
void main()
{
int i;
int matrix[6][6] = {
{15, 0, 0, 22, 0, -15},
{0, 11, 3, 0, 0, 0},
{0, 0, 0, -6, 0, 0},
{0, 0, 0, 0, 0, 0},
{91, 0, 0, 0, 0, 0},
{0, 0, 28, 0, 0, 0}
};
T b[MAX], b_minus[MAX], mult_result[MAX], trans_result[MAX], add_result[MAX];
create(matrix, 6, 6, b);
mminus(b, b_minus);
for(i=0; i<=15; i++) {
mult_result[i].r = 0;
mult_result[i].c = 0;
mult_result[i].v = 0;
}
// print b mult -b
printf(" [ b mult -b ]\n");
printf(" row column value\n");
mmult(b, b_minus, mult_result);
for(i=0; i<=mult_result[0].v; i++) {
printf("%3d \t %3d \t %3d \n", mult_result[i].r, mult_result[i].c, mult_result[i].v);
}
// print b add b
printf("\n [ b add b ]\n");
printf(" row column value\n");
madd(b, b, add_result);
for(i=0; i<=add_result[0].v; i++) {
printf("%3d \t %3d \t %3d \n", add_result[i].r, add_result[i].c, add_result[i].v);
}
// print b transpose
printf("\n [ b transpose ]\n");
printf(" row column value\n");
fast_transpose(b, trans_result);
for(i=0; i<=trans_result[0].v; i++) {
printf("%3d \t %3d \t %3d \n", trans_result[i].r, trans_result[i].c, trans_result[i].v);
}
}
참고 자료
'C로 쓴 자료구조론'을 공부하시는 분이라면,
한번쯤 해보게 되는 과제 입니다.
C 언어로 Sparce Matrix(희소행렬)의
덧셈, 뺄셈, 곱셈, 역행렬 을 구현하였습니다.