전치행렬 값이 이상해요..ㅠㅠ; 뭐가 문제인지를.. 해결해주세요 젭알..
들꿈
질문 제목 : 전치 행렬 값이 이상함..질문처럼 값이 이상하게 나오네요..질문 내용 : #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);
}
밑에처럼 나와야 하는데..입력도 밑에처럼 해서 해야하는데 답이이상하게나와요 ㅠㅠ
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2694012 | 전공 비전공자 개발자 (10) | 말글 | 2025-05-07 |
2693984 | 오버로딩이 무엇인가요? (2) | 헛매질 | 2025-05-07 |
2693956 | PlaySound재생이 안됩니다!(C에 음악넣기) | 지존 | 2025-05-06 |
2693928 | &와 *의 사용에 관한 명확한 이해 | 제나 | 2025-05-06 |
2693903 | 반복문 설명좀요 ㅠㅠ (2) | 란새 | 2025-05-06 |
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |
2693328 | C언어를이용해서 .txt파일 외에 다른 확장자 파일 삭제가 가능한지.. (2) | 대나무 | 2025-05-01 |