이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date |
2010/03/26 19:11:07 |
Name |
Coa |
Subject |
c++ 관련 질문이에요. |
전역한 후배가 복학하고서 c++를 배우는데 물어보네요.
문제점은 제가 잡아놔서 실행은 됩니다만 굉장히 단순 무식해 보이는 소스입니다.
저도 프로그래밍 접은지 6년이 넘어서 기억이 거의 안납니다만,
주어진 방정식이 여러개가 되면 (아래의 소스에서는 2개)
중복되는 형태의 함수 선언이 많아 져서 지저분해지네요.
그대로 두고 볼수가 없어서 주석으로 문의를 표시했습니다.
아마도 클래스나 포인터를 이용하면 간단하게 묶어서 쓸 수 있을텐데 도움부탁드립니다.
#include <iostream>
#include <cmath>
#include <windows.h>
using namespace std;
// 사용자 함수 선언이 비슷한 형태로 중복이 됩니다.
double f(double x);
double df(double x);
double f2(double x);
double df2(double x);
void newton(double x, double y, double eps);
void newton2(double x, double y, double eps);
int i;
double eps, x, y;
int main(void){
do{
system("cls");
cout << "다음 중 해를 구할 방정식을 고르세요.\n";
cout << " 1. exp(2.0*x) - 5.0 = 0\n";
cout << " 2. 2*x^3-3*x^2-4*x-1=0\n";
cin >> i;
switch(i)
{
case 1:
cout <<"1번 문제를 선택하였습니다.\n";
x=1.0;
newton(x,f(x),1.0e-10);
break;
case 2:
cout <<"2번 문제를 선택하였습니다.\n";
x=1.0;
newton(x,f2(x),1.0e-10);
break;
default :
cout <<"올바른 입력이 아닙니다. 다시 입력하세요.\n";
Sleep(500);
}
}while(i!=1&&i!=2);
return 0;
}
//f()와 f2()함수의 경우 return값의 형태가 다를뿐 구조는 동일합니다.
//마찬가지로 newton()과 newton2()의 형태가 동일합니다.
double f( double x){ return exp(2.0*x) - 5.0; } //해를 구할 첫번째 함수의 초기 y값 반환
double df( double x){ return 2.0*exp(2.0*x); } //미분
double f2(double x){ return 2*pow(x,3)-3*pow(x,2)-4*x-1;} //해를 구할 두번째 함수의 초기 y값 반환
double df2(double x){return 6*pow(x,2)-6*x-4;} //미분
void newton(double x, double y, double eps ) //newton 방식으로 해 구하기
{
cout << " NEWTON'S METHOD로 구한 해는 \n" ;
while ( abs(y) > eps )
{ x = x - f(x) / df(x);
y = f(x) ;
}
cout << "x= " << x << " y= " << y << "\n";
}
void newton2(double x, double y, double eps )
{
cout << " NEWTON'S METHOD로 구한 해는 \n" ;
while ( abs(y) > eps )
{ x = x - f2(x) / df2(x);
y = f2(x) ;
}
cout << "x= " << x << " y= " << y << "\n";
}
|
통합규정 1.3 이용안내 인용
"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
|