Kasus 2 tingkat sedang
Deskripsi masalah:
Dalam pelaksanaan perkuliahan mata kuliah Algoritma dan Pemrograman, dosen melakukan penilaian mahasiswa berdasarkan ketentuan yang tercantum dalam Rencana Pembelajaran Semester (RPS). Penilaian terdiri dari tiga komponen utama, yaitu Case Method, Ujian Tengah Semester (UTS), dan Ujian Akhir Semester (UAS), dengan bobot masing-masing sebesar 50%, 25%, dan 25%. Seluruh nilai mahasiswa dimasukkan ke dalam sistem dalam bentuk vektor untuk dihitung secara otomatis, kemudian nilai akhir yang diperoleh digunakan untuk menentukan kategori nilai huruf A, B, C, D, atau E sesuai dengan rentang nilai yang telah ditetapkan. Kategori nilai: A jika nilai akhir ≥ 85 B jika nilai akhir ≥ 71 C jika nilai akhir ≥ 61 D jika nilai akhir ≥ 51 E jika nilai akhir < 51
#Fungsi dalam R
nilai_mahasiswa <- function(nama, case_method, uts, uas){
n <- length(nama)
nilai_akhir <- numeric(n)
kategori_nilai <- character(n)
for(i in 1:n){
nilai_akhir[i] <- 0.5*case_method[i] + 0.25*uts[i] + 0.25*uas[i]
if(nilai_akhir[i] >= 85){
kategori_nilai[i] <- "A"
} else if(nilai_akhir[i] >= 71){
kategori_nilai[i] <- "B"
} else if(nilai_akhir[i] >= 61){
kategori_nilai[i] <- "C"
} else if(nilai_akhir[i] >= 51){
kategori_nilai[i] <- "D"
} else {
kategori_nilai[i] <- "E"
}
}
return(data.frame(
Nama = nama,
Kategori_Nilai = kategori_nilai,
Nilai_akhir = nilai_akhir
))
}
#Contoh Pemanggilan Fungsi
nilai_mahasiswa(
nama = c("Fadhil", "Mutiara", "Nadhif"),
case_method = c(80, 70, 60),
uts = c(75, 65, 55),
uas = c(85, 70, 50)
)
## Nama Kategori_Nilai Nilai_akhir
## 1 Fadhil B 80.00
## 2 Mutiara C 68.75
## 3 Nadhif D 56.25
# a. Membuat dataframe
set.seed(123)
data_mahasiswa <- data.frame(
Nama = c("Andreas", "Rony", "Wijaya", "Ronaldo", "Messi",
"Neymar", "Mbappe", "Halland", "Diallo", "Hisyam Fadhil"),
NIM = c("M0124001", "M0124002", "M0124003", "M0124004", "M0124005",
"M0124006", "M0124007", "M0124008", "M0124009", "M0725095"),
Nilai_UTS = c(85, 60, 90, 55, 75, 72, 70, 80, 65, 90),
Nilai_Tugas = c(78, 70, 95, 60, 82, 80, 60, 90, 55, 95),
Nilai_UAS = sample(60:90, 10, replace = TRUE)
)
data_mahasiswa
## Nama NIM Nilai_UTS Nilai_Tugas Nilai_UAS
## 1 Andreas M0124001 85 78 90
## 2 Rony M0124002 60 70 74
## 3 Wijaya M0124003 90 95 78
## 4 Ronaldo M0124004 55 60 73
## 5 Messi M0124005 75 82 62
## 6 Neymar M0124006 72 80 69
## 7 Mbappe M0124007 70 60 77
## 8 Halland M0124008 80 90 81
## 9 Diallo M0124009 65 55 70
## 10 Hisyam Fadhil M0725095 90 95 64
# b. Menghitung nilai akhir
data_mahasiswa$Nilai_Akhir <-
0.30 * data_mahasiswa$Nilai_UTS +
0.30 * data_mahasiswa$Nilai_Tugas +
0.40 * data_mahasiswa$Nilai_UAS
data_mahasiswa
## Nama NIM Nilai_UTS Nilai_Tugas Nilai_UAS Nilai_Akhir
## 1 Andreas M0124001 85 78 90 84.9
## 2 Rony M0124002 60 70 74 68.6
## 3 Wijaya M0124003 90 95 78 86.7
## 4 Ronaldo M0124004 55 60 73 63.7
## 5 Messi M0124005 75 82 62 71.9
## 6 Neymar M0124006 72 80 69 73.2
## 7 Mbappe M0124007 70 60 77 69.8
## 8 Halland M0124008 80 90 81 83.4
## 9 Diallo M0124009 65 55 70 64.0
## 10 Hisyam Fadhil M0725095 90 95 64 81.1
# c. Fungsi konversi nilai ke huruf
konversi_nilai <- function(nilai) {
if (nilai >= 85) {
c(4.00, "A")
} else if (nilai >= 80) {
c(3.70, "A-")
} else if (nilai >= 75) {
c(3.30, "B+")
} else if (nilai >= 70) {
c(3.00, "B")
} else if (nilai >= 65) {
c(2.70, "C+")
} else if (nilai >= 60) {
c(2.00, "C")
} else if (nilai >= 55) {
c(1.00, "D")
} else {
c(0.00, "E")
}
}
# d. Output
data_mahasiswa$Angka <- NA
data_mahasiswa$Huruf <- NA
# Konversi nilai akhir
for (i in 1:nrow(data_mahasiswa)) {
hasil <- konversi_nilai(data_mahasiswa$Nilai_Akhir[i])
data_mahasiswa$Angka[i] <- as.numeric(hasil[1])
data_mahasiswa$Huruf[i] <- hasil[2]
}
# Dataframe lengkap
df_output <- data.frame(
Nama = data_mahasiswa$Nama,
NIM = data_mahasiswa$NIM,
Nilai_UTS = data_mahasiswa$Nilai_UTS,
Nilai_Tugas = data_mahasiswa$Nilai_Tugas,
Nilai_UAS = data_mahasiswa$Nilai_UAS,
Nilai_Akhir = data_mahasiswa$Nilai_Akhir,
Konversi_Huruf = data_mahasiswa$Huruf
)
jumlah_nilai <- table(df_output$Konversi_Huruf)
jumlah_lulus <- sum(df_output$Konversi_Huruf %in% c("A","A-","B+","B","C+","C"))
jumlah_tidak_lulus <- sum(df_output$Konversi_Huruf %in% c("D","E"))
# Output
output_akhir <- list(
Dataframe_Nilai = df_output,
Jumlah_Nilai_Huruf = jumlah_nilai,
Jumlah_Lulus = jumlah_lulus,
Jumlah_Tidak_Lulus = jumlah_tidak_lulus
)
output_akhir
## $Dataframe_Nilai
## Nama NIM Nilai_UTS Nilai_Tugas Nilai_UAS Nilai_Akhir
## 1 Andreas M0124001 85 78 90 84.9
## 2 Rony M0124002 60 70 74 68.6
## 3 Wijaya M0124003 90 95 78 86.7
## 4 Ronaldo M0124004 55 60 73 63.7
## 5 Messi M0124005 75 82 62 71.9
## 6 Neymar M0124006 72 80 69 73.2
## 7 Mbappe M0124007 70 60 77 69.8
## 8 Halland M0124008 80 90 81 83.4
## 9 Diallo M0124009 65 55 70 64.0
## 10 Hisyam Fadhil M0725095 90 95 64 81.1
## Konversi_Huruf
## 1 A-
## 2 C+
## 3 A
## 4 C
## 5 B
## 6 B
## 7 C+
## 8 A-
## 9 C
## 10 A-
##
## $Jumlah_Nilai_Huruf
##
## A A- B C C+
## 1 3 2 2 2
##
## $Jumlah_Lulus
## [1] 10
##
## $Jumlah_Tidak_Lulus
## [1] 0
# e. Menampilkan baris ke-10
print(df_output[10, ])
## Nama NIM Nilai_UTS Nilai_Tugas Nilai_UAS Nilai_Akhir
## 10 Hisyam Fadhil M0725095 90 95 64 81.1
## Konversi_Huruf
## 10 A-