EASY7
[C언어] 다항식 더하기 본문
c언어에서 다항식을 표현하는 것에는 두가지 방법이 있다.
poly_add1은 배열을 이용해 0차부터 최고차항까지 다 표현한다. 연산이 편리한 장점이 있다.
poly_add2는 0이 아닌 차수만 표현하기에 메모리 낭비가 적다.
#include <stdio.h>#define MAX(a,b) (((a)>(b))?(a):(b))
#define MAX_DEGREE 10
typedef struct
{
int degree;
int coef[MAX_DEGREE];
} polynomial;
polynomial poly_add1(polynomial A, polynomial B)
{
int i;
polynomial C;
int Apos = 0, Bpos = 0, Cpos = 0;
int degree_a = A.degree, 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--;
}
}
while (C.coef[0] == 0)
{
for (i = 0; i < C.degree; i++)
{
C.coef[i] = C.coef[i + 1];
}
C.degree--;
}
return C;
}
void print_poly1(polynomial p)
{
int i;
int exponent = p.degree;
for (i = 0; i <= p.degree; i++)
{
if (p.coef[i] != 0)
printf("%dx^%d ", p.coef[i], exponent);
exponent--;
}printf("\n");
}
int main(void) {
polynomial a = { 6,{ 4, 3, 6, 0, 0, 0, 10 } };
polynomial b = { 6,{ -4, -3, 7, 0, 5, 1, 10 } };
//polynomial a = {6, {4, 3, 6, 0, 0, 0, 10}};
//polynomial b = {4, {7, 0, -5, 1, 0}};
polynomial c;
c = poly_add1(a, b);
printf("a = "); print_poly1(a);
printf("b = "); print_poly1(b);
printf("a + b = c = "); print_poly1(c);
printf("C의 차수:%d\n", c.degree);
}
#define MAX_TERMS 11
typedef struct {
int coef;
int expon;
} term;
int poly_add2(term t1[], int t1Size, term t2[], int t2Size, term t3[])
{
int i = 0, j = 0, k = 0;
int coef;
while (i < t1Size && j < t2Size)
{
if (t1[i].expon > t2[j].expon)
t3[k++] = t1[i++];
else if (t1[i].expon == t2[j].expon)
{
if ((coef = t1[i].coef + t2[j].coef) != 0)
{
t3[k].coef = coef;
t3[k].expon = t1[i].expon;
k++;
}
i++; j++;
}
else
t3[k++] = t2[j++];
}
while (i < t1Size)
t3[k++] = t1[i++];
while (j < t2Size)
t3[k++] = t2[j++];
return k;
}
void print_poly2(term t[], int tSize)
{
int i = 0;
for (i = 0; i < tSize; i++)
{
printf("%dx^%d ", t[i].coef, t[i].expon);
}printf("\n");
}
int main(void)
{
term a[] = { { 60, 6 },{ 40, 4 },{ 30, 3 },{ 10, 1 } };
int aSize = sizeof(a) / sizeof(a[0]);
term b[] = { { -60, 5 },{ -40, 4 },{ -10, 1 } };
int bSize = sizeof(b) / sizeof(b[0]);
term c[MAX_TERMS];
int cSize;
cSize = poly_add2(a, aSize, b, bSize, c);
printf("a = ");
print_poly2(a, aSize);
printf("b = ");
print_poly2(b, bSize);
printf("c = ");
print_poly2(c, cSize);
printf("\nC 항의 개수%d", cSize);
}
'개발 공부 > C' 카테고리의 다른 글
break / return / exit (0) | 2017.10.14 |
---|---|
[c언어] type에 따른 형식 지정자 (0) | 2017.10.06 |
[c언어] file open (0) | 2017.10.04 |
[c언어] 다양한 SORT 방법(insert / merge) (0) | 2017.10.04 |
[c언어] 순환 / 큰 값으로 만들어주는 길 찾기 (0) | 2017.10.04 |