# Pembahasan enam latihan pertemuan 11 ----
lat_x <- c(12, 7, 19, 7, 25)
# 11A Sequential Boolean posisi pertama 7.
seq_boolean <- function(data, target) {
if (anyNA(data)) {
stop("Data tidak boleh mengandung NA")
}
i <- 1
ketemu <- FALSE
while (i <= length(data) && !ketemu) {
if (data[i] == target) {
ketemu <- TRUE
} else {
i <- i + 1
}
}
if (ketemu) return(i)
return(0)
}
print(seq_boolean(lat_x, 7))
## [1] 2
# 11B Tanpa Boolean target tidak ada dan larik kosong.
seq_tanpa_boolean <- function(data, target) {
if (anyNA(data)) {
stop("Data tidak boleh mengandung NA")
}
i <- 1
while (i <= length(data) && data[i] != target) {
i <- i + 1
}
if (i <= length(data)) return(i)
return(0)
}
print(seq_tanpa_boolean(lat_x, 8))
## [1] 0
print(seq_tanpa_boolean(numeric(), 8))
## [1] 0
# 11C Terurut berhenti ketika nilai melebihi target.
seq_terurut <- function(data, target) {
if (anyNA(data)) {
stop("Data tidak boleh mengandung NA")
}
i <- 1
while (i <= length(data) && data[i] < target) {
i <- i + 1
}
if (i <= length(data) && data[i] == target) {
return(i)
}
return(0)
}
print(seq_terurut(c(5, 10, 15, 20, 25), 12))
## [1] 0
# 11D Sentinel dan keutuhan data asli.
seq_sentinel <- function(data, target) {
if (anyNA(data)) {
stop("Data tidak boleh mengandung NA")
}
data_baru <- c(data, target)
i <- 1
while (data_baru[i] != target) {
i <- i + 1
}
if (i <= length(data)) return(i)
return(0)
}
lat_awal <- lat_x
print(seq_sentinel(lat_x, 99))
## [1] 0
print(identical(lat_x, lat_awal))
## [1] TRUE
# 11E Posisi pertama berbeda dengan semua posisi.
print(match(7, lat_x))
## [1] 2
print(which(lat_x == 7))
## [1] 2 4
# 11F Data tidak sah ditolak dan pesan ditangkap.
print(
tryCatch(
seq_boolean(c(12, NA, 19), 19),
error = function(e) conditionMessage(e)
)
)
## [1] "Data tidak boleh mengandung NA"