Menu
Coddy logo textTech

İç İçe Döngülerden Çıkma

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 2 / 68.

İç içe döngülerle çalışırken, normal bir break ifadesi yalnızca en içteki döngüden çıkar. Ancak Go, dış döngülerden doğrudan çıkmanıza olanak tanıyan etiketler (labels) sağlar; bu da size karmaşık döngü yapıları üzerinde hassas kontrol sağlar.

Etiket, bir döngünün önüne yerleştirdiğiniz, ardından iki nokta üst üste gelen bir tanımlayıcıdır. Ardından, iç içe geçmiş döngülerin içinden bile olsa, o belirli döngüden çıkmak için break ve ardından etiket adını kullanabilirsiniz.

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 1 {
            break outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
}

Bu örnekte, i == 1 && j == 1 koşulu sağlandığında, break outer hem iç hem de dış döngüden anında çıkar. Bu, özellikle aradığınız şeyi bulduğunuzda aramayı tamamen durdurmak istediğiniz 2D veri yapıları içinde arama yaparken yararlıdır.

challenge icon

Görev

Kolay

Bu meydan okumada, 2B bir ızgarada arama yaparken iç içe döngülerden çıkmak için etiketli break ifadelerini kullanma pratiği yapacaksın. Izgarada belirli bir hedef sayıyı bulman ve bulduğun anda aramayı hemen durdurman gerekiyor.

İki girdi alacaksın:

  • "rows,cols" biçiminde ızgaranın boyutlarını temsil eden bir dize (örneğin, "3,4")
  • Aranacak hedef sayıyı temsil eden bir dize (örneğin, "7")

Aşağıdaki 2B sayı ızgarası sana sağlanmıştır:

grid := [][]int{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
}

Görevin:

  1. Kaç satır ve sütunda arama yapılacağını belirlemek için ilk girdiden boyutları ayrıştırmak
  2. İkinci girdiden hedef sayıyı ayrıştırmak
  3. Izgarada arama yapmak için etiketli bir break içeren iç içe döngüler kullanmak
  4. Hedef sayıyı bulduğunda "Found [target] at position ([row], [col])" yazdırmak ve etiketli break'i kullanarak her iki döngüden de hemen çıkmak
  5. Hedefi bulamadan aramayı tamamlarsan "Target [target] not found" yazdırmak

Konum, 0 tabanlı indeksleme kullanılarak bildirilmelidir (ilk satır 0, ilk sütun 0).

GEREKLİ ÇIKTI BİÇİMİ: [Çevrilmiş içeriğin]

Kendin dene

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    // Girdiyi oku
    var dimensions string
    var targetStr string
    fmt.Scanln(&dimensions)
    fmt.Scanln(&targetStr)
    
    // Boyutları ayrıştır
    dimParts := strings.Split(dimensions, ",")
    rows, _ := strconv.Atoi(dimParts[0])
    cols, _ := strconv.Atoi(dimParts[1])
    
    // Hedef sayıyı ayrıştır
    target, _ := strconv.Atoi(targetStr)
    
    // Önceden tanımlanmış ızgara
    grid := [][]int{
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
    }
    
    // TODO: Kodunuzu aşağıya yazın
    // Hedefi aramak için etiketli break (labeled break) ile iç içe döngüler kullanın
    
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi