배열의 응용 : 다항식

오늘은 ​수학에서 나오는 다항식들을 배열을 이용하여 표현 해 보겠습니다.


어떻게??

​모든 차수의 계수 값들을 배열에 저장한다

 

*설계방식

예를 들어 10x^5 + 0x*4 + 0x^3 +6x+ 3 이라는 식이 있으면

{10 , 0 , 0 , 0 , 6 , 3}​ 을 저장하는 방식입니다.

​이방법은 10x^100 + 6 이라는 다항식의 경우 다항식을 저장 할 공간이 101개나 필요하다는 문제점이 있습니다.

 그러나 차수와 계수를 쉽게 찾을 수 있고 프로그램을 간단히 설계할 수 있습니다.

 

*프로그래밍


다항식을 저장할 구조체 변수를 만들어 줍니다.

 

degree: 최고차항의 지수

coef    : 계수들을 저장 (이때 degree의 +1 만큼 동적할당을 하여 필요한 공간만 쓰겠습니다.)

 

배열의 덧셈을 하기위해서는 먼저 다항식 구조체에 값을 저장해줘야 합니다.

str과 str2에 문자열로 다항식을 입력하면 그 다항식 문자열에서 계수들을 잘라와서 int타입의 배열에 넣어보겠습니다!

coef에게 필요한 공간을 할당해주기 위해 먼저 degree의 값을 알아야겠죠??

​degree의 값을 알기위해 first()라는 함수를 만들어 줬습니다.

제일 처음에 나오는 ^뒤의 문자를 숫자로 바꿔주고 그 값을 리턴합니다!

만약 다항식의 최고차항이 1차라면 1을 리턴해야겠죠?? ex) x+5

(여기서 상수항만 있을 경우는 고려하지 않았습니다.)


그후 각각 poly변수 p,q의 degree에 각각의 최고차항을 넣어주고

coef에는 calloc을 이용하여 초기화를하여 ​동적할당을 해줍니다.


이 작업까지 완료하였다면 이제 다항식을 담을 그릇이 완성이 된 것 입니다.


ex) 3x^5 + 6x^3 + 2x + 1

degree=5

coef = {0,0,0,0,0,0}


이제 coef에 해당하는 차수에 해당하는 계수들을 넣어줍니다!

cut() 함수를 이용하여 숫자를 잘라와서 메인에서 넣어주도록 하였습니다.

이때 각 차수에 해당하는 계수가 없다면 ( 위의 예에서는 2제곱이 존재하지 않는다.) 그 자리는 건너뜁니다.

이 작업을 위해 위에서 공간을 할당할 때 0으로 초기화를 해줬습니다.

add함수는 다항식의 덧셈을 하는 함수입니다.

 

 

 

결과

 

 

 

복사했습니다!