Golang { Syntax int := 2 }

Golang Syntax _2


5. 반복문

package main
import "fmt"

func main() {
    sum := 0
    for i := 0; i < 10; i++ {
        sum += i
    }
    fmt.Println(sum)
}
  • Go에선 반복엔 for만이 존재하며 while 은 사용하지 않는다.
  • for 반복문은 C와 유사하지만 소괄호는 사용하지 않는다. 하지만 실행문을 위해선 중괄호가 필요하다.
  • for sum < 2000 { ... }
    C처럼 전, 후처리문을 제외한 조건문만을 사용할 수 있다. (while과 유사하다.)
  • for { ... }
    무한 루프의 경우 아무 조건을 작성하지 않으면 된다.

 

6. 조건문

package main
import (
    "fmt"
    "math"
)

func sqrt(x float64) string {
    if x < 0 {
        return sqrt(-x) + "i"
    }
    return fmt.Sprint(math.Sqrt(x))
}

func main() {
    fmt.Println(sqrt(2), sqrt(-4))
}
  • for(반복문)과 유사하게 조건의 소괄호 ( ) 을 사용하지 않으며, 실행문을 위한 중괄호 { }가 필요하다.
    다만 C 와 다른점은 실행문이 한줄뿐이더라도 반드시 중괄호{ } 가 필요하다.
  • if v := math.Pow(x, n); v < lim{ ... }
    if의 조건문 앞에 짧은 문장을 실행 할 수 있다.
  • if의 짧은 명령문에서 선언된 변수는 else if, else구문에서도 사용할 수 있다.
    package main
    import (
        "fmt"
        "math"
    )
    
    func pow(x, n, lim float64) float64 {
        if v := math.Pow(x, n); v < lim {
            return v
        } else if v == lim {
            fmt.Printf("%g == %g\n", v, lim)
        } else {
            fmt.Printf("%g >= %g\n", v, lim)
        }
        // can't use v here, though
        return lim
    }
    
    func main() {
        fmt.Println(
            pow(3, 2, 10),
            pow(3, 3, 27),
        )
    }
    

7. 연습문제[src]

7-1 함수와 루프의 사용법을 익히는 간단한 연습으로, 제곱근 함수를 뉴턴의 방법(Newton’s method)을 이용하여 구현합니다.
여기서 뉴턴의 방법이란 초기값 z를 선택한 후에 다음의 공식을 이용하여 반복적으로 Sqrt(x) 함수의 근사값을 찾아가는 방법을 말합니다:
z = z - (z * z - x) / (2 * z)
처음에는 계산을 10번만 반복하여 여러분이 작성한 함수가 다양한 값들 (1, 2, 3, …)에 대하여 얼마나 정확한 값을 찾아내는지 확인합니다.

7-2 루프의 조건을 수정하여 값이 더이상 바뀌지 않을 때 (혹은 아주 작은 차이가 발생할 때) 루프를 종료하도록 합니다. 이렇게 하면 반복문의 실행 횟수가 어떻게 달라지는지 확인합니다. 결과값이 math.Sqrt함수의 값과 얼마나 비슷한가요?

package main
import (
    "fmt"
    "math"
)

func Sqrt(x float64) float64{
    var a, z, c float64 = 0, 1, 0
    for a = 1; a < 10; a++ {
        if math.Abs(z - c) > 1e-10 {
            c = z
            z = z - (z * z - x)/(2*z)
        } else {
            break
        }
    }
    return z
}

func main() {
    fmt.Println(Sqrt(2))    
}

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.