#1a - Mendapaktan nilai eksponensial dengan pendekatan deret Maclaurin

exp_maclaurin <- function(x, n) {
  total_exp <- 0
  
  for (i in 0:n) {
    suku <- (x^i) / factorial(i)
    total_exp <- total_exp + suku
  }
  
  return(total_exp)
}

# Pengujian fungsi sesuai contoh (x = -1, n = 5)
x_1a <- -1
n_1a <- 5
hasil_1a <- exp_maclaurin(x_1a, n_1a)
print(hasil_1a)
## [1] 0.3666667
#1b - Mendapatkan nilai sin(x) dengan pendekatan deret Maclaurin

sin_maclaurin <- function(x) {
  total_sin <- 0
  n <- 0
  lanjut <- TRUE
  
  while (lanjut) {
    orde <- 2 * n + 1
    komponen <- ((-1)^n * (x^orde)) / factorial(orde)
    
    if (abs(komponen) < 1e-5) {
      lanjut <- FALSE
    } else {
      total_sin <- total_sin + komponen
      n <- n + 1
    }
  }
  
  return(total_sin)
}

# Pengujian fungsi sesuai contoh (x = pi/6)
x_1b <- pi / 6
hasil_1b <- sin_maclaurin(x_1b)
print(hasil_1b)
## [1] 0.5000021
#2 - Menghitung rata-rata bergerak suatu data

moving_average <- function(data, k) {
  n <- length(data)
  Mt <- rep(NA, n)
  
  for (t in k:n) {
    jumlah <- 0
    
    for (i in (t-k+1):t) {
      jumlah <- jumlah + data[i]
    }
    Mt[t] <- jumlah / k
  }
  
  return(Mt)
}

#Pengujian fungsi sesuai contoh data
data <- c(4.1, 4.9, 6.2, 6.9, 6.8, 4.4, 5.7, 5.8, 6.9, 4.7, 6.0, 4.9)
hasil_2 <- moving_average(data, 3)

data.frame(
  t = 1:length(data),
  Data = data,
  Mt_3 = round(hasil_2, 2)
)
##     t Data Mt_3
## 1   1  4.1   NA
## 2   2  4.9   NA
## 3   3  6.2 5.07
## 4   4  6.9 6.00
## 5   5  6.8 6.63
## 6   6  4.4 6.03
## 7   7  5.7 5.63
## 8   8  5.8 5.30
## 9   9  6.9 6.13
## 10 10  4.7 5.80
## 11 11  6.0 5.87
## 12 12  4.9 5.20