프로그래밍/Io

황금비율(golden ratio) 구하기 with Io

Scripter 2008. 4. 15. 00:32

다음은  이차방정식 x^2 - x - 1  = 0 의 양의 근 즉 황금비율(golden ratio)을 구하는 Io 애플리케이션 소스 코드이다. 황금비율을 구하는 비례방정식은   1 : x = x : (x+1) 이며, 이를 이차방정식으로 표현한 것이 x^2 - x - 1  = 0 이다.

See:  http://en.wikipedia.org/wiki/Golden_ratio


Io 소스 코드에서 눈여겨 볼 부분:

  1) 한 줄  주석문은 // .........
                    또는 # .............
  2) 여러줄 블럭 주석문은 /* ...........
                                       ............ */
  3) 한글이 포함된 소스틑 반드시 UTF-8 인코딩으로 저장한다. (비록 주석문에만 한글을 썼다라도 ...)

  4) 컨솔 출력은   string println
                         string print
                         writeln(string)
                         write(string)
       중 하나

  5)  if ... else ... 구문은
                        if (......) then (       // 이것을 반드시 모두 동일한 줄에
                          ........
                          ........
                        ) elseif (.......) then (       // 이것을 반드시 모두 동일한 줄에
                          ........
                          ........
                        ) elseif (                      // 이것을 반드시 모두 동일한 줄에
                          ........
                          ........
                        )                        
  6)  처음 등장하는 변수에 객체를 할당할 때는
                  varName := expression
       처럼 대입연산자 := 를 사용한다.

  7) if (조건절) then  (....) 의 조건절 구문에는 논리연산자 and, or,  not 을 사용할 수 있다.

            C:\test\io> io
            Io 20080107
            Io> true and true println
            true
            ==> true
            Io> true and false println
            false
            ==> false
            Io> true or false println
            ==> true
            Io> false or false println
            false
            ==> false
            Io> false not println
            true
            ==> true
            Io> true not println
            false
            ==> false
            Io> exit
           
            C:\test\io>

  7) string interpolate 구문은 string 안에 표현된 #{expression} 의 값을 구하여 스트링으로 변환한다. Groovy 언어에서 GString이라고 부르는 것에 해당한다.



  1. /*
  2.  *  Filename: testGoldenRatio.io
  3.  *    황금률(즉, 이차방정식 x^2 - x - 1  = 0 의 양의 근)을 계산한다.
  4.  *
  5.  *   Execute: io testGoldenRatio.io
  6.  *
  7.  *      Date:  2008/04/29
  8.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  9.  */
  10. printUsing := method(
  11.     writeln("Using: groovy testGoldenRatio.groovy [-h|-help]")
  12.     writeln("This calculates the value of the golden ratio.")
  13. )
  14. // 이차방정식 a x^2 + b x + c  = 0 의 근을 구한다.
  15. findQuadraticRoot := method(a, b, c,
  16.     if (a == 0.0) then (
  17.         Exception raise("Since the highest coefficient is zero, the given equation is not a quadratic equation.")
  18.     ) elseif (b*b - 4*a*c < 0.0) then (
  19.         Exception raise("Since the discriminant #{b*b - 4*a*c} is negative, the given equation has no real root." interpolate )
  20.     )
  21.     x1 := (-b + ((b*b - 4*a*c) sqrt)) / (2.0 * a)
  22.     x2 := (-b - ((b*b - 4*a*c) sqrt)) / (2.0 * a)
  23.     array := list(x1, x2)
  24.     array
  25. )
  26. # 실행 시작 지점
  27. if ((args size > 1) and ((args at(1) == "-h") or (args at(1) == "-help"))) then (
  28.     printUsing()
  29.     exit(1)
  30. )
  31. values := findQuadraticRoot(1.0, -1.0, -1.0)
  32. x1 := values at(0)
  33. x2 := values at(1)
  34. if (x1 >= x2) then (
  35.     writeln("The bigger root is #{x1}, " interpolate )
  36.     writeln("and the less root is #{x2}." interpolate )
  37. ) else (
  38.     writeln("The bigger root is #{x2}, " interpolate )
  39.     writeln("and the less root is #{x1}." interpolate )
  40. )



실행> io testGoldenRatio.io
The bigger root is 1.6180339887498949,
and the less root is -0.6180339887498949.




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.