# ==========================================
# 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
# ==========================================