title: “Pembahasan Pertemuan 11” author: “Nining Rahmayanti” date: “2026-11-06” output: html_document # PEMBAHASAN PERTEMUAN 11

Data Latihan

lat_x <- c(12, 7, 19, 7, 25)
print(lat_x)
## [1] 12  7 19  7 25

Latihan 11A – Sequential Boolean

seq_boolean <- function(x, target) {
  if (anyNA(x) || length(target) != 1 || is.na(target)) {
    stop("Input tidak boleh mengandung NA")
  }

  ketemu <- FALSE
  posisi <- NA

  for (i in seq_along(x)) {
    if (x[i] == target) {
      ketemu <- TRUE
      posisi <- i
      break
    }
  }

  return(posisi)
}

print(seq_boolean(lat_x, 7))
## [1] 2

Hasil: Posisi 2. Variabel ketemu berubah menjadi TRUE ketika elemen kedua diperiksa.

Latihan 11B – Sequential Tanpa Boolean

seq_tanpa_boolean <- function(x, target) {
  if (anyNA(x) || length(target) != 1 || is.na(target)) {
    stop("Input tidak boleh mengandung NA")
  }

  for (i in seq_along(x)) {
    if (x[i] == target) {
      return(i)
    }
  }

  return(NA)
}

print(seq_tanpa_boolean(lat_x, 8))
## [1] NA
print(seq_tanpa_boolean(numeric(), 8))
## [1] NA

Hasil: Keduanya menghasilkan NA karena target tidak ditemukan dan larik kosong tidak memiliki elemen.

Latihan 11C – Sequential Terurut

seq_terurut <- function(x, target) {
  if (anyNA(x) || is.unsorted(x)) {
    stop("Data harus terurut menaik")
  }

  for (i in seq_along(x)) {
    if (x[i] == target) {
      return(i)
    }

    if (x[i] > target) {
      break
    }
  }

  return(NA)
}

print(seq_terurut(c(5, 10, 15, 20, 25), 12))
## [1] NA

Hasil: NA. Pencarian berhenti ketika menemukan angka 15 karena lebih besar dari target 12.

Latihan 11D – Sentinel

seq_sentinel <- function(x, target) {
  if (anyNA(x) || length(target) != 1 || is.na(target)) {
    stop("Input tidak boleh mengandung NA")
  }

  data_asli <- x
  x_tambah <- c(x, target)

  for (i in seq_along(x_tambah)) {
    if (x_tambah[i] == target) {
      if (i <= length(data_asli)) {
        return(i)
      } else {
        return(NA)
      }
    }
  }
}

lat_awal <- lat_x

print(seq_sentinel(lat_x, 99))
## [1] NA
print(identical(lat_x, lat_awal))
## [1] TRUE

Hasil: NA dan TRUE. Sentinel berada pada posisi 6 dan data asli tidak berubah.

Latihan 11E – Match dan Which

print(match(7, lat_x))
## [1] 2
print(which(lat_x == 7))
## [1] 2 4

Hasil: Match menghasilkan 2, sedangkan which menghasilkan posisi 2 dan 4.

Latihan 11F – Penanganan NA

print(
  tryCatch(
    seq_boolean(c(12, NA, 19), 19),
    error = function(e) conditionMessage(e)
  )
)
## [1] "Input tidak boleh mengandung NA"

Hasil: Fungsi menolak data yang mengandung NA karena tidak memenuhi ketentuan masukan.