PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2007/04/07 23:23:00
Name DeathMage
Subject C프로그래밍 리스트/값 입출력 질문입니다..
링크드 리스트 질문입니다=ㅂ=;
소스를 구현하다 보니 파일을 입력 받는곳에서 에러가 나는거 같습니다.
링크드 리스트는 이번에 수업을 들어서 그런지 약간 알꺼는 같은데 fopen하고 fscanf쓰는게 문제네요..
제일 마지막 메인쪽이 문제인거 같습니다..
그리고 값을 fprintf로 printList에 파일을 쓸려고 했는데요.
안돼네요=ㅂ=;; 그래서 일단 지워버렸는데, 구현을 어찌 해야할까요?





#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct polyNode { /*<--poly node 구조체-->*/
        int coefficient;
        int exponent;
        struct polyNode *link; /*<--링크 필드 설정-->*/
} polyNode;

typedef struct { /*<--헤더 구성 구조체-->*/
        polyNode *head;
} polyList_h;




void deleteLastNode(polyList_h *L) {
        polyNode *previous;
        polyNode *current;
        if(L->head == NULL) return;
        if(L->head->link == NULL) {
                free(L->head);
                L->head = NULL;
                return;
        } else {
                previous = L->head;
                current = L->head->link;
                while(current->link != NULL) {
                        previous = current;
                        current = current->link;
                }
                free(current);
                previous->link = NULL;
        }
}

void addFirstNode(polyList_h *P, int c, int e) {
        polyNode *newNode;
        newNode = (polyNode *)malloc(sizeof(polyNode));
        newNode->coefficient = c;
        newNode->exponent = e;

        if(P->head == NULL) {
                newNode->link = NULL;
                P->head = newNode;
        } else {
                newNode->link = P->head;
                P->head = newNode;
        }
}


void freepolyList_h(polyList_h *L) {
        polyNode *p;
        while(L->head != NULL) {
                p = L->head;
                L->head = L->head->link;
                free(p);
                p = NULL;
        }
}



/*<-- poly list 생성 -->*/
polyList_h *zeroP() {
        polyList_h *P;
        P = (polyList_h *)malloc(sizeof(polyList_h));
        P->head = NULL;
        return P;
}

/*<-- null 체크-->*/
bool isZeroP(polyList_h *P) {
        if(P->head == NULL) return true;
        else return false;
}

/*<--지수값가져오기-->*/
int coef(polyList_h *P, int e) {
        int exponent;

        if(P->head == NULL) {
                exponent = 0;
        } else {
                polyNode *temp;
                temp = P->head;
                while(temp != NULL) {
                        if(e == temp->exponent) {
                                exponent = temp->coefficient;
                                break;
                        } else {
                                temp = temp->link;
                                exponent = 0;
                        }
                }
        }
        return exponent;
}

/*<--첫번째 노드의 지수 가져오기-->*/
int maxExp(polyList_h *P) {
        if(P->head == NULL) {
                return 0;
        } else {
                return P->head->exponent;
        }
}

/*<--마지막 노드 집어넣기-->*/
void addTerm(polyList_h *P, int c, int e) {
        polyNode *newNode;
        polyNode *temp;
        newNode = (polyNode *)malloc(sizeof(polyNode));
        newNode->coefficient = c;
        newNode->exponent = e;
        newNode->link = NULL;
        if(P->head == NULL) {
                P->head = newNode;
                return;
        }

        temp = P->head;
        while(temp->link != NULL) {
                temp = temp->link;
        }
        temp->link = newNode;
}

/*<--첫번째 다항식 삭제-->*/
void delTerm(polyList_h *P) {
        if(P->head == NULL) return;
        if(P->head->link == NULL) {
                free(P->head);
                P->head = NULL;
                return;
        } else {
                polyNode *temp;
                temp = P->head;
                P->head = temp->link;
                free(temp);
        }
}



/*<--P1*P2 (곱셈연산)-->*/
polyList_h *polyMult(polyList_h *P1, polyList_h *P2) {
        polyList_h *P;
        P = zeroP();
        
        while(!isZeroP(P2)) {
                int coff = coef(P1,maxExp(P1)) * coef(P2,maxExp(P2)); /*<--계수는 서로 곱해준다-->*/
                int exp = maxExp(P1) + maxExp(P2); /*<--지수는 서로 더해준다-->*/
                addTerm(P,coff,exp);
                delTerm(P2);
        }

        return P;
}

/*<--화면 출력 부분-->*/
void printList(polyList_h *L) {
        polyNode *p;
        p = L->head;
        while(p != NULL) {
                printf("%dx^%d", p->coefficient,p->exponent);
                p = p->link;
                if(p != NULL) {
                        printf("+");
                }
        }
        printf("\n");
}




void main() {

        int i = 0;

        char *fname_i = "hw1.inp";

        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;
        
        polyList_h *P1;
        polyList_h *P2;
        P1 = zeroP();
        P2 = zeroP();

/*<--첫번째 다항식-->*/

        fscanf(input_d,"%d %d %d %d",c1,e1,c2,e2);
        addTerm(P1,c1,e1);
        addTerm(P1,c2,e2);

/*<--두번째 다항식-->*/
        fscanf(input_d,"\nd% d% d% d% d%",c3,e3,c4,e4);
        addTerm(P2,c3,e3);
        addTerm(P2,c4,e4);

        fclose(input_d);
        


/*<--값출력-->*/
        printf("----------PolyMult--------------\n");
        printList(P1);
        printList(P2);
        printf("-------------------------------\n");
        printList(polyMult(P1,P2));
        
}
        


통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
꿀호떡a
07/04/07 23:57
수정 아이콘
음.. scanf류에서 int 변수에 입력받을때는 &를 붙여주셔야..^^
fscanf(input_d,"%d %d %d %d",&c1,&e1,&c2,&e2); 구요.

fscanf(input_d,"\n%d %d %d %d %d",&c3,&e3,&c4,&e4); (여기서는 %랑 d를 거꾸로 쓰신게 아닌지..)
DeathMage
07/04/08 10:29
수정 아이콘
아.. 엄청 초보적인 걸 틀렸군요;ㅁ;
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
26744 축구관련 업계에서 일을 하려면.. 하이바라1643 07/04/08 1643
26743 수리통계 문제입니다. 조성화2165 07/04/08 2165
26741 군대가서도 키 크는경우가?? [3] 연봉10억3655 07/04/08 3655
26739 영어문장하나 분석 부탁드립니다~ [4] 레이노르1572 07/04/08 1572
26738 좋은 CD플레이어좀 추천해주세요~ [5] 신예ⓣerran2096 07/04/08 2096
26737 인터넷강의 추천해주세요 [4] 아낄1891 07/04/08 1891
26736 스타크에대한질문입니다. [2] BritneySpears1550 07/04/08 1550
26735 하숙집 인터넷 연결.. [5] salsalplz2171 07/04/08 2171
26734 to부정사에 관해서 질문하나~ [5] S.U天下1621 07/04/08 1621
26733 중고장난감 많이 파는곳 방화동김군3563 07/04/08 3563
26731 음악 선곡에 대한 질문입니다~ SayILoveU1608 07/04/08 1608
26730 소개팅 하고 애프터 신청은 언제 해야 하나요? [5] Nanum5352 07/04/08 5352
26728 고1 내신대비 기출문제 구하는곳.. 아낄2139 07/04/08 2139
26727 이 컴퓨터 사양에 맞는 램 추천 좀..!! [3] LeoStyLe1609 07/04/08 1609
26726 하체비만 질문입니다 ㅠ [1] 연봉10억2074 07/04/08 2074
26725 컴퓨터가 영 느려져서.. [6] 미치엔1764 07/04/08 1764
26724 미드 질문입니다~ [9] Cine_HyO1780 07/04/08 1780
26723 역시나 저는 않되는건지....;;; [4] MisoPri_Ggu1752 07/04/08 1752
26722 온게임넷 유료 고화질 vod 는 얼마나 화질이 좋나요? mbc 게임 화질이 정말좋던데요 온게인넷 유료 사용자님 답변좀 ^^ [2] 성안길2370 07/04/08 2370
26721 술안취하는약이나 방법아시는분? [8] Art Of Life4664 07/04/08 4664
26720 야구질문이요 [2] 올빼미1637 07/04/07 1637
26719 C프로그래밍 리스트/값 입출력 질문입니다.. [2] DeathMage2104 07/04/07 2104
26718 저vs프 전에서 질문요... [1] SwEeTy1528 07/04/07 1528
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로