# ==========================================
# LATIHAN 11
# SEQUENTIAL SEARCH
# ==========================================


# ------------------------------------------
# 11A. Sequential Boolean
# ------------------------------------------

cat("\n=== LATIHAN 11A ===\n")
## 
## === LATIHAN 11A ===
data_11A <- c(12, 7, 19, 7, 25)
target_11A <- 7

ketemu <- FALSE

for (i in seq_along(data_11A)) {
  if (data_11A[i] == target_11A) {
    ketemu <- TRUE
    break
  }
}

print(ketemu)
## [1] TRUE
# ------------------------------------------
# 11B. Sequential Tanpa Boolean
# ------------------------------------------

cat("\n=== LATIHAN 11B ===\n")
## 
## === LATIHAN 11B ===
sequential_tanpa_boolean <- function(data, target) {
  for (i in seq_along(data)) {
    if (data[i] == target) {
      return(i)
    }
  }
  return(NA_integer_)
}

data_11B <- c(12, 7, 19, 7, 25)

hasil_11B <- sequential_tanpa_boolean(data_11B, 8)
hasil_larik_kosong <- sequential_tanpa_boolean(numeric(0), 8)

print(hasil_11B)
## [1] NA
print(hasil_larik_kosong)
## [1] NA
# ------------------------------------------
# 11C. Sequential Terurut
# ------------------------------------------

cat("\n=== LATIHAN 11C ===\n")
## 
## === LATIHAN 11C ===
sequential_terurut <- function(data, target) {
  for (i in seq_along(data)) {
    if (data[i] == target) {
      return(i)
    }

    if (data[i] > target) {
      return(NA_integer_)
    }
  }
  return(NA_integer_)
}

data_11C <- c(5, 10, 15, 20, 25)

hasil_11C <- sequential_terurut(data_11C, 12)

print(hasil_11C)
## [1] NA
# ------------------------------------------
# 11D. Sentinel
# ------------------------------------------

cat("\n=== LATIHAN 11D ===\n")
## 
## === LATIHAN 11D ===
data_awal <- c(12, 7, 19, 7, 25)
target_11D <- 99

data_sentinel <- c(data_awal, target_11D)

posisi_sentinel <- NA_integer_

for (i in seq_along(data_sentinel)) {
  if (data_sentinel[i] == target_11D) {
    posisi_sentinel <- i
    break
  }
}

print(posisi_sentinel)
## [1] 6
cat("Data awal:\n")
## Data awal:
print(data_awal)
## [1] 12  7 19  7 25
cat("Data setelah ditambahkan sentinel:\n")
## Data setelah ditambahkan sentinel:
print(data_sentinel)
## [1] 12  7 19  7 25 99
cat("Apakah data awal tidak berubah?\n")
## Apakah data awal tidak berubah?
print(identical(data_awal, c(12, 7, 19, 7, 25)))
## [1] TRUE
# ------------------------------------------
# 11E. Match dan Which
# ------------------------------------------

cat("\n=== LATIHAN 11E ===\n")
## 
## === LATIHAN 11E ===
data_11E <- c(12, 7, 19, 7, 25)
target_11E <- 7

posisi_pertama <- match(target_11E, data_11E)
seluruh_posisi <- which(data_11E == target_11E)

cat("Posisi pertama:\n")
## Posisi pertama:
print(posisi_pertama)
## [1] 2
cat("Seluruh posisi:\n")
## Seluruh posisi:
print(seluruh_posisi)
## [1] 2 4
# ------------------------------------------
# 11F. Penanganan NA
# ------------------------------------------

cat("\n=== LATIHAN 11F ===\n")
## 
## === LATIHAN 11F ===
data_11F <- c(12, NA, 19)
target_11F <- 19

# Mencoba pencarian tanpa penanganan NA

tryCatch({
  for (i in seq_along(data_11F)) {
    if (data_11F[i] == target_11F) {
      print(i)
      break
    }
  }
}, error = function(e) {
  cat("Pesan galat:", conditionMessage(e), "\n")
})
## Pesan galat: missing value where TRUE/FALSE needed
# Pencarian dengan penanganan NA

posisi_NA <- NA_integer_

for (i in seq_along(data_11F)) {
  if (!is.na(data_11F[i]) && data_11F[i] == target_11F) {
    posisi_NA <- i
    break
  }
}

cat("Posisi setelah NA ditangani:\n")
## Posisi setelah NA ditangani:
print(posisi_NA)
## [1] 3
# ==========================================
# SELESAI
# ==========================================