카테고리

CamelACT (9)
UVa (3)
Basics (4)
Information (2)
Statistics Graph


 차수와 계수를 갖는 구조체를 만든다. 이를 이용하여 다항식의 덧셈을 수행할 것이다. polynomal 구조체 두 개를 만들고 덧셈 함수에 넣는다. 각 구조체의 차수를 미리 변수에 저장한다. 두 구조체의 차수를 비교하여 같은 경우와 다른 경우로 나눈다. 다른 경우는 차수가 큰 구조체의 계수만 더하고 같은 경우는 두 구조체의 계수를 더하여 새로운 구조체를 구성한다. 종료조건은 덧셈할 두 개의 구조체가 모두 검사가 끝나야 하므로 둘 중 하나가 아닌 둘 다 종료 될 때까지 위 작업을 반복한다.


#include <stdio.h>

#define MAX(a,b) (((a)>(b))?(a):(b))
#define MAX_DEGREE 101
typedef struct { 			// 다항식 구조체 타입 선언
	int degree;			// 다항식의 차수
	float coef[MAX_DEGREE];	// 다항식의 계수
} polynomial;
// 
polynomial poly_add1(polynomial A, polynomial B)  // C=A+B
{	
	polynomial C;				// 결과 다항식
	int Apos=0, Bpos=0, Cpos=0;	// 배열 인덱스 변수
	int degree_a=A.degree;
	int degree_b=B.degree;
	C.degree = MAX(A.degree, B.degree); // 결과 다항식 차수

	while( Apos<=A.degree && Bpos<=B.degree ){
		if( degree_a > degree_b ){
		  C.coef[Cpos++]= A.coef[Apos++];
		  degree_a--;
		}
		else if( degree_a == degree_b ){
		  C.coef[Cpos++]=A.coef[Apos++]+B.coef[Bpos++];
		  degree_a--; degree_b--;
		}
		else {
		  C.coef[Cpos++]= B.coef[Bpos++];
  		  degree_b--;
		}
	}
	return C;
}

void print_poly(polynomial A)
{
	int temp = A.degree;
	int i;	

	printf("degree : %d\n", temp);
	for(i = 0 ; i <= A.degree ; i++){
		printf("%d coef : %.f\n", i, A.coef[i]);
	}
}

// 주함수
void main()
{
	polynomial a = { 5, {3, 6, 0, 0, 0, 10} };
	polynomial b = { 4,    {7, 0, 5, 0, 1} };

	polynomial c;
	c = poly_add1(a,b);

	print_poly(c);
}



신고
Basics l 2012.12.05 22:32
1 2 3 4 5 6 7 ··· 9 
get rsstistory! Tistory Tistory 가입하기!