소스 파일명: TestWhile.fs

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



컴파일:

Command> fsc TestWhile.fs

실행:

Command> TestWhile
Using: TestWhile [integer1] [integer2]
This finds the greatest common divisor of the given two integers.

Command> TestWhile -200 300
GCD(-200, 300) = 100

Command> TestWhile -200 0
GCD(-200, 0) = 200

Command> TestWhile 125 100
GCD(125, 100) = 25

Command> TestWhile 23 25
GCD(23, 25) = 1



Posted by Scripter
,