다음은 이차방정식 x^2 - x - 1 = 0 의 양의 근 즉 황금비율(golden ratio)을 구하는 C 애플리케이션 소스이다. 황금비율을 구하는 비례방정식은 1 : x = x : (x+1) 이며, 이를 이차방정식으로 표현한 것이 x^2 - x - 1 = 0 이다.
See: Golden ratio - Sajun.org
아래의 소스파일은 C 언어용으로 민들어 두었던 소스 황금비율(golden ratio) 구하기 withfC and Ch 를 아주 조금 수정한 것이다. 수정한 부분은 #include를 #import로 바꾸고, 또
#import <Foundation/Foundation.h>
를 추가하고, 또 double 타입의 부동소수점수를 출력하기위한 printf 포맷에 %lf 대신 %g를 사용하역다. (만일 Foundation.h 를 수입(import)하지 않으면, exit 에러가 발생한다.)
컴파일은 Dev-C++ 개발 도구에서 Ctrl+F11 을 클릭한다.
- /*
- * Filename: testGoldenRatioMain.m
- * 황금률(즉, 이차방정식 x^2 - x - 1 = 0 의 양의 근)을 계산한다.
- *
- * Compile: Click Ctrl+F11
- *
- * Execute: testGoldenRatio
- *
- * Date: 2012/04/30
- * Author: PH Kim [ pkim (AT) scripts.pe.kr ]
- */
- #import <Foundation/Foundation.h> // for exit()
- #import <stdio.h>
- #import <string.h>
- #import <math.h>
- typedef struct _PAIR {
- double x1;
- double x2;
- } PAIR;
- void printUsing() {
- printf("Using: testGoldenRatio [-h|-help]\n");
- printf("This calculates the value of the golden ratio.\n");
- }
- // 이차방정식 a x^2 + b x + c = 0 의 근을 구한다.
- PAIR *findQuadraticRoot(double a, double b, double c) {
- static PAIR zeros;
- if (a == 0.0) {
- fprintf(stderr, "Since the highest coefficient is zero, the given equation is not a quadratic equation.\n");
- exit(1);
- }
- else if (b*b - 4*a*c < 0.0) {
- fprintf(stderr, "Since the discriminant %f is negative, the given equation has no real root.\b", b*b - 4*a*c);
- exit(1);
- }
- zeros.x1 = (-b + sqrt(b*b - 4*a*c)) / (2.0 * a);
- zeros.x2 = (-b - sqrt(b*b - 4*a*c)) / (2.0 * a);
- return (PAIR *)&zeros;
- }
- void main(int argc, const char *argv[]) {
- PAIR *values;
- double x1, x2;
- if (argc > 1 && (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "-help") == 0)) {
- printUsing();
- exit(1);
- }
- values = findQuadraticRoot(1.0, -1.0, -1.0);
- x1 = values->x1;
- x2 = values->x2;
- if (x1 >= x2) {
- // neither %lg nor %lf, but %g or %f for Object-C
- printf("The bigger root is %g, \n", x1);
- printf("and the less root is %g.\n", x2);
- }
- else {
- // neither %lg nor %lf, but %g or %f for Object-C
- printf("The bigger root is %g, \n", x2);
- printf("and the less root is %g.\n", x1);
- }
- }
컴파일은 Dec-C++ 개발 도구에서 Ctrl+F11 클릭
실행> testGoldenRatio
The bigger root is 1.61803,
and the less root is -0.618034.
'프로그래밍 > Objective-C' 카테고리의 다른 글
진법(radix) 표 만들기 예제 with Objective-C (0) | 2012.05.01 |
---|---|
대화형 모드의 진법(radix) 변환 예제 with Objective-C (0) | 2012.04.30 |
현재 시각 알아내기 for Objective-C (0) | 2012.04.30 |
조립제법(Horner의 방법) 예제 for Objecrive-C (0) | 2012.04.30 |
80컬럼 컨솔에 19단표 출력하기 예제 for Objective-C (0) | 2012.04.30 |