200 likes | 432 Views
프로그래밍 실습 #4 – 다항식. Byung-Hyun Ha bhha@pusan.ac.kr. 다항식. 예 1: Java 에서는 어떻게 처리할까 ?. pow. coef. 3 x 5 − 7 x 2 + 2 x + 23. term. 0. 1. 2. 3. 4. 5. 6. 7. …. 3. -7. 2. 23. ?. ?. ?. ?. coef:. …. 5. 2. 1. 0. ?. ?. ?. ?. pow:. 4. count:. 다항식을 다루는 클래스 : Poly. 멤버
E N D
프로그래밍 실습 #4 – 다항식 Byung-Hyun Ha bhha@pusan.ac.kr
다항식 • 예1: • Java에서는 어떻게 처리할까? pow. coef. 3x5 − 7x2 + 2x + 23 term 0 1 2 3 4 5 6 7 … 3 -7 2 23 ? ? ? ? coef: … 5 2 1 0 ? ? ? ? pow: 4 count:
다항식을 다루는 클래스: Poly • 멤버 • 메서드 double[] coef = newdouble[100]; int[] pow = newint[100]; intcount = 0; void addTerm(double c, int p) {...} // cxp를 더함 void display() {...} // 화면에 다항식을 출력 Poly add(Poly right) {...} // right를 더한 결과 돌려줌 Poly sub(Poly right) {...} // right를 뺀 결과 돌려줌 Poly mul(Poly right) {...} // right를 곱한 결과 돌려줌
다항식을 활용하는 클래스: Math • publicclass Math { • publicstaticvoid main(String[] args) { • Poly p1 = new Poly(); • p1.addTerm(1.0, 2); • p1.addTerm(2.0, 1); • System.out.print("p1: "); • p1.display(); • Poly p2 = new Poly(); • p2.addTerm(-2.0, 3); • p2.addTerm(2.0, 1); • p2.addTerm(3, 0); • System.out.print("p2: "); • p2.display(); • ... // 뒤에 계속 • } • } (x2 + 2x) (–2x3 + 2x + 3)
다항식을 활용하는 클래스: Math • publicclass Math { • publicstaticvoid main(String[] args) { • ... // 앞에서 계속 • Poly p3 = p1.add(p2); • System.out.print("p1 + p2: "); • p3.display(); • Poly p4 = p1.sub(p2); • System.out.print("p1 - p2: "); • p4.display(); • Poly p5 = p1.mul(p2); • System.out.print("p1 * p2: "); • p5.display(); • } • }
다항식을 활용하는 클래스: Math • 실행결과 p1: 1.0 x^2 + 2.0 x^1 p2: -2.0 x^3 + 2.0 x^1 + 3.0 x^0 p1 + p2: -2.0 x^3 + 1.0 x^2 + 4.0 x^1 + 3.0 x^0 p1 - p2: 2.0 x^3 + 1.0 x^2 + -3.0 x^0 p1 * p2: -2.0 x^5 + -4.0 x^4 + 2.0 x^3 + 7.0 x^2 + 6.0 x^1
실행: Math • publicclass Math { • publicstaticvoid main(String[] args) { • Poly p1 = new Poly(); • p1.addTerm(1.0, 2); • p1.addTerm(2.0, 1); • ... p1 0 1 2 3 4 5 6 7 … ? ? ? ? ? ? ? ? coef: … ? ? ? ? ? ? ? ? pow: 0 count:
실행: Math • publicclass Math { • publicstaticvoid main(String[] args) { • Poly p1 = new Poly(); • p1.addTerm(1.0, 2); • p1.addTerm(2.0, 1); • ... coef[0] = 1.0; pow[0] = 2; count++; p1 0 1 2 3 4 5 6 7 … 1.0 ? ? ? ? ? ? ? coef: … 2 ? ? ? ? ? ? ? pow: x2 1 count:
실행: Math • publicclass Math { • publicstaticvoid main(String[] args) { • Poly p1 = new Poly(); • p1.addTerm(1.0, 2); • p1.addTerm(2.0, 1); • ... coef[1] = 2.0; pow[1] = 1; count++; p1 0 1 2 3 4 5 6 7 … 1.0 2.0 ? ? ? ? ? ? coef: … 2 1 ? ? ? ? ? ? pow: x2 + 2x 2 count:
실행: Math • publicclass Math { • publicstaticvoid main(String[] args) { • Poly p1 = new Poly(); • p1.addTerm(1.0, 2); • p1.addTerm(2.0, 1); • System.out.print("p1: "); • p1.display(); • ... x2 + 2x p1: 1.0 x^2 + 2.0 x^1
다항식을 활용하는 클래스: Math • publicclass Math { • publicstaticvoid main(String[] args) { • Poly p1 = new Poly(); • p1.addTerm(1.0, 2); • p1.addTerm(2.0, 1); • System.out.print("p1: "); • p1.display(); • Poly p2 = new Poly(); • p2.addTerm(-2.0, 3); • p2.addTerm(2.0, 1); • p2.addTerm(3, 0); • System.out.print("p2: "); • p2.display(); • ... // 뒤에 계속 • } • } –2x3 + 2x + 3 p1: 1.0 x^2 + 2.0 x^1 p2: -2.0 x^3 + 2.0 x^1 + 3.0 x^0
다항식을 활용하는 클래스: Math • publicclass Math { • publicstaticvoid main(String[] args) { • ... // 앞에서 계속 • Poly p3 = p1.add(p2); • System.out.print("p1 + p2: "); • p3.display(); • Poly p4 = p1.sub(p2); • System.out.print("p1 - p2: "); • p4.display(); • Poly p5 = p1.mul(p2); • System.out.print("p1 * p2: "); • p5.display(); • } • }
다항식 클래스 껍데기 • publicclass Poly { • double[] coef = newdouble[100]; • int[] pow = newint[100]; • intcount = 0; • void addTerm(double c, int p) { • // 구현 • } • void display() { • arrange(); • // 구현 • } • void arrange() { • // 구현 • } • ... // 계속 • }
다항식 클래스 껍데기 • publicclass Poly { • ... // 앞에서 계속 • Poly add(Poly right) { • Poly result = new Poly(); • // 구현 • return result; • } • Poly sub(Poly right) { • Poly result = new Poly(); • // 구현 • return result; • } • Poly mul(Poly right) { • Poly result = new Poly(); • // 구현 • return result; • } • }
add() Poly p3 = p1.add(p2); (x2 + 2x) + (–2x3 + 2x + 3) Poly p3 = new Poly(); p3.addTerm(1.0, 2); p3.addTerm(2.0, 1); p3.addTerm(-2.0, 3); p3.addTerm(2.0, 1); p3.addTerm(3.0, 0);
sub() Poly p4 = p1.sub(p2); (x2 + 2x) – (–2x3 + 2x + 3) Poly p4 = new Poly(); p4.addTerm(1.0, 2); p4.addTerm(2.0, 1); p4.addTerm(2.0, 3); p4.addTerm(-2.0, 1); p4.addTerm(-3.0, 0);
arrange()의 필요성 • 만일 정리를 안 해준다면 • arrange() • display()에서 먼저 정렬하고 coef.가 0인 것을 지움 Poly p4 = p1.sub(p2); System.out.print("p1 - p2: "); p4.display(); (x2 + 2x) – (–2x3 + 2x + 3) p1 - p2: 1.0 x^2 + 0.0 x^1 + 2.0 x^3 + -3.0 x^0 • void display() { • arrange(); • for (int i = 0; i < count; i++) { • ...
mul() • 다항식 곱셈 (x2 + 2x)(–2x3 + 2x + 3) = ?
mul() Poly p5 = p1.mul(p2); Poly p5 = new Poly(); p4.addTerm(1.0 * -2.0, 2 + 3); p4.addTerm(1.0 * 2.0, 2 + 1); p4.addTerm(1.0 * 3.0, 2 + 0); p4.addTerm(2.0 * -2.0, 1 + 3); p4.addTerm(2.0 * 2.0, 1 + 1); p4.addTerm(2.0 * 3.0, 1 + 0); Hint: for statement를 두 개 겹쳐 사용!!!
숙제 5 • class Poly를 완성하여 제출