소스 파일명: TestWhile.fs
- (*
- * Filename: TestWhile.fs
- *
- * Purpose: Example using the while loop syntax
- * while ....
- *
- * Compile: fsc --codepage:949 TestWhile.fs
- * Execute: TestWhile -200 300
- *)
- #light
- // 사용법 표시
- let printUsage x =
- printfn "Using: TestWhile.py [integer1] [integer2]"
- printfn "This finds the greatest common divisor of the given two integers."
- let cmdArgs = System.Environment.GetCommandLineArgs()
- if not ((Array.length cmdArgs) = 3) then
- printUsage 0
- exit(1)
- // --------------------------------------
- // 명령행 인자의 두 스트링을 가져와서
- // 정수 타입으로 변환하여
- // 변수 val1과 val2에 저장한다.
- let val1 = int cmdArgs.[1]
- let val2 = int cmdArgs.[2]
- // a는 |val1|, |val2| 중 큰 값
- let mutable a = abs val1
- let mutable b = abs val2
- if a < b then
- a <- abs val2
- b <- abs val1
- if b = 0 then
- printfn "GCD(%d, %d) = %d" val1 val2 a
- exit(0)
- // --------------------------------------
- // Euclidean 알고리즘의 시작
- //
- // a를 b로 나누어 몫은 q에, 나머지는 r에 저장
- let mutable q = a / b
- let mutable r = a % b
- // --------------------------------------
- // Euclidean 알고리즘의 반복 (나머지 r이 0이 될 때 까지)
- while not (r = 0) do
- a <- b
- b <- r
- q <- a / b
- r <- a % b
- // 나머지가 0이면 그 때 나눈 수(제수) b가 최대공약수(GCD)이다.
- let gcd = b
- // 최대공약수(GCD)를 출력한다.
- 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
'프로그래밍 > F#' 카테고리의 다른 글
80컬럼 컨솔에 19단표 출력하기 예제 for F# (0) | 2010.07.13 |
---|---|
(최대공약수 구하기) while 반복문 없는 예제 for F# (0) | 2010.07.13 |
구구단 출력 예제 for F# (0) | 2010.07.12 |
명령행 인자 처리 예제 for F# (0) | 2010.07.12 |
Hello 예제 for F# (0) | 2010.07.12 |