전치행렬 값이 이상해요..ㅠㅠ; 뭐가 문제인지를.. 해결해주세요 젭알..
들꿈
질문 제목 : 전치 행렬 값이 이상함..질문처럼 값이 이상하게 나오네요..질문 내용 : #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);
}
밑에처럼 나와야 하는데..입력도 밑에처럼 해서 해야하는데 답이이상하게나와요 ㅠㅠ
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |
2675356 | 2진수를 10진수로 바꾸려고 하는데 막히네요.. | 풀잎 | 2024-11-17 |
2675297 | Prity 비트 발생기 | 한란 | 2024-11-16 |
2675249 | C책 좀 추천해 주세요 (2) | 딸기우유 | 2024-11-16 |
2675193 | 연습문제 17-1 질문입니다. | 한별나라 | 2024-11-15 |
2675172 | 소스점 | 아이뻐 | 2024-11-15 |
2675146 | 단순 연결 리스트인데 출력결과가 이상하게 나와요. | 찬늘봄 | 2024-11-15 |
2675123 | c언어에서 16진수의 사용에 대한 질문입니다.(정확한답만 달아주시길..) (8) | 데이비드 | 2024-11-15 |