프로그래밍/Io

(최대공약수 구하기) while ... 반복문 예제 for Io

Scripter 2008. 4. 6. 23:14

아래의 소스 코드는 Groovy 용으로 작성돠었던 소스파일 testWhile.groovy를 Io용으로 고친 것이다.
* 소스에 한글이 포함된 경우 반드시 UTF-8 인코딩으로 저장해야 한다. 그렇지 않으면 에러기 난다.
* (Ubuntu에서는 OS 자체에서 UTF-8 인코딩을 기본으로 하고 있으므로, 한글 처리에 아무 문제가 없을 것이다.)


소스 파일명: testWhile.io

  1. #  Filename: testWhile.io
  2. #
  3. #  Purpose:  Example using the while loop syntax
  4. #                while ....
  5. #
  6. #  Execute: io testWhile.io -200 300
  7. // 사용법 표시
  8. printUsage := method (
  9.      "Using: groovy testWhile.groovy [integer1] [integer2]" println
  10.     "This finds the greatest common divisor of the given two integers." println
  11. )
  12. if (args size < 3) then (
  13.     printUsage()
  14.    exit(1)
  15. )
  16. val1 := args at(1) asNumber
  17. val2 := args at(2) asNumber
  18. ////////////////////////////////////////////////
  19. // 명령행 인자의 두 스트링을 가져와서
  20. // 긴정수(long) 타입으로 변환하여
  21. // 변수 val1과 val2에 저장한다.
  22. a := val1 abs
  23. b := val2 abs
  24. // a는 |val1|, |val2| 중 큰 값
  25. if (a < b) then (
  26.     a := val2 abs
  27.     b := val1 abs
  28. )
  29. if (b == 0) then (
  30.    "GCD(#{val1}, #{val2}) = #{a}" interpolate println
  31.     exit(0)
  32. )
  33. ////////////////////////////////////////
  34. // Euclidean 알고리즘의 시작
  35. //
  36. // a를 b로 나누어 몫은 q에, 나머지는 r에 저장
  37. q := (a / b) floor
  38. r := a % b
  39. ////////////////////////////////////////
  40. // Euclidean 알고리즘의 반복 (나머지 r이 0이 될 때 까지)
  41. while (r > 0,
  42.     a := b
  43.     b := r
  44.     q := (a / b)  floor
  45.     r := a % b
  46. )
  47. // 나머지가 0이면 그 때 나눈 수(제수) b가 최대공약수(GCD)이다.
  48. gcd := b
  49. // 최대공약수(GCD)를 출력한다.
  50. "GCD(#{val1}, #{val2}) = #{gcd}" interpolate println



실행> io testWhile.io
Using: io testWhile.io [integer1] [integer2]
This finds the greatest common divisor of the given two integers.

실행> io testWhile.io -50, 200
GCD(-50, 200) = 50

실행> io testWhile.io 50, -30
GCD(50, -30) = 10

실행> io testWhile.io 0. 30
GCD(0, 30) = 30




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