Pembahasan enam latihan pertemuan 11 —-
11A Sequential Boolean posisi pertama 7.
lat_x <- c(12, 7, 19, 7, 25)
seq_boolean <- function(x, target) {
i <- 1L
n <- length(x)
ketemu <- FALSE
while (i <= n && !ketemu) {
if (x[i] == target) {
ketemu <- TRUE
} else {
i <- i + 1L
}
}
if (ketemu) return(i)
NA_integer_
}
print(seq_boolean(lat_x, 7))
## [1] 2
11B Tanpa Boolean target tidak ada dan larik kosong.
seq_tanpa_boolean <- function(x, target) {
for (i in seq_along(x)) {
if (x[i] == target) return(i)
}
NA_integer_
}
print(seq_tanpa_boolean(lat_x, 8))
## [1] NA
print(seq_tanpa_boolean(numeric(), 8))
## [1] NA
11C Terurut berhenti ketika nilai melebihi target.
seq_terurut <- function(x, target) {
i <- 1L
n <- length(x)
while (i <= n && x[i] < target) {
i <- i + 1L
}
if (i <= n && x[i] == target) return(i)
NA_integer_
}
print(seq_terurut(c(5, 10, 15, 20, 25), 12))
## [1] NA
11D Sentinel dan keutuhan data asli.
seq_sentinel <- function(x, target) {
n <- length(x)
kerja <- c(x, target)
i <- 1L
while (kerja[i] != target) {
i <- i + 1L
}
if (i <= n) return(i)
NA_integer_
}
lat_awal <- lat_x
print(seq_sentinel(lat_x, 99))
## [1] NA
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] "missing value where TRUE/FALSE needed"