희소행렬연산하기
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

희소행렬연산하기에 대한 보고서 자료입니다.

목차

First step >> 출력함수인 show_matrix함수 만들기

Second step >> 입력함수인 input_matrix함수 만들기

Third step >> 곱셈기능을 하는 multi_matrix함수 만들기

본문내용

{
for(j=0; j if(i==a.data[k].row && j==a.data[k].col){
printf("%d ", a.data[k].value);
++k;
}
else
printf("0 ");
printf("\n");
}
k=0;
printf("\n");
printf("<< B행렬 >>\n");
for(i=0; i for(j=0; j if(i==b.data[k].row && j==b.data[k].col){
printf("%d ", b.data[k].value);
++k;
}
else
printf("0 ");
printf("\n");
}
k=0;
printf("\n");
printf("<< C행렬 >>\n");
printf(" C행렬은 A행렬 + B행렬의 결과값입니다. \n");
for(i=0; i for(j=0; j if(i==c.data[k].row && j==c.data[k].col){
printf("%d ", c.data[k].value);
++k;
}
else
printf("0 ");
printf("\n");
}
}
// 주함수
main(void)
{
SparseMatrix m1;
SparseMatrix m2;
SparseMatrix m3;
input_matrix(&m1, &m2); // 사용자로부터 입력을 받아들이기 위한 함수호출
m3 = sparse_matrix_add2(m1, m2);
show_matrix(m1, m2, m3);
}
<< 출력결과 >>
Third step >> 곱셈기능을 하는 multi_matrix함수 만들기
Solution step >>
* 두 행렬의 성분을 입력받아 그 곱의 기능을 하는 함수를 작성한다.
A, B의 삼차정사각행렬이 존재 할 때 두 행렬을 곱하는 연산의 성질을 그대로 이용하였다.
a11*b11+a12+b21+a13+b31+...... 이런 형식을 이용
첫 번째로 선 행렬(연산에 있어서 앞에서 연산되는 행렬)의 행 값을 가져와 for문을 구현 한다.
다음으로 후 행렬(연산에 있어서 뒤에서 연산되는 행렬)의 열값을 가져와서 for문을 구현 한다.
최종의 곱한 값을 더해주기 위해 선 행렬의 열의 값을 가져와서 연산을 마무리 한다.
#include
#include
#define ROWS 3
#define COLS 3
#define MAX_TERMS 10
typedef struct {
int row;
int col;
int value;
} element;
typedef struct SparseMatrix {
element data[MAX_TERMS];
int rows;// 행의 개수
int cols;// 열의 개수
int terms; // 0이 아닌 항의 개수
} SparseMatrix;
void input_matrix(SparseMatrix *a, SparseMatrix *b)
{
int i;
printf("<< 이 프로그램은 희소행렬 연산 프로그램입니다. >>\n");
printf("<< A행렬 >>\n");
printf(" 행 수 , 열 수 , 0이 아닌 항 수 입력 : ");
scanf("%d", &a->rows);
scanf("%d", &a->cols);
scanf("%d", &a->terms);
for(i=0; iterms; i++){
printf(" 행 번호, 열 번호, 행열값 입력 : ");
scanf("%d", &a->data[i].row);
scanf("%d", &a->data[i].col);
scanf("%d", &a->data[i].value);
printf("\n");
}
printf("<< B행렬 >>\n");
printf(" 행 수 , 열 수 , 0이 아닌 항 수 입력 : ");
scanf("%d", &b->rows);
scanf("%d", &b->cols);
scanf("%d", &b->terms);
for(i=0; iterms; i++){
printf(" 행 번호, 열 번호, 행열값 입력 : ");
scanf("%d", &b->data[i].row);
scanf("%d", &b->data[i].col);
scanf("%d", &b->data[i].value);
printf("\n");
}
}
void multi_matrix(SparseMatrix *a, SparseMatrix *b)
{
int i,j,k;
int A[20][20];
int B[20][20];
int C[20][20];
// 입력을 받기 위한 세 개의 배열 값들을 초기화 시켜준다.
for(i=0; i<20; i++){
for(j=0; j<20; j++)
A[i][j]=0;
}
for(i=0; i<20; i++){
for(j=0; j<20; j++)
B[i][j]=0;
}
for(i=0; i<20; i++){
for(j=0; j<20; j++)
C[i][j]=0;
}
// 입력받은 희소행렬형식의 행렬 값을 특정 배열에 일일이 넣어준다.
for(i=0 ; iterms ; i++){
A[a->data[j].row][a->data[j].col] = a->data[j].value;
}
for(j=0 ; jterms ; j++){
B[b->data[j].row][b->data[j].col] = b->data[j].value;
}
printf("<< A곱하기 B행렬은 >>\n");
// 별도의 설명
for(i=0; i< a->rows; i++)
{
for(j=0; jcols; j++)
{
for(k=0; kcols; k++)
{
C[i][j]=C[i][j]+A[i][k]*B[k][j];
}
printf("%d ",C[i][j]);
}
printf("\n");
}
}
// 주함수
main(void)
{
SparseMatrix m1;
SparseMatrix m2;
input_matrix(&m1, &m2);
multi_matrix(&m1, &m2); // 곱셈연산을 수행하기 위한 함수호출
}
<< 출력결과 >>
  • 가격1,600
  • 페이지수11페이지
  • 등록일2006.11.10
  • 저작시기2006.2
  • 파일형식한글(hwp)
  • 자료번호#371068
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니