'  Filename: TestWhileLoop.bas
'
'  Purpose:  Example using the while loop syntax
'                while ....
'
'  Compile: vbc TestWhileLoop.bas
'  Execute: TestWhileLoop -200 300

Imports System

Namespace MyTestApplication1

    Class TestWhileLoop

        ' 사용법 표시
        Shared Sub PrintUsage()
            Console.WriteLine("Using: TestWhileLoop [integer1] [integer2]")
            Console.WriteLine("This finds the greatest common divisor of the given two integers.")
        End Sub

        ' Java 언어의 main 메소드에 해당하는 Visual Basic의 Main
        Shared Sub Main(ByVal args() As String)
            If args.Length <> 2 Then
                PrintUsage()
                Environment.Exit(1)
            End If

            ' ---------------------------------------------
            ' 명령행 인자의 두 스트링을 가져와서
            ' 긴정수(Long) 즉 Int64 타입으로 변환하여
            ' 변수 val1과 val2에 저장한다.
            Dim val1 As Int64 = Convert.ToInt64(args(0))
            Dim val2 As Int64 = Convert.ToInt64(args(1))
            Dim a As Int64
            Dim b As Int64
            Dim q As Int64    ' q는 몫
            Dim r As Int64    ' r은 나머지
            Dim gcd As Int64

            ' a는 |val1|, |val2| 중 큰 값
            a = Math.Abs(val1)
            b = Math.Abs(val2)
            If a < b Then
                a = Math.Abs(val2)
                b = Math.Abs(val1)
            End If

            If b = 0 Then
                Console.WriteLine("GCD(" & val1 & ", " & val2 & ") = " & a)
                Environment.Exit(1)
            End If

            ' ------------------------------------
            ' Euclidean 알고리즘의 시작
            '
            ' a를 b로 나누어 몫은 q에, 나머지는 r에 저장
            q = Int(a / b)
            r = a Mod b

            ' --------------------------------------------------------
            ' Euclidean 알고리즘의 반복 (나머지 r이 0이 될 때 까지)
            While r <> 0L
                a = b
                b = r
                q = Int(a / b)
                r = a Mod b
            End While

            ' 나머지가 0이면 그 때 나눈 수(제수) b가 최대공약수(GCD)이다.
            gcd = b

            ' 최대공약수(GCD)를 출력한다.
            Console.WriteLine("GCD(" & val1 & ", " & val2 & ") = " & gcd)
        End Sub
    End Class
End Namespace




컴파일> vbc -d . TestWhileLoop.bas

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

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

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

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



크리에이티브 커먼즈 라이선스
Creative Commons License

 

Posted by Scripter
,