CodeBlanks Logo Icon CodeBlanks

Meydan okuma 2 - Veri yapısı

Struct ve slice ile bir rehber uygulaması yazarsın.

Meydan okuma: kitaplık

Struct, dilim ve append kullanarak küçük bir kitaplık yöneticisi yazacaksın. Kitaplik türü kitapları bir dilimde tutar; Ekle(baslik string, sayfa int) yeni kitap ekler, Uzunlar(min int) []string en az min sayfalık kitapların başlıklarını döndürür.

var k Kitaplik
k.Ekle("Dune", 412)
k.Ekle("Simyacı", 184)
k.Ekle("Vakıf", 255)
fmt.Println(k.Uzunlar(250))  // [Dune Vakıf]

Plan

1) type Kitap struct { Title string; Sayfa int }. 2) type Kitaplik struct { kitaplar []Kitap }. 3) func (k *Kitaplik) Ekle(...): k.kitaplar = append(k.kitaplar, Kitap{...}). 4) Uzunlar: boş bir []string oluştur, kitapları gez, koşulu sağlayanların başlığını ekle ve döndür.

Uygulama Kitaplık yöneticisi

Plana göre Kitap, Kitaplik, Ekle ve Uzunlar'ı yaz. Üç kitabı ekleyip k.Uzunlar(250) sonucunu yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Kitap struct {
    Title string
    Sayfa int
}

type Kitaplik struct {
    kitaplar []Kitap
}

func (k *Kitaplik) Ekle(title string, sayfa int) {
    k.kitaplar = append(k.kitaplar, Kitap{title, sayfa})
}

func (k *Kitaplik) Uzunlar(min int) []string {
    var sonuc []string
    for _, b := range k.kitaplar {
        if b.Sayfa >= min {
            sonuc = append(sonuc, b.Title)
        }
    }
    return sonuc
}

func main() {
    var k Kitaplik
    k.Ekle("Dune", 412)
    k.Ekle("Simyacı", 184)
    k.Ekle("Vakıf", 255)
    fmt.Println(k.Uzunlar(250))
}

Beklenen çıktı

[Dune Vakıf]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>Ekle</code> ve <code>Uzunlar</code> hangi alıcıları kullanmalıdır?

  • İkisi de değer alıcı
  • İkisi de fonksiyon olmalı
  • Fark etmez
  • Ekle *Kitaplik (değiştirir), Uzunlar Kitaplik ya da *Kitaplik (okur) Doğru cevap

Açıklama: Ekle dilimi büyüttüğü için işaretçi alıcı şarttır; tutarlılık için genellikle hepsi işaretçi alıcıyla yazılır.

2 Kitap ekle

Soru
func (k *Kitaplik) Ekle(title string, sayfa int) {
    k.kitaplar = ____(k.kitaplar, Kitap{title, sayfa})
}
Cevap
func (k *Kitaplik) Ekle(title string, sayfa int) {
    k.kitaplar = append(k.kitaplar, Kitap{title, sayfa})
}

Açıklama: append yeni kitabı dilime ekler; sonuç alana geri atanır.

3 Parça ve görev

Kavram Anlamı
Kitap Tek kayıt
Kitaplik Kayıt koleksiyonu
Ekle append ile büyütür
Uzunlar Filtreler

Başlangıç bölümündeki tüm dersler