﻿// polynomial1.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
#define _CRT_SECURE_NO_WARNINGS
#define MAX_ITEM 100
#include <stdio.h>

int read_polynomial(int);
int add_polynomial(int max_degree1, int max_degree2);
void print_polynomial(int);
void read_bmi_data_dynamic(void);

struct poly_tag {
	float coef[MAX_ITEM];
	int degree[MAX_ITEM];
}poly1, poly2, poly_result;

//***************************************************************************
// 다항식 입력 함수, 매개변수는 다항식 순서
int read_polynomial(int num) {
	int poly_item_num=0;
	float coef;
	int degree;
	
	// 다항식의 항의 수 입력
	while (poly_item_num < 1) {
		printf("[%2d] 번째 다항식의 총 항의 갯수를 입력 하시오: ", num);
		if (scanf("%d", &poly_item_num) != 1) {
			printf("scanf error");
			return -1;
		}
	} // while

	// 다항식 계수와 지수 입력
	for (int no = 0; no < poly_item_num; no++) {
		scanf("%f %d", &coef, &degree);
		if (num == 1) {
			poly1.coef[no] = coef;
			poly1.degree[no] = degree;
		}
		else {
			poly2.coef[no] = coef;
			poly2.degree[no] = degree;
		}
	} // for

	if (num == 1) {
		for (int no = 0; no < poly_item_num; no++) {
			printf("%6.2f x^ %d ", poly1.coef[no], poly1.degree[no]);
		}
	}
	else if (num == 2) {
		for (int no = 0; no < poly_item_num; no++) {
			printf("%6.2f x^ %d ", poly2.coef[no], poly2.degree[no]);
		}
	}
	printf("\n");
	return poly_item_num;
}
//***************************************************************************
int add_polynomial(int item_num1, int item_num2) {
	int no=0, no1=0, no2=0 ;

	while (1) {
		if (poly1.degree[no1] > poly2.degree[no2]) {
			poly_result.coef[no] = poly1.coef[no1];
			poly_result.degree[no] = poly1.degree[no1];
			no1++;
			if (no1 >= item_num1) {	// 2번째 다항식 남은 부분 복사후 루프 종료
				while (no2 <= item_num2) {
					poly_result.coef[no] = poly2.coef[no2];
					poly_result.degree[no] = poly2.degree[no2];
					no2++; no++;
				}
				break;
			}
		}
		else if (poly1.degree[no1] < poly2.degree[no2]) {
			poly_result.coef[no] = poly2.coef[no2];
			poly_result.degree[no] = poly2.degree[no2];
			no2++;
			if (no2 >= item_num2) {	// 1번째 다항식 남은 부분 복사후 루프 종료
				while (no1 <= item_num1) {
					poly_result.coef[no] = poly1.coef[no1];
					poly_result.degree[no] = poly1.degree[no1];
					no1++; no++;
				}
				break;
			}
		}
		else {
				poly_result.coef[no] = poly1.coef[no1]+ poly2.coef[no2];
				poly_result.degree[no] = poly1.degree[no1];
				no1++;
				no2++;
				if (no1 >= item_num1) {
					while (no2 <= item_num2) {
						poly_result.coef[no] = poly2.coef[no2];
						poly_result.degree[no] = poly2.degree[no2];
						no2++; no++;
					}
					break;
				}
				if (no2 >= item_num2) {
					while (no1 <= item_num1) {
						poly_result.coef[no] = poly1.coef[no1];
						poly_result.degree[no] = poly1.degree[no1];
						no1++; no++;
					}
					break;
				}
		}
		no++;
	}// while
	return no;
}
//***************************************************************************
void print_polynomial(int item_num) {
	int no = 0;
	printf("\n다항식 덧셈 결과: ");
	while (no < item_num) {
		printf("%6.2f x^ %d ", poly_result.coef[no], poly_result.degree[no]);
		no++;
	}
}
//***************************************************************************
int main()
{
	/*
	int poly_item_num1 = 0, poly_item_num2 = 0, poly_item_num_result = 0;

	// 다항식 2개 입력
	poly_item_num1 = read_polynomial(1);
	poly_item_num2 = read_polynomial(2);

	if (poly_item_num1 > 0 && poly_item_num2 > 0) {
		poly_item_num_result = add_polynomial(poly_item_num1, poly_item_num2);
		print_polynomial(poly_item_num_result);
	}
	*/
	read_bmi_data_dynamic();
}


