# 1. Nilai UTS pada contoh 1.2
# Data nilai UTS
nilai <- c(40, 96, 57, 52, 84, 72, 60,
           85, 86, 73, 81, 78, 89, 54, 62)

n <- length(nilai)

# Menghitung jumlah
total <- 0
for (i in 1:n) {
  total <- total + nilai[i]
}

# Menghitung rata-rata
rata <- total / n

# Menghitung jumlah kuadrat selisih
jumlah_kuadrat <- 0
for (i in 1:n) {
  jumlah_kuadrat <- jumlah_kuadrat +
    (nilai[i] - rata)^2
}

# Menghitung simpangan baku sampel
sb <- sqrt(jumlah_kuadrat / (n - 1))

cat("Jumlah nilai       :", total, "\n")
## Jumlah nilai       : 1069
cat("Rata-rata           :", round(rata, 2), "\n")
## Rata-rata           : 71.27
cat("Simpangan baku      :", round(sb, 2), "\n")
## Simpangan baku      : 16.26
#2. Modifikasi cariIdx
CariIdxMaks <- function(A) {
  maks <- 1

  for (i in 2:length(A)) {
    if (A[i] >= A[maks]) {
      maks <- i
    }
  }

  return(maks)
}

data <- c(10, 20, 30, 20, 30)

hasil <- CariIdxMaks(data)

cat("Indeks maksimum terakhir =", hasil, "\n")
## Indeks maksimum terakhir = 5
cat("Nilai maksimum =", data[hasil], "\n")
## Nilai maksimum = 30
# 3. Membuat prosedur MaksMin sekaligus
maks_min_sekaligus <- function(L) {

  maks <- L[1]
  minimum <- L[1]

  for (i in 2:length(L)) {

    if (L[i] > maks) {
      maks <- L[i]
    }

    if (L[i] < minimum) {
      minimum <- L[i]
    }
  }

  return(c(maksimum = maks, minimum = minimum))
}

# Contoh
L <- c(25, 10, 40, 5, 30, 15)

hasil <- maks_min_sekaligus(L)

print(hasil)
## maksimum  minimum 
##       40        5
# 4. Mencari hari dengan kenaikan harian terbesar DAX
# Memanggil data saham
data("EuStockMarkets")

# Mengambil kolom DAX
DAX <- EuStockMarkets[, "DAX"]

n <- length(DAX)

# Inisialisasi kenaikan terbesar
maks_naik <- DAX[2] - DAX[1]
hari <- 2

# Traversal untuk mencari kenaikan terbesar
for (i in 3:n) {

  kenaikan <- DAX[i] - DAX[i - 1]

  if (kenaikan > maks_naik) {
    maks_naik <- kenaikan
    hari <- i
  }
}

cat("Kenaikan harian terbesar DAX :", maks_naik, "\n")
## Kenaikan harian terbesar DAX : 160.97
cat("Terjadi pada hari ke-        :", hari, "\n")
## Terjadi pada hari ke-        : 1653
# 5. Menghitung jumlah dan rata-rata perkolom matriks penjualan
# Matriks penjualan 3 toko x 4 minggu
M <- matrix(c(
  10, 45, 34, 43,
  63, 69, 22, 13,
  13, 82, 23, 60
), nrow = 3, byrow = TRUE)

nbar <- nrow(M)
nkol <- ncol(M)

jumlah <- numeric(nkol)
rata <- numeric(nkol)

# Menghitung jumlah dan rata-rata setiap kolom
for (j in 1:nkol) {

  for (i in 1:nbar) {
    jumlah[j] <- jumlah[j] + M[i, j]
  }

  rata[j] <- jumlah[j] / nbar
}

# Mencari minggu dengan penjualan tertinggi
maks <- jumlah[1]
minggu_maks <- 1

for (j in 2:nkol) {
  if (jumlah[j] > maks) {
    maks <- jumlah[j]
    minggu_maks <- j
  }
}

cat("Jumlah per minggu :", jumlah, "\n")
## Jumlah per minggu : 86 196 79 116
cat("Rata-rata per minggu :", rata, "\n")
## Rata-rata per minggu : 28.66667 65.33333 26.33333 38.66667
cat("Penjualan tertinggi :", maks, "\n")
## Penjualan tertinggi : 196
cat("Minggu paling tinggi :", minggu_maks, "\n")
## Minggu paling tinggi : 2
# 6. Membuktikan bahwa [[0]*3]*3 menghasilkan baris yang saling terkait di Python
# Membuat matriks 3 x 3
M <- matrix(0, nrow = 3, ncol = 3)

cat("Matriks awal:\n")
## Matriks awal:
print(M)
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
## [3,]    0    0    0
# Mengubah satu elemen
M[1, 1] <- 99

cat("\nMatriks setelah diubah:\n")
## 
## Matriks setelah diubah:
print(M)
##      [,1] [,2] [,3]
## [1,]   99    0    0
## [2,]    0    0    0
## [3,]    0    0    0