Tugas 2 Data Science Programming

Syntax and Control Flow Practicum

Isnaini Nur Hasanah (52240005)

February 23, 2025

Logo

1 Dataset

ID Nama Usia Gaji Posisi Kinerja
1 Bagas 25 5000 Staff Bagus
2 Joan 30 7000 Supervisor Sangat bagus
3 Alya 27 6500 Staff Rata-rata
4 Dwi 35 10000 Manajer Bagus
5 Nabil 40 12000 Direktur Sangat bagus

2 Conditional Statement

Tentukan tingkat bonus berdasarkan kinerja karyawan :

  • Sangat bagus => 20% gaji

  • Bagus => 10 % gaji

  • Rata-rata => 5% gaji

Tugas:

  • Tulis Program untuk menghitung bonus setiap karyawan

  • Menampilkan output dalam format ini : “Name: Bagas, Bonus: 500”

# Data karyawan
karyawan <- data.frame(
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Gaji = c(5000, 7000, 6500, 10000, 12000),
  Pertunjukan = c("Bagus", "Sangat bagus", "Rata-rata", "Bagus", "Sangat bagus")
)

# Aturan bonus berdasarkan kinerja
bonus_persen <- c("Sangat bagus" = 0.20, "Bagus" = 0.10, "Rata-rata" = 0.05)

# Menghitung bonus
karyawan$Bonus <- karyawan$Gaji * sapply(karyawan$Pertunjukan, function(x) bonus_persen[x])

# Menampilkan hasil
for (i in 1:nrow(karyawan)) {
  cat(sprintf("Name: %s, Bonus: %d\n", karyawan$Nama[i], karyawan$Bonus[i]))
}
## Name: Bagas, Bonus: 500
## Name: Joan, Bonus: 1400
## Name: Alya, Bonus: 325
## Name: Dwi, Bonus: 1000
## Name: Nabil, Bonus: 2400

3 Loops (For & While)

3.1 Gunakan for loop untuk membuat daftar karyawan dengan gaji lebih dari 6000.

Hasil yang diharapkan:

Name: Joan, Salary: 7000

Name: Alya, Salary: 6500

Name: Dwi, Salary: 10000

Name: Nabil, Salary: 12000

# Data karyawan
karyawan <- data.frame(
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Gaji = c(5000, 7000, 6500, 10000, 12000)
)

# Menampilkan karyawan dengan gaji lebih dari 6000
for (i in 1:nrow(karyawan)) {
  if (karyawan$Gaji[i] > 6000) {
    cat(sprintf("Name: %s, Salary: %d\n", karyawan$Nama[i], karyawan$Gaji[i]))
  }
}
## Name: Joan, Salary: 7000
## Name: Alya, Salary: 6500
## Name: Dwi, Salary: 10000
## Name: Nabil, Salary: 12000

3.2 Gunakan While Loop untuk menampilkan karyawan hingga “Manejer” ditemukan.

Hasil yang diharapkan:

Name: Bagas, Position: Staff

Name: Joan, Position: Supervisior

Name: Alya, Position: Staff

Name: Dwi, Position: Manager

# Data karyawan
karyawan <- data.frame(
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Posisi = c("Staf", "Supervisor", "Staf", "Manajer", "Direktur")
)

# Menampilkan karyawan hingga menemukan "Manajer"
i <- 1
while (i <= nrow(karyawan)) {
  cat(sprintf("Name: %s, Position: %s\n", karyawan$Nama[i], karyawan$Posisi[i]))
  if (karyawan$Posisi[i] == "Manajer") {
    break
  }
  i <- i + 1
}
## Name: Bagas, Position: Staf
## Name: Joan, Position: Supervisor
## Name: Alya, Position: Staf
## Name: Dwi, Position: Manajer

3.3 Gunakan break untuk menghentikan loop ketika karyawan dengan gaji diatas 10000 ditemukan.

Hasil yang diharapkan:

Name: Bagas, Salary: 5000

Name: Joan, Salary: 7000

Name: Alya, Salary: 6500

Name: Dwi, Salary: 10000

# Data karyawan
karyawan <- data.frame(
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Gaji = c(5000, 7000, 6500, 10000, 12000)
)

# Loop untuk menampilkan karyawan hingga gaji di atas 10000 ditemukan
for (i in 1:nrow(karyawan)) {
  if (karyawan$Gaji[i] > 10000) {
    break
  }
  cat(sprintf("Name: %s, Salary: %d\n", karyawan$Nama[i], karyawan$Gaji[i]))
}
## Name: Bagas, Salary: 5000
## Name: Joan, Salary: 7000
## Name: Alya, Salary: 6500
## Name: Dwi, Salary: 10000

3.4 Gunakan continue untuk melewati karyawan dengan kinerja rata-rata.

Hasil yang diharapkan:

Name: Bagas, Kinerja: Bagus

Name: Joan, Kinerja: Sangat bagus

Name: Dwi, Kinerja: Bagus

Name: Nabil, Kinerja: Sangat Bagus

(Alya dilewati karena kinerjanya “Rata-rata”)

# Data karyawan
karyawan <- data.frame(
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Kinerja = c("Bagus", "Sangat bagus", "Rata-rata", "Bagus", "Sangat bagus")
)

# List untuk menyimpan karyawan yang dilewati
dilewati <- c()

# Loop untuk menampilkan karyawan dengan kinerja baik dan menyimpan yang dilewati
for (i in 1:nrow(karyawan)) {
  if (karyawan$Kinerja[i] == "Rata-rata") {
    dilewati <- c(dilewati, sprintf("%s dilewati karena kinerjanya \"Rata-rata\"", karyawan$Nama[i]))
    next
  }
  cat(sprintf("Name: %s, Kinerja: %s\n", karyawan$Nama[i], karyawan$Kinerja[i]))
}
## Name: Bagas, Kinerja: Bagus
## Name: Joan, Kinerja: Sangat bagus
## Name: Dwi, Kinerja: Bagus
## Name: Nabil, Kinerja: Sangat bagus
# Menampilkan karyawan yang dilewati di bagian akhir
if (length(dilewati) > 0) {
  cat("\n")
  for (pesan in dilewati) {
    cat(sprintf("%s\n", pesan))
  }
}
## 
## Alya dilewati karena kinerjanya "Rata-rata"
LS0tDQp0aXRsZTogIlR1Z2FzIDIgRGF0YSBTY2llbmNlIFByb2dyYW1taW5nIg0Kc3VidGl0bGU6ICJTeW50YXggYW5kIENvbnRyb2wgRmxvdyBQcmFjdGljdW0iDQphdXRob3I6IA0KICAiSXNuYWluaSBOdXIgSGFzYW5haCAoNTIyNDAwMDUpIg0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6ZG93bmN1dGU6ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZSAoMSkuY3NzIg0KICAgIHBhcmFtczoNCiAgZWNobzogZmFsc2UNCmVkaXRvcl9vcHRpb25zOiANCiAgbWFya2Rvd246IA0KICAgIHdyYXA6IDcyDQotLS0NCg0KPGltZyBpZD0iSXNuYSIgc3JjPSJDOlxVc2Vyc1xBU1VTXERlc2t0b3BcU3RhdGlzdGlrYSBEYXNhclxJc25hLnBuZyIgYWx0PSJMb2dvIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ij4NCg0KIyAqKkRhdGFzZXQqKg0KDQp8IElEIHwgTmFtYSAgfCBVc2lhIHwgR2FqaSAgfCBQb3Npc2kgICB8IEtpbmVyamEgICB8DQp8LS0tLS0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfA0KfCAxICAgICAgICB8IEJhZ2FzIHwgMjUgICB8IDUwMDAgIHwgU3RhZmYgICAgIHwgQmFndXMgICAgICAgIHwNCnwgMiAgICAgICAgfCBKb2FuICB8IDMwICAgfCA3MDAwICB8IFN1cGVydmlzb3IgfCBTYW5nYXQgYmFndXMgfA0KfCAzICAgICAgICB8IEFseWEgIHwgMjcgICB8IDY1MDAgIHwgU3RhZmYgICAgIHwgUmF0YS1yYXRhICAgIHwNCnwgNCAgICAgICAgfCBEd2kgICB8IDM1ICAgfCAxMDAwMCB8IE1hbmFqZXIgIHwgQmFndXMgICAgICAgIHwNCnwgNSAgICAgICAgfCBOYWJpbCB8IDQwICAgfCAxMjAwMCB8IERpcmVrdHVyIHwgU2FuZ2F0IGJhZ3VzIHwNCg0KIyAqKkNvbmRpdGlvbmFsIFN0YXRlbWVudCoqDQoNClRlbnR1a2FuIHRpbmdrYXQgYm9udXMgYmVyZGFzYXJrYW4ga2luZXJqYSBrYXJ5YXdhbiA6IA0KDQotIFNhbmdhdCBiYWd1cyA9PiAyMCUgZ2FqaSANCg0KLSBCYWd1cyA9PiAxMCAlIGdhamkNCg0KLSBSYXRhLXJhdGEgPT4gNSUgZ2FqaQ0KDQoqKlR1Z2FzOioqDQoNCi0gVHVsaXMgUHJvZ3JhbSB1bnR1ayBtZW5naGl0dW5nIGJvbnVzIHNldGlhcCBrYXJ5YXdhbg0KDQotICBNZW5hbXBpbGthbiBvdXRwdXQgZGFsYW0gZm9ybWF0IGluaSA6DQoiTmFtZTogQmFnYXMsIEJvbnVzOiA1MDAiDQoNCmBgYHtyLCBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KIyBEYXRhIGthcnlhd2FuDQprYXJ5YXdhbiA8LSBkYXRhLmZyYW1lKA0KICBOYW1hID0gYygiQmFnYXMiLCAiSm9hbiIsICJBbHlhIiwgIkR3aSIsICJOYWJpbCIpLA0KICBHYWppID0gYyg1MDAwLCA3MDAwLCA2NTAwLCAxMDAwMCwgMTIwMDApLA0KICBQZXJ0dW5qdWthbiA9IGMoIkJhZ3VzIiwgIlNhbmdhdCBiYWd1cyIsICJSYXRhLXJhdGEiLCAiQmFndXMiLCAiU2FuZ2F0IGJhZ3VzIikNCikNCg0KIyBBdHVyYW4gYm9udXMgYmVyZGFzYXJrYW4ga2luZXJqYQ0KYm9udXNfcGVyc2VuIDwtIGMoIlNhbmdhdCBiYWd1cyIgPSAwLjIwLCAiQmFndXMiID0gMC4xMCwgIlJhdGEtcmF0YSIgPSAwLjA1KQ0KDQojIE1lbmdoaXR1bmcgYm9udXMNCmthcnlhd2FuJEJvbnVzIDwtIGthcnlhd2FuJEdhamkgKiBzYXBwbHkoa2FyeWF3YW4kUGVydHVuanVrYW4sIGZ1bmN0aW9uKHgpIGJvbnVzX3BlcnNlblt4XSkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0KZm9yIChpIGluIDE6bnJvdyhrYXJ5YXdhbikpIHsNCiAgY2F0KHNwcmludGYoIk5hbWU6ICVzLCBCb251czogJWRcbiIsIGthcnlhd2FuJE5hbWFbaV0sIGthcnlhd2FuJEJvbnVzW2ldKSkNCn0NCmBgYA0KDQojICoqTG9vcHMgKEZvciAmIFdoaWxlKSoqDQoNCiMjICoqR3VuYWthbiBmb3IgbG9vcCB1bnR1ayBtZW1idWF0IGRhZnRhciBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpIDYwMDAuKioNCg0KSGFzaWwgeWFuZyBkaWhhcmFwa2FuOg0KDQpOYW1lOiBKb2FuLCBTYWxhcnk6IDcwMDANCg0KTmFtZTogQWx5YSwgU2FsYXJ5OiA2NTAwDQoNCk5hbWU6IER3aSwgU2FsYXJ5OiAxMDAwMA0KDQpOYW1lOiBOYWJpbCwgU2FsYXJ5OiAxMjAwMA0KDQpgYGB7ciwgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUUsIGVjaG89VFJVRX0NCiMgRGF0YSBrYXJ5YXdhbg0Ka2FyeWF3YW4gPC0gZGF0YS5mcmFtZSgNCiAgTmFtYSA9IGMoIkJhZ2FzIiwgIkpvYW4iLCAiQWx5YSIsICJEd2kiLCAiTmFiaWwiKSwNCiAgR2FqaSA9IGMoNTAwMCwgNzAwMCwgNjUwMCwgMTAwMDAsIDEyMDAwKQ0KKQ0KDQojIE1lbmFtcGlsa2FuIGthcnlhd2FuIGRlbmdhbiBnYWppIGxlYmloIGRhcmkgNjAwMA0KZm9yIChpIGluIDE6bnJvdyhrYXJ5YXdhbikpIHsNCiAgaWYgKGthcnlhd2FuJEdhamlbaV0gPiA2MDAwKSB7DQogICAgY2F0KHNwcmludGYoIk5hbWU6ICVzLCBTYWxhcnk6ICVkXG4iLCBrYXJ5YXdhbiROYW1hW2ldLCBrYXJ5YXdhbiRHYWppW2ldKSkNCiAgfQ0KfQ0KYGBgDQoNCiMjICoqR3VuYWthbiBXaGlsZSBMb29wIHVudHVrIG1lbmFtcGlsa2FuIGthcnlhd2FuIGhpbmdnYSAiTWFuZWplciIgZGl0ZW11a2FuLioqDQoNCkhhc2lsIHlhbmcgZGloYXJhcGthbjoNCg0KTmFtZTogQmFnYXMsIFBvc2l0aW9uOiBTdGFmZg0KDQpOYW1lOiBKb2FuLCBQb3NpdGlvbjogU3VwZXJ2aXNpb3INCg0KTmFtZTogQWx5YSwgUG9zaXRpb246IFN0YWZmDQoNCk5hbWU6IER3aSwgUG9zaXRpb246IE1hbmFnZXINCg0KYGBge3IsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFLCBlY2hvPVRSVUV9DQojIERhdGEga2FyeWF3YW4NCmthcnlhd2FuIDwtIGRhdGEuZnJhbWUoDQogIE5hbWEgPSBjKCJCYWdhcyIsICJKb2FuIiwgIkFseWEiLCAiRHdpIiwgIk5hYmlsIiksDQogIFBvc2lzaSA9IGMoIlN0YWYiLCAiU3VwZXJ2aXNvciIsICJTdGFmIiwgIk1hbmFqZXIiLCAiRGlyZWt0dXIiKQ0KKQ0KDQojIE1lbmFtcGlsa2FuIGthcnlhd2FuIGhpbmdnYSBtZW5lbXVrYW4gIk1hbmFqZXIiDQppIDwtIDENCndoaWxlIChpIDw9IG5yb3coa2FyeWF3YW4pKSB7DQogIGNhdChzcHJpbnRmKCJOYW1lOiAlcywgUG9zaXRpb246ICVzXG4iLCBrYXJ5YXdhbiROYW1hW2ldLCBrYXJ5YXdhbiRQb3Npc2lbaV0pKQ0KICBpZiAoa2FyeWF3YW4kUG9zaXNpW2ldID09ICJNYW5hamVyIikgew0KICAgIGJyZWFrDQogIH0NCiAgaSA8LSBpICsgMQ0KfQ0KYGBgDQoNCiMjICoqR3VuYWthbiBicmVhayB1bnR1ayBtZW5naGVudGlrYW4gbG9vcCBrZXRpa2Ega2FyeWF3YW4gZGVuZ2FuIGdhamkgZGlhdGFzIDEwMDAwIGRpdGVtdWthbi4qKg0KDQpIYXNpbCB5YW5nIGRpaGFyYXBrYW46DQoNCk5hbWU6IEJhZ2FzLCBTYWxhcnk6IDUwMDANCg0KTmFtZTogSm9hbiwgU2FsYXJ5OiA3MDAwDQoNCk5hbWU6IEFseWEsIFNhbGFyeTogNjUwMA0KDQpOYW1lOiBEd2ksIFNhbGFyeTogMTAwMDANCg0KYGBge3IsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFLCBlY2hvPVRSVUV9DQojIERhdGEga2FyeWF3YW4NCmthcnlhd2FuIDwtIGRhdGEuZnJhbWUoDQogIE5hbWEgPSBjKCJCYWdhcyIsICJKb2FuIiwgIkFseWEiLCAiRHdpIiwgIk5hYmlsIiksDQogIEdhamkgPSBjKDUwMDAsIDcwMDAsIDY1MDAsIDEwMDAwLCAxMjAwMCkNCikNCg0KIyBMb29wIHVudHVrIG1lbmFtcGlsa2FuIGthcnlhd2FuIGhpbmdnYSBnYWppIGRpIGF0YXMgMTAwMDAgZGl0ZW11a2FuDQpmb3IgKGkgaW4gMTpucm93KGthcnlhd2FuKSkgew0KICBpZiAoa2FyeWF3YW4kR2FqaVtpXSA+IDEwMDAwKSB7DQogICAgYnJlYWsNCiAgfQ0KICBjYXQoc3ByaW50ZigiTmFtZTogJXMsIFNhbGFyeTogJWRcbiIsIGthcnlhd2FuJE5hbWFbaV0sIGthcnlhd2FuJEdhamlbaV0pKQ0KfQ0KYGBgDQoNCiMjICoqR3VuYWthbiBjb250aW51ZSB1bnR1ayBtZWxld2F0aSBrYXJ5YXdhbiBkZW5nYW4ga2luZXJqYSByYXRhLXJhdGEuKioNCg0KSGFzaWwgeWFuZyBkaWhhcmFwa2FuOg0KDQpOYW1lOiBCYWdhcywgS2luZXJqYTogQmFndXMNCg0KTmFtZTogSm9hbiwgS2luZXJqYTogU2FuZ2F0IGJhZ3VzDQoNCk5hbWU6IER3aSwgS2luZXJqYTogQmFndXMNCg0KTmFtZTogTmFiaWwsIEtpbmVyamE6IFNhbmdhdCBCYWd1cw0KDQooQWx5YSBkaWxld2F0aSBrYXJlbmEga2luZXJqYW55YSAiUmF0YS1yYXRhIikNCg0KYGBge3IsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFLCBlY2hvPVRSVUV9DQojIERhdGEga2FyeWF3YW4NCmthcnlhd2FuIDwtIGRhdGEuZnJhbWUoDQogIE5hbWEgPSBjKCJCYWdhcyIsICJKb2FuIiwgIkFseWEiLCAiRHdpIiwgIk5hYmlsIiksDQogIEtpbmVyamEgPSBjKCJCYWd1cyIsICJTYW5nYXQgYmFndXMiLCAiUmF0YS1yYXRhIiwgIkJhZ3VzIiwgIlNhbmdhdCBiYWd1cyIpDQopDQoNCiMgTGlzdCB1bnR1ayBtZW55aW1wYW4ga2FyeWF3YW4geWFuZyBkaWxld2F0aQ0KZGlsZXdhdGkgPC0gYygpDQoNCiMgTG9vcCB1bnR1ayBtZW5hbXBpbGthbiBrYXJ5YXdhbiBkZW5nYW4ga2luZXJqYSBiYWlrIGRhbiBtZW55aW1wYW4geWFuZyBkaWxld2F0aQ0KZm9yIChpIGluIDE6bnJvdyhrYXJ5YXdhbikpIHsNCiAgaWYgKGthcnlhd2FuJEtpbmVyamFbaV0gPT0gIlJhdGEtcmF0YSIpIHsNCiAgICBkaWxld2F0aSA8LSBjKGRpbGV3YXRpLCBzcHJpbnRmKCIlcyBkaWxld2F0aSBrYXJlbmEga2luZXJqYW55YSBcIlJhdGEtcmF0YVwiIiwga2FyeWF3YW4kTmFtYVtpXSkpDQogICAgbmV4dA0KICB9DQogIGNhdChzcHJpbnRmKCJOYW1lOiAlcywgS2luZXJqYTogJXNcbiIsIGthcnlhd2FuJE5hbWFbaV0sIGthcnlhd2FuJEtpbmVyamFbaV0pKQ0KfQ0KDQojIE1lbmFtcGlsa2FuIGthcnlhd2FuIHlhbmcgZGlsZXdhdGkgZGkgYmFnaWFuIGFraGlyDQppZiAobGVuZ3RoKGRpbGV3YXRpKSA+IDApIHsNCiAgY2F0KCJcbiIpDQogIGZvciAocGVzYW4gaW4gZGlsZXdhdGkpIHsNCiAgICBjYXQoc3ByaW50ZigiJXNcbiIsIHBlc2FuKSkNCiAgfQ0KfQ0KYGBg