배열의 응용 : 다항식
오늘은 수학에서 나오는 다항식들을 배열을 이용하여 표현 해 보겠습니다.
어떻게??
모든 차수의 계수 값들을 배열에 저장한다
*설계방식 예를 들어 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함수는 다항식의 덧셈을 하는 함수입니다. 결과
'IT 공부 > 자료구조' 카테고리의 다른 글
[자료구조/C언어] - ⑥ 리스트 - 원형연결리스트 삽입 삭제 추가 (0) | 2017.02.15 |
---|---|
[자료구조/C언어] - ⑥ 리스트 - 단순연결리스트 역순,반전 (0) | 2017.02.15 |
자료구조/C언어 ④ 자료구조 희소행렬 - 행렬의 곱셈,덧셈,90도회전 (0) | 2017.02.15 |
[자료구조/C언어] - ③ 리스트 - 단순연결리스트 삽입,추가/삭제/생성 (0) | 2017.02.09 |
자료구조 ② - 자료구조 순환 ,재귀함수 -하노이탑 , 이진탐색(재귀) (0) | 2017.02.09 |