전치행렬 값이 이상해요..ㅠㅠ; 뭐가 문제인지를.. 해결해주세요 젭알..
들꿈
질문 제목 : 전치 행렬 값이 이상함..질문처럼 값이 이상하게 나오네요..질문 내용 : #include stdio.h
#include stdlib.h
#define max_terms 101
#define max_row 50
#define max_col 50
typedef struct{
int row;
int col;
int value;
}term;
term a[max_terms], b[max_terms], d[max_terms];
int cnt;
int compare(int a_col, int b_col)
{
if(a_col b_col)
return -1;
if(a_col == b_col)
return -0;
if(a_col b_col)
return 1;
}
void storesum(term d[], int *totald, int row , int column, int *sum)
{
if(*sum)
{
if (*totald max_terms)
{
d[++*totald],row = row;
d[*totald].col =column;
d[*totald].value = *sum;
*sum=0;
}
else{
printf(행렬의 최대치 %d을 넘었습니다.\n,max_terms);
exit(1);
}
}
}
void fast_tranaspose(term a[], term b[])
{
int row_terms[max_col], starting_pos[max_col];
int i, j, num_cols = a[0].col, num_terms = a[0].value;
b[0].row = num_cols;
b[0].col = a[0].row;
b[0].value = num_terms;
if(num_terms 0)
{
for(i = 0; inum_cols; i++)
row_terms[i]=0;
for(i = 1; i=num_cols; i++)
row_terms[a[i].col]++;
starting_pos[0] = 1;
for(i = 1 ; inum_cols;i++)
starting_pos[i] = starting_pos[i-1] + row_terms[i-1];
for(i = 1; i=num_terms; i++)
{
j = starting_pos[a[i].col]++;
b[j].row = a[i].col;
b[j].col = a[i].row;
b[j].value = a[i].value;
}
}
}
int set_matrix_element(int max_row, int max_col, int value_number, term t[])
{
int i, j, value;
int cnt = 0;
printf(원소를 입력하시오.(행 열 값)\nex2(행) 1(열) 3(값)\n);
t[0].row = max_row;
t[0].col = max_col;
while(cntvalue_number)
{
printf(%d번째 입력입니다.\n입력 하시오. : , cnt+1);
scanf(%d %d %d, &i, &j, &value);
if(i max_row - 1 || j max_col -1)
{
printf(최대 범위를 넘었습니다. 다시 입력하시오.\n);
continue;
}
t[cnt+1].col = j;
t[cnt+1].row = i;
t[cnt+1].value = value;
cnt++;
}
t[0].value = cnt;
return cnt;
}
void mmult(term a[], term b[], term d[])
{
int i, j, column;
int totalb = b[0].value, totald = 0;
int rows_a = a[0].row, cols_a = a[0].col, totala = a[0].value;
int cols_b = b[0].col, row_begin = 1, row = a[1].row, sum = 0;
term new_b[max_terms];
if(cols_a != b[0].row)
{
printf(incompatible matrices\n);
exit(1);
}
fast_tranaspose(b, new_b);
a[totala + 1].row = rows_a;
new_b[totalb+1].row = cols_b;
new_b[totalb+1].col = 0;
new_b[totalb+1].value = 0;
for(i = 1; i=totala;)
{
column = new_b[1].row;
for(j = 1; j=totalb+1;)
{
if(a[i].row != row)
{
storesum(d, &totald, row, column, &sum);
i = row_begin;
for(;new_b[j].row == column; j++)
;
column = new_b[j].row;
}
else if(new_b[j].row != column)
{
storesum(d, &totald, row, column, &sum);
i = row_begin;
column = new_b[j].row;
}
else switch(compare(a[i].col, new_b[j].col))
{
case -1 :
i++;
break;
case 0 :
sum += (a[i++].value * new_b[j++].value);
break;
case 1 :
j++;
}
}
for(;a[i].row == row ; i++)
;
row_begin = i; row = a[i].row;
}
d[0].row = rows_a;
d[0].col = cols_b; d[0].value = totald;
}void main(void)
{
int max_row, max_col, value_number, max_row1,max_col1, value_number1;
int cnt1, cnt2;
int i;
printf(희소행렬 전치 프로그램\n);
printf(a행렬의 행렬과 원소개수를 입력하시오.(행렬의 수 열의 수 원소의 개수) \nex3(행) 2(열) 4(원소수)\n);
printf(입력하시오 : );
scanf(%d %d %d, &max_row, &max_col, &valuamp;value_number);
cnt1= set_matrix_element(max_row, max_col, value_number, a);
//fast_tranaspose(a,b);
printf(b 행렬과 원소개수를 입력하시오. (행의 수 열의 수 원소 개수)\n ex3(행) 2(열) 4(원소수) \n);
printf(입력하시오 : );
scanf(%d %d %d, &max_row1, &max_col1, &value_number1);
cnt2= set_matrix_element(max_row1, max_col1, value_number1, b);
mmult (a,b,d);
/*출력부 */
printf(a행렬\n);
printf(row\tcol\tvalue\n);
for(i=0; i=cnt1;i++)
printf(%3d\t%3d\t%5d\n,a[i].row, a[i].col, a[i].value);
printf(b행렬\n);
printf(row\tcol\tvalue\n);
for(i=0;i=cnt2;i++)
printf(%3d\t%3d\t%5d\n, b[i].row,b[i].col,b[i].value);
printf(곱셈결과\n);
printf(row\tcol\tvalute\n);
for(i=0; d[i].value !=null ; i++)
printf(%3d\t%3d\t%5d\n,d[i].row,d[i].col, d[i].value);
}
밑에처럼 나와야 하는데..입력도 밑에처럼 해서 해야하는데 답이이상하게나와요 ㅠㅠ
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2668976 | 제곱승을 구하는 것 (1) | 소유 | 2024-09-20 |
2668949 | 님들 이거 도데체 뭐틀린건지좀 알려주세요. | 큰재 | 2024-09-19 |
2668901 | for문 한개로 속 빈 다이아 만들기 | 키클 | 2024-09-19 |
2668873 | 재귀 알고리즘을 재귀 없이 만드는 방법 (3) | 희1미햬 | 2024-09-19 |
2668843 | 형변환에 대해 질문좀 드립니다. | PrinceSs | 2024-09-18 |
2668761 | C언어로 어떻게 게임을 코딩하죠? (3) | 큰꽃 | 2024-09-18 |
2668733 | C언어 초봅니다. ㅜㅜ 간단한 이 코드 보시고 주석 좀 달아주실 수 있을까요? | 꽃은별 | 2024-09-17 |
2668702 | api 문서.. (1) | 너만을 | 2024-09-17 |
2668669 | [C]%3d란 무슨의미를 가지나요? | 독특한 | 2024-09-17 |
2668615 | 2차방정식 근 구하는 프로그램 질문입니당 ㅠ (1) | 삐용삐용 | 2024-09-16 |
2668560 | fgets함수 출력할때.. | 민트맛사탕 | 2024-09-16 |
2668508 | c언어 공부법~~ | 옆집오빠야 | 2024-09-15 |
2668460 | 2차원배열 사용자정의 함수이용하여 동적할당 (1) | 울트라 | 2024-09-15 |
2668434 | 반석차랑 전체석차 어케 구하죠? | 내꺼하자 | 2024-09-15 |
2668412 | return 용도 | 유리 | 2024-09-14 |
2668383 | 열혈강의C 연산자 연습문제 관해서 질문드려요. (1) | 흰추위 | 2024-09-14 |
2668329 | 게임의 제작 방법과 소스를 어떻게 알 수 있을까요? | 꽃내 | 2024-09-14 |
2668301 | do while질문이요 | 댓걸 | 2024-09-13 |
2668223 | C 언어 도와주세요 ..ㅜ.ㅜ (1) | 제나 | 2024-09-13 |
2668126 | B 트리에 삽입에 대해 질문이 있습니다. | 이하얀 | 2024-09-12 |