티스토리 뷰

C | 자료구조

[C/자료구조] 다항식의 계산

rimo (리모) 2023. 10. 28. 00:14

 

C언어를 이용한 자료구조 실습입니다.

 


 

I. 문제

2개의 다항식을 입력받아서 이들을 빼고, 그 결과 다항식을 출력하는 C 프로그램을 다음과 같이 작성하고, 실행을 통해서 테스트하라.

 

- 다항식의 타입 poly를 정의하라. (다항식의 각 차수에 대해서 한 개의 항이 표현됨)

- 2개의 다항식을 선언시 초기화하여 정의하라.

- 매개변수로 전달된 다항식 p를 다항식의 형식으로 출력하는 함수  print_poly(p)를 작성하라.

- 2개의 다항식, p1, p2를 전달받고, 이들을 빼고 그 결과 다항식 p3를 반환하는 sub_poly(p1, p2, p3)를 작성하라.

- 다항식 p와  x 값을 매개변수로 전달받아서 다항식의 값을 계산하여 반환하는 함수 eval_poly (p, x)를 작성하라.

 

 

 

 

II. 구현

 

#include <stdio.h>
#include <math.h>

// poly 정의
typedef struct {
	int degree;		// 차수
	int coef[10];   // 계수
}poly; 

// 구조체 poly 형식의 다항식 p1,p2를 입력받아 p-p2 결과 p3를 반환
poly sub_poly(poly p1, poly p2)
{
	poly p3;
	int p1i = 0, p2i = 0, p3i = 0;	// 인덱스
	int a_Degree = p1.degree, b_Degree = p2.degree; // 최고 차항으로 차수 초기화
	while (p1i <= p1.degree && p2i <= p2.degree) {

		if (a_Degree > b_Degree) { // p1의 차수 > p2의 차수 -> p3에 p1값 삽입
			p3.degree = p1.degree;
			p3.coef[p3i++] = p1.coef[p1i++]; 
			a_Degree--; 
		}
		else if (b_Degree > a_Degree) { // p1의 차수 < p2의 차수 -> p3에 p2값 삽입
			p3.degree = p2.degree;
			p3.coef[p3i++] = p2.coef[p2i++];
			b_Degree--; 
		}
		else {	// 차수가 같다면 -> p1-p2 값 삽입
			p3.degree = p1.degree;
			p3.coef[p3i++] = p1.coef[p1i++] - p2.coef[p2i++];
		}
	}
	return p3;
}

//출력함수
void print_poly(poly p)
{
	int point = 0;

	// 1차까지 출력
	for (int i = p.degree; i > 0; i--){
		printf("%d*X^%d  +  ", p.coef[point], i);
		point++;
	}
	// 상수항 출력
	printf("%d\n", p.coef[point]);

}


// 다항식 p와 x값을 받아 계산 결과를 반환
double eval_poly(poly p, double x)
{
	int point = 0;
	double res = 0;

	for (int i = p.degree; i > 0; i--){
		res += p.coef[point] * pow(x, i);  // pow 함수 이용
		point++;
	}
	res += p.coef[point];
	return res;
}


int main()
{
	double x = 0.0, res = 0;
	poly p1 = { 4, {1,3,2,1,3} };
	poly p2 = { 2, {    1,0,1} };

	//poly p1 = { 3, {1,3,2,5} };
	//poly p2 = { 2, {  2,1,4} };
    
    printf("p1: ");
	print_poly(p1);
	printf("p2: ");
	print_poly(p2);

	// p3 구하기
	poly p3 = sub_poly(p1, p2); 
	printf("p3: ");
	print_poly(p3);


	// p3의 x결과 출력 
	printf("\n x값을 입력해주세요 : ");
	scanf("%lf", &x);
	res = eval_poly(p3, x); 
	printf("(x,res) = (%0.2lf , %0.2lf)\n", x, res);

	return 0;

}

 

 

 

 

III. 결과

 

댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday