소스 파일명: testWhile.ml
- (*
- * Filename: testWhile.ml
- *
- * Purpose: Example using the while loop syntax
- * while ....
- *
- * Execute: ocaml testWhile.ml -200 300
- *
- * Or
- *
- * Compile: ocamlc -o testWhile.exe testWhile.ml
- * Execute: testWhile -200 300
- *)
- (* 사용법 표시 *)
- let printUsage() =
- Printf.printf "Using: testWhile.py [integer1] [integer2]\n";
- Printf.printf "This finds the greatest common divisor of the given two integers.\n";;
- let cmdArgs = Sys.argv;;
- if not ((Array.length cmdArgs) = 3) then
- printUsage();;
- if not ((Array.length cmdArgs) == 3) then
- exit 1;;
- (*
- // --------------------------------------
- // 명령행 인자의 두 스트링을 가져와서
- // 정수 타입으로 변환하여
- // 변수 val1과 val2에 저장한다.
- *)
- let val1 = int_of_string cmdArgs.(1);;
- let val2 = int_of_string cmdArgs.(2);;
- (* a는 |val1|, |val2| 중 큰 값 *)
- let a = ref (abs val1);;
- let b = ref (abs val2);;
- if (!a < !b) then
- let t = !a in
- a := abs val2;
- b := t;;
- if (!b = 0) then
- Printf.printf "GCD(%d, %d) = %d\n" val1 val2 !a;;
- if (!b = 0) then
- exit 0;;
- (*
- // --------------------------------------
- // Euclidean 알고리즘의 시작
- //
- // a를 b로 나누어 몫은 q에, 나머지는 r에 저장
- *)
- let q = ref (!a / !b);;
- let r = ref (!a mod !b);;
- (*
- // --------------------------------------
- // Euclidean 알고리즘의 반복 (나머지 r이 0이 될 때 까지)
- *)
- while not (!r = 0) do
- a := !b;
- b := !r;
- q := !a / !b;
- r := !a mod !b;
- done;;
- (* 나머지가 0이면 그 때 나눈 수(제수) b가 최대공약수(GCD)이다. *)
- let gcd = !b;;
- (* 최대공약수(GCD)를 출력한다. *)
- Printf.printf "GCD(%d, %d) = %d\n" val1 val2 gcd;;
컴파일:
Command> ocamlc -o testWhile.exe testWhile.ml
실행:
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
'프로그래밍 > OCaml' 카테고리의 다른 글
80컬럼 컨솔에 19단표 출력하기 예제 for OCaml (0) | 2013.01.27 |
---|---|
(최대공약수 구하기) while 반복문 없는 예제 for OCaml (0) | 2013.01.27 |
구구단 출력 예제 for OCaml (0) | 2013.01.26 |
명령행 인자 처리 예제 for OCaml (0) | 2013.01.26 |
if...else... 조건문 사용 예제 for OCaml (0) | 2013.01.26 |