휴.. 미칠노릇이네요=ㅂ=;
링크드 리스트로 다항식 곱셈을 구현하는중에 문제가 생겼는데요.
저는 파일에 있는 값 (input.txt라 하면)
그 안에 샘플값이
6 5 4 3 //첫번째 다항식 데이터
8 7 6 5 // 두번째 다항식 데이터
즉 6 5 4 3 이면 6x^5 + 4x^3이란 뜻이죠..
이런식으로 고정되있는줄 알았는데 제출을 할려고보니까 그게 아니더라고요=ㅂ=
9 8 7 6 5 4 3 2 1 // 첫번째 다항식 데이터
8 5 4 3 2 0 // 두번째 다항식 데이터
이런식으로도 읽어져야 한다라고 하네요=ㅂ=;;
배열이면 간단한데 링크드 리스트니까.. 지금짠 프로그램을 엎어야 하나 고민입니다.
fscanf를 어떻게 써야 하는지 조언을 구합니다;
특히, n을 안쓰고 줄 단위로 읽어지게끔 하는거도 조언을 구합니다;ㅁ;
--------------------------
그러니까, 기본적으로 다항식의 곱셈을 하는 프로그램인데,
링크드리스트를 써야하고, 배열을 사용하면 안됩니다.
input.txt에 있는 데이터 값을 받아서 결과물을 output.txt로 내는 것입니다.
밑에 있는 것으로는
6 5 4 3 // 첫번째 다항식. 6x^5 + 4x^3
8 7 6 5 // 두번째 다항식. 8x^7 + 6x^5
은 연산이 되지만
8 7 6 5 4 3 2 1 // 첫번째 다항식, 8x^7 + 6x^5 + 4x^3 + 2x^1
9 6 4 3 // 두번째 다항식, 9x^6 + 4x^3
은 불가능합니다.
typedef struct poly_STnode { /*<--poly node 구조체-->*/
int coefficient;
int exponent;
struct poly_STnode *link; /*<--링크 필드 설정-->*/
} poly_STnode;
typedef struct { /*<--헤더 구성 구조체-->*/
poly_STnode *head;
} poly_linkHead;
/*<-- poly list 생성 -->*/
poly_linkHead *polySL() {
poly_linkHead *P;
P = (poly_linkHead *)malloc(sizeof(poly_linkHead));
P->head = NULL;
return P;
}
.
.
.
.
.
등등등 해서 링크드 리스트를 구성하고요.
그 후에 메인에서 값을 받아서 할려고 했는데..
int main() {
char *fname_i = "input.txt";
FILE *input_d;
if ((input_d = fopen(fname_i,"r"))==NULL){
printf("파일이 열리지 않았습니다!!n");
exit(1);
}
/*<--곱셈 시작-->*/
int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
int e1 = 0, e2 = 0, e3 = 0, e4 = 0;
poly_linkHead *P1;
poly_linkHead *P2;
P1 = polySL();
P2 = polySL();
/*<--첫번째 다항식-->*/
fscanf(input_d,"%d %d %d %d",&c1,&e1,&c2,&e2);
last_data_add(P1,c1,e1); //last_data_add();에 다항식 인자를 넣어서 계산가능
last_data_add(P1,c2,e2); //링크드 리스트로 구성되어 있습니다.
/*<--두번째 다항식-->*/
fscanf(input_d,"n%d %d %d %d",&c3,&e3,&c4,&e4);
last_data_add(P2,c3,e3); //두번째도 마찬가지
last_data_add(P2,c4,e4);
fclose(input_d);
/*<--값출력-->*/
printf("다항식의 곱셈 연산 : n");
printList(P1); // 첫번째 다항식 받은값 출력
printList(P2); // 두번째 다항식 받은값 출력
printf("-----------------------------------n");
fileOUTPUT(MULTIPLICATION_POLY(P1,P2));
//MULTIPLICATION_POLY(P1,P2)는 첫번째와 두번째 다항식의 곱을 구하는 함수
//그걸 파일로 아웃풋을 내기 위한 fileOUTPUT(); 출력함수
}
이렇게 되있습니다.
저가 실은 fscanf를 제대로 배우질 못해서-_-; 많이 어렵네요..
어떻게 하면 더 많은 인자를 받을 수 있을까요?
fscanf로 한줄씩 읽어서(즉 다항식 하나씩) 링크드 리스트에 저장하고,
연산을 하고 싶은데요.. 어떻게 할까요;?