C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[37477] 다항식의 연산에 대한 소스인데요..
서찬 [] 1572 읽음    2004-10-04 20:36
main에 보시면 주석처리해놓은 다항식 부분이 있습니다. 두 다항식의 덧셈연산을 하는 예제입니다.
주석처리된 부분에 있는 다항식의 계수(X = 2, 1   Y = 1, 10, 3, 1)나 지수를 구조체 terms에 삽입해줘야 할 것 같은데 제가 생각할 수 있는 방법은 무작정 대입하는 것 밖에 없군요^^;
어떤 방법이 있을지 조언을 부탁드립니다..혹은 삽입하지 않고도 연산이 가능한지요? 그럴리가 없다고 생각하지만...(워낙 초보라-_-;) 그리고 출력함수를 통해 지수를 표현하기 위한 간단한 팁도 알고 계신다면 부탁...^^;;

#include <stdio.h>
#include <stdlib.h>
#define MAX_TERMS 100
typedef struct{
    float coef;
    int expon;
    } Polynomial;
Polynomial terms[MAX_TERMS];
int avail = 0;

void padd(int, int, int, int,int *,int *);
void attach(float, int);
int compare(int, int);

void main(main) {
    int startd, finishd;
    padd(0, 1, 2, 5, &startd, &finishd);
    /*
    X = 2x(1000) + 1
    Y = X(4) + 10X(3) + 3X(2) + 1
    ()부분은 지수를 나타냅니다.
    */
    printf("startd = %d\n", &startd);
    printf("finishd = %d\n", &finishd);

}

void padd(int starta, int finisha, int startb, int finishb,
          int *startd, int *finishd)
{
    float coefficient;
    *startd = avail;
    while(starta <= finisha && startb <= finishb)
        switch(compare(terms[starta].expon,
                        terms[startb].expon)) {
        case -1: /* a의 expon이 b의 expon보다 작은 경우 */
                attach(terms[startb].coef, terms[startb].expon);
                startb++;
                break;
        case  0: /* 지수가 같은 경우 */
                coefficient = terms[starta].coef + terms[startb].coef;
                if(coefficient)
                    attach(coefficient, terms[starta].expon);
                starta++;
                startb++;
                break;
        case   1: /* a의 expon이 b의 expon보다 큰 경우 */
                attach(terms[starta].coef, terms[starta].expon);
                starta++;
        }
    /* A(x)의 나머지 항들을 첨가한다. */
    for(;starta <= finisha;starta++)
        attach(terms[starta].coef, terms[starta].expon);
    /* B(x)의 나머지 항들을 첨가한다. */
        for(;startb <= finishb; startb++)
            attach(terms[startb].coef, terms[startb].expon);
        *finishd = avail - 1;
    }
   

    void attach(float coefficient, int exponent)
    {
        /* 새로운 항을 다항식에 첨가 */
        if(avail >= MAX_TERMS) {
            fprintf(stderr, "다항식에 항이 너무 많다.\n");
            exit(1);
        }
        terms[avail].coef = coefficient;
        terms[avail++].expon = exponent;
    }

   
    int compare(int x, int y)
    {
        /* x와 y를 비교하여 적으면 -1, 같으면 0, 크면 1을 반환한다. */
        if(x<y) return -1;
        else if(x==y) return 0;
                else return 1;
    }

+ -

관련 글 리스트
37477 다항식의 연산에 대한 소스인데요.. 서찬 1572 2004/10/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.