아래의 소스 코드는 Groovy로도 실행되는 Java 용 소스파일 TestWhileLoop.java를 Groovy 용으로 Groovy 언어 답게 고친 것이다.

소스 파일명: testWhile.groovy

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


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

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

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

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




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

Posted by Scripter
,

소스 파일명: TestWhileLoop.java

  1. /*
  2.  *  Filename: TestWhileLoop.java
  3.  *
  4.  *  Purpose:  Example using the while loop syntax
  5.  *                while ....
  6.  *
  7.  *  Compile: javac -d . TestWhileLoop.java
  8.  *  Execute: java TestWhileLoop -200 300
  9.  *
  10.  */
  11. import java.lang.Math;
  12. public class TestWhileLoop {
  13.     // 사용법 표시
  14.     public static void printUsage() {
  15.          System.out.println("Using: java TestWhileLoop [integer1] [integer2]");
  16.          System.out.println("This finds the greatest common divisor of the given two integers.");
  17.     }
  18.     // Java 애플리케이션의 실행 시작 시점 main 메소드
  19.     // (C 언어의 main 함수에 해당)
  20.     public static void main(String[] args) {
  21.         if (args.length != 2) {
  22.             printUsage();
  23.             System.exit(1);
  24.         }
  25.         ////////////////////////////////////////////////
  26.         // 명령행 인자의 두 스트링을 가져와서
  27.         // 긴정수(long) 타입으로 변환하여
  28.         // 변수 val1과 val2에 저장한다.
  29.         long val1 = Long.parseLong(args[0]);
  30.         long val2 = Long.parseLong(args[1]);
  31.         long a, b, q, r, gcd;    // r은 나머지, q는 몫
  32.         // a는 |val1|, |val2| 중 큰 값
  33.         a = Math.abs(val1);
  34.         b = Math.abs(val2);
  35.         if (a < b) {
  36.             a = Math.abs(val2);
  37.             b = Math.abs(val1);
  38.         }
  39.         if (b == 0L) {
  40.             System.out.println("GCD(" + val1 + ", " + val2 + ") = " + a);
  41.             System.exit(0);
  42.         }
  43.         ////////////////////////////////////////
  44.         // Euclidean 알고리즘의 시작
  45.         //
  46.         // a를 b로 나누어 몫은 q에, 나머지는 r에 저장
  47.         q = a / b;
  48.         r = a % b;
  49.         ////////////////////////////////////////
  50.         // Euclidean 알고리즘의 반복 (나머지 r이 0이 될 때 까지)
  51.         while (r != 0L) {
  52.             a = b;
  53.             b = r;
  54.             q = a / b;
  55.             r = a % b;
  56.         }
  57.         // 나머지가 0이면 그 때 나눈 수(제수) b가 최대공약수(GCD)이다.
  58.         gcd = b;
  59.         // 최대공약수(GCD)를 출력한다.
  60.         System.out.println("GCD(" + val1 + ", " + val2 + ") = " + gcd);
  61.     }
  62. }

컴파일> javac -d . TestWhileLoop.java

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

실행> java TestWhileLoop 200 300
GCD(200, 300) = 100

실행> java TestWhileLoop 50, -20
GCD(50, -20) = 10

실행> java TestWhileLoop -30, 0
GCD(-30, 0) = 30



Groovy를 사용하면 위의 소스를 (컴파일 과정 없이) 그대로 실행시킬 수 있다. 그대신 파일 확장자명을 groovy로 하여 저장하여야 한다. 아래는 파일명을 TestWhileLoop.groovy로 저장하여 실행시칸 경우이다.


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

실행> groovy TestWhileLoop.groovy -200 500
GCD(-200, 500) = 100

실행> groovy TestWhileLoop.groovy 108, 180
GCD(108, 180) = 36

실행> groovy TestArguments.groovy -30, 0
GCD(-30, 0) = 30




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

Posted by Scripter
,

소스 파일명: testIf.lua

  1. --[[
  2.    Filename: testIf.lua
  3.    Purpose:  Example using the conditional control structure syntax
  4.                  if .... else ...
  5.    Execute: lua testIf.lua [number]
  6. --]]
  7. -- 사용법을 보여주는 함수
  8. function printUsing()
  9.    print("Using: ruby testIf.rb [number]")
  10.    print("This determines whether the number is positive or not.")
  11. end
  12. -- 명령행 인자의 개수가 1이 아니면 사용법을 보여준다.
  13. if #arg ~= 1 then
  14.     printUsing()
  15.     os.exit(1)
  16. end
  17. -- 명령행 인자의 스트링을 가져와서
  18. -- 배정밀도 부동소수점수로 변환하여
  19. -- 변수 val에 저장한다.
  20. val = tonumber(arg[1])
  21. -- 변수 val에 저장된 값이 양수인지 음수인지 0인지를
  22. -- 판단하는 if...else... 조건문
  23. if (val > 0.0) then
  24.     print(val .. " is a positive number.")
  25. elseif (val < 0.0) then
  26.     print(val .. " is a negative number.")
  27. else
  28.     print(val .. " is zero.")
  29. end


실행> lua testIf.lua
Using: lua testIf.lua [number]
This determines whether the number is positive or not.

실행> lua testIf.lua 1.21
1.21 is a positive number.

실행> lua testIf.lua -1.21
-1.21 is a negative number.

실행> lua testIf.lua 0
0 is zero.




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

Posted by Scripter
,