Ödev - Chapter 6

`Introducing Go` kitabından bugün öğrendiklerim

Chapter 6’nın ödevi.

sum N tane sayı alan (slice) bir fonksiyon. Acaba function signature’ı nasıldır?

func sum(xs []int) int

Bir fonksiyon yazın, integer alsın. 2’ye böldüğünde kalana baksın. Örneğin; half(1) bize (0, false) dönsün, half(2) ise (1, true)

package main

import "fmt"

func half(num int) (int, bool) {
    return num / 2, num%2 == 0
}

func main() {
    fmt.Println(half(1))
    fmt.Println(half(2))
}

Variadic parametre alan bir fonksiyon olsun. Geçilen sayılardan en büyüğünü bulsun. find_biggest(1, 8, 2, 7) bize 8 dönsün.

package main

import "fmt"

func find_biggest(numbers ...int) int {
    var max int
    for i, x := range numbers {
        if i == 0 || x > max {
            max = x
        }
    }
    return max
}

func main() {
    fmt.Println(find_biggest(1, 8, 2, 7))
}

çiftSayıÜreteci() gibi tekSayıÜreteci yapın:

package main

import "fmt"

func tekSayıÜreteci() func() uint {
    i := uint(1)
    return func() (ret uint) {
        ret = i
        i += 2
        return
    }
}

func main() {
    sonrakiTekSayı := tekSayıÜreteci()
    fmt.Println(sonrakiTekSayı()) // 1
    fmt.Println(sonrakiTekSayı()) // 3
    fmt.Println(sonrakiTekSayı()) // 5
}

Fibonacci hesaplayan fonksiyon :)

package main

import "fmt"

func fibonacci(n int) int {
    switch n {
    case 0:
        return 0
    case 1:
        return 1
    default:
        return fibonacci(n-1) + fibonacci(n-2)
    }
}

func main() {
    fmt.Println(fibonacci(1))
    fmt.Println(fibonacci(2))
    fmt.Println(fibonacci(3))
    fmt.Println(fibonacci(4))
    fmt.Println(fibonacci(5))
}

Değişkenin hafıza adresini nasıl alırız?

& ile… y = &x


Pointer’a nasıl değer atanır?

* ile… *x = 5


Yeni pointer nasıl oluşturulur?

new ile… x = new(int)


Aşağıdaki programda x’in değeri kaç olur?

package main

import "fmt"

func square(x *float64) {
    *x = *x * *x
}

func main() {
    x := 1.5
    square(&x)
}

2.25


İki integer’i birbirleriyle değişen bir program yazın. x := 1, y := 2 durumunda swap(&x, &y) bize x=2 ve y=1 verecek:

package main

import "fmt"

func swap(x, y *int) {
    *x, *y = *y, *x
}

func main() {
    x := 1
    y := 2
    swap(&x, &y)
    fmt.Println(x, y)
}