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"