c언어로 다항식 덧셈 만들기 도와주세요
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
#define COMPARE(x,y) (((x)<(y)) ? -1:((x)==(y))? 0:1)
//coef 계수
// expon 차수
typedef struct {
float coef;
int exp;
} polynomial;
void sort(polynomial list[], int n) {
int i, j, min, temp;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++)
if (list[j].exp < list[min].exp)
min = j;
SWAP(list[i].exp, list[min].exp, temp);
}
}
int size(polynomial* A) {
int Aindex = 0;
int Asize = 0;
while ((A[Aindex].exp != -1)) {
Aindex++;
}
return Aindex;
}
polynomial padd(polynomial* A, polynomial* B) {
polynomial* D = (polynomial*)malloc(sizeof(polynomial) * 10);
int Aindex = 0;
int Bindex = 0;
int Dindex = 0;
while ((Aindex == size(A)) && (Bindex == size(B))) {
switch (COMPARE(A[Aindex].exp, B[Bindex].exp))
{
//B가 A보다 큰경우
case -1:
D[Dindex].coef = B[Bindex].coef;
D[Dindex].exp = B[Bindex].exp;
Bindex++;
Dindex++;
break;
//B와 A가 같은경우
case 0:D[Dindex].coef = A[Aindex].coef + B[Bindex].coef;
D[Dindex].exp = A[Aindex].exp + B[Bindex].exp;
Aindex++;
Bindex++;
Dindex++;
break;
//A가 B보다 큰경우
case 1:
D[Dindex].coef = A[Aindex].coef;
D[Dindex].exp = A[Aindex].exp;
Aindex++;
Dindex++;
break;
}
//남은 A항들 넣기
for (; Aindex <=size(A);) {
D[Dindex].coef = A[Aindex].coef;
D[Dindex].exp = A[Aindex].exp;
Aindex++;
Dindex++;
}
//남은 B항들 넣기
for (; Bindex <= size(B);) {
D[Dindex].coef = B[Bindex].coef;
D[Dindex].exp = B[Bindex].exp;
Bindex++;
Dindex++;
}
}
return *D;
}
int main() {
printf("3.1 다항식 생성\n");
polynomial* A;
A = (polynomial*)malloc(sizeof(polynomial) * 10);
for (int i = 0; i < 10; i++) {
printf("A의 항을 입력하세요. (coef(실수) expon(정수)): ");
scanf_s("%f", &A[i].coef); scanf_s("%d", &A[i].exp);
if (((A[i].coef) == -1) && ((A[i].exp) == -1)) break;
}
int i = 0;
printf("coef expon\n");
while (1) {
printf("%.3f %d\n", A[i].coef, A[i].exp);
i++;
if (((A[i].coef) == -1) && ((A[i].exp) == -1)) break;
}
polynomial* B;
B = (polynomial*)malloc(sizeof(polynomial) * 10);
for (int j = 0; j < 10; j++) {
printf("B의 항을 입력하세요. (coef(실수) expon(정수)): ");
scanf_s("%f", &B[j].coef); scanf_s("%d", &B[j].exp);
if (((B[j].coef) == -1) && ((B[j].exp) == -1)) break;
}
int j = 0;
printf("coef expon\n");
while (1) {
printf("%.3f %d\n", B[j].coef, B[j].exp);
j++;
if (((B[j].coef) == -1) && ((B[j].exp) == -1)) break;
}
printf("3.2 다항식 덧셈\n");
polynomial* D;
int d = 0;
D = (polynomial*)malloc(sizeof(polynomial) * 10);
*D = padd(A, B);
printf("coef expon\n");
while (d==size(D))
{
printf("%.3f %d\n", D[d].coef, D[d].exp);
d++;
}
}
이렇게 프로그램을 짜봣는데 덧셈값이 안나오네요 ㅜㅜ
참고하셔요.
참고
https://gist.github.com/jamesgeorge007/e05e538d76a78e1dea623237284e82b4
세벌 https://sebuls.blogspot.kr/
댓글 달기