희소행렬 초기화 함수 부분구현 질문입니다.
한길찬
질문 제목 :희소행렬 초기화 함수 부분구현 질문입니다.희소행렬을 txt 파일로 입력받아 초기화 시키는 부분을 함수로 구현할려고 하는데 에러가 떠서 질문합니다.질문 내용 : 만들고자 하는 소스입니다. 빨간 부분이 문제의 부분입니다.sparse_matrix. 에 빨간 밑줄이 뜨면서
식에 클래스 형식이 있어야 합니다 라고 뜹니다. 함수로 구현하지 않고 메인함수에다가 저 부분을 넣었을땐
아무 문제 없이 실행됬는데 함수로 구현할려니까 에러가 뜹니다.(메인 함수에서 구현할 땐sparse_matrix. 대신 m1 사용왜 저런 에러가 뜨는지 알려주시면 감사하겠습니다.
그리고 혹시나 다른 함수 부분도 문제가 없는지 봐주시면 감사하겠습니다.#include stdio.h
#include stdlib.h
#include malloc.h
#include week4_3.h
void main( )
{
sparsematrix m1;
sparsematrix m2;
sparsematrix m3; printf( a\n);
sparse_matrix_init(a.txt, &m1);
sparse_matrix_print(m1); printf( b\n);
sparse_matrix_init(b.txt, &m2);
sparse_matrix_print(m2); printf( a + b = c\n);
m3 = sparse_matrix_add2(m1, m2);
sparse_matrix_print(m3);
}void sparse_matrix_init(const char* file_name, sparsematrix* sparse_matrix) //희소 행렬 초기화 함수
{
file *fp;
int i, term=0, n=0;
fp = fopen(file_name,r);
fscanf(fp, %d %d %d\n, &sparse_matrix.rows, &sparse_matrix.cols, &sparse_matrix.terms); while(term sparse_matrix.terms){
fscanf(fp, {%d, %d, %d}\n, &sparse_matrix.data[n].row, &sparse_matrix.data[n].col, sparse_matrix.data[n].value);
n++;
term++;
}
fclose(fp);
}void sparse_matrix_print(sparsematrix sparse_matrix) //희소 행렬 출력 함수
{
int i,j,k;
k=0;
for(i=0;isparse_matrix.rows;i++) //행 바꾸기 반복문
{
for(j=0;sparse_matrix.cols;j++) //
if(i==sparse_matrix.data[k].row && j==sparse_matrix.data[k].col){
printf(%d, sparse_matrix.data[k].value);
++k;
}
else
printf(0); //참이 아닐 경우 0반환
printf(\n);
}
}
sparsematrix sparse_matrix_add2(sparsematrix a, sparsematrix b) //희소 행렬 덧셈 함수
{
sparsematrix c;
int ca=0, cb=0, cc=0; //각 배열의 항목을 가리키는 인덱스
if(a.rows != b.rows || a.cols != b.cols){
fprintf(stderr, 희소행렬 크기에러\n);
exit(1);
}
c.rows = a.rows;
c.cols = a.cols;
c.terms = 0; while(ca a.terms && cb b.terms){ //각 항목의 순차적인 번호를 계산한다.
int inda = a.data[ca].row * a.cols + a.data[ca].col;
int indb = b.data[cb].row * b.cols + b.data[cb].col;
if(inda indb){ //a 배열 항목이 앞에 있으면
c.data[cc++] = a.data[ca++];
}
else if(inda == indb){ //a와 b가 같은 위치
if((a.data[ca].value + b.data[cb].value) != 0){
c.data[cc].row = a.data[ca].row;
c.data[cc].col = a.data[ca].col;
c.data[cc++].value = a.data[ca++].value + b.data[cb++].value;
}
else {
ca++;
cb++;
}
}
else //b 배열 항목이 앞에 있음
c.data[cc++] = b.data[cb++];
}
for(;ca a.terms;)
c.data[cc++] = a.data[ca++];
for(;cb b.terms;)
c.data[cc++] = b.data[cb++];
c.terms = cc;
return c;
}week4_3.h
#define max_terms 10typedef struct {
int row;
int col;
int value;
} element;typedef struct sparsematrix {
element data[max_terms];
int rows; // 행의 개수
int cols; // 열의 개수
int terms; //항의 개수
} sparsematrix;void sparse_matrix_init(const char* file_name, sparsematrix* sparse_matrix);
void sparse_matrix_print(sparsematrix sparse_matrix);
sparsematrix sparse_matrix_add2(sparsematrix a, sparsematrix b);
-
감춰왔던
첨부파일에 올려놨습니다. 댓글 달아주신거 보고 void sparse_matrix_init에 {%d, %d, %d}\\n 부분을 %d %d %d\\n 으로 고쳤더니 무한으로 0이라는 숫자는 출력이 안되는데 a하나 출력되고 작동이 멈추네요 어디 부분이 잘못된 걸까요.. 책도 보고 소스도 참조하면서 만들었는데 어디서 꼬인 건지 ㅠㅠ
-
나츠
a.txt 와 b.txt 를 올려보세요.
-
꽃가을
.에서 -형태로 바꾸어서 실행 시켰는데 에러는 없는데 무한으로 0이라는 숫자만 출력되네요 디버그 상에서 어디가 문제인지 잘 모르겠는데 혹시 소스코드에 이상한 부분이 있나요?
-
노아
init 힘수에서 sparse_matrix-rows 형태로 바꾸세요.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692483 | C언어 함수, Header | 떠나간그놈 | 2025-04-23 |
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |