2.5.1 Objective

# Membuat dataset sebagai data frame
employees <- data.frame(
  ID = c(1, 2, 3, 4, 5),
  Name = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Age = c(25, 30, 27, 35, 40),
  Salary = c(5000, 7000, 6500, 10000, 12000),
  Position = c("Staff", "Supervisor", "Staff", "Manager", "Director"),
  Performance = c("Good", "Very Good", "Average", "Good", "Very Good")
)

# 1. Menggunakan conditional statements untuk menentukan kategori gaji
categorize_salary <- function(salary) {
  if (salary < 6000) {
    return("Low")
  } else if (salary >= 6000 & salary < 10000) {
    return("Medium")
  } else {
    return("High")
  }
}

# Menambahkan kategori gaji ke dataset
employees$Salary_Category <- sapply(employees$Salary, categorize_salary)

# Menampilkan dataset dengan kategori gaji
print("Dataset dengan kategori gaji:")
## [1] "Dataset dengan kategori gaji:"
print(employees)
##   ID  Name Age Salary   Position Performance Salary_Category
## 1  1 Bagas  25   5000      Staff        Good             Low
## 2  2  Joan  30   7000 Supervisor   Very Good          Medium
## 3  3  Alya  27   6500      Staff     Average          Medium
## 4  4   Dwi  35  10000    Manager        Good            High
## 5  5 Nabil  40  12000   Director   Very Good            High
cat("\n", strrep("=", 40), "\n\n")
## 
##  ========================================
# 2. Menggunakan for loop untuk menampilkan karyawan dengan gaji lebih dari 6000
cat("Employees with salary > 6000:\n\n")
## Employees with salary > 6000:
for (i in 1:nrow(employees)) {
  if (employees$Salary[i] > 6000) {
    cat(employees$Name[i], ", Salary:", employees$Salary[i], "\n")
  }
}
## Joan , Salary: 7000 
## Alya , Salary: 6500 
## Dwi , Salary: 10000 
## Nabil , Salary: 12000
cat("\n", strrep("=", 40), "\n\n")
## 
##  ========================================
# 3. Menggunakan while loop untuk menampilkan karyawan sampai menemukan 'Manager'
cat("Employees until a 'Manager' is found:\n\n")
## Employees until a 'Manager' is found:
i <- 1
while (i <= nrow(employees)) {
  cat(employees$Name[i], ", Position:", employees$Position[i], "\n")
  if (employees$Position[i] == "Manager") {
    cat("(Stopped here)\n")
    break
  }
  i <- i + 1
}
## Bagas , Position: Staff 
## Joan , Position: Supervisor 
## Alya , Position: Staff 
## Dwi , Position: Manager 
## (Stopped here)
cat("\n", strrep("=", 40), "\n\n")
## 
##  ========================================
# 4. Menggunakan break untuk menghentikan loop saat menemukan gaji > 10,000
cat("Employees until salary > 10,000 is found:\n\n")
## Employees until salary > 10,000 is found:
for (i in 1:nrow(employees)) {
  if (employees$Salary[i] > 10000) {
    cat("(Stopped because", employees$Name[i], "has a salary above 10,000)\n")
    break
  }
  cat("Name:", employees$Name[i], ", Salary:", employees$Salary[i], "\n")
}
## Name: Bagas , Salary: 5000 
## Name: Joan , Salary: 7000 
## Name: Alya , Salary: 6500 
## Name: Dwi , Salary: 10000 
## (Stopped because Nabil has a salary above 10,000)
cat("\n", strrep("=", 40), "\n\n")
## 
##  ========================================
# 5. Menggunakan continue untuk melewati karyawan dengan performa "Average"
cat("Employees skipping 'Average' performance:\n\n")
## Employees skipping 'Average' performance:
for (i in 1:nrow(employees)) {
  if (employees$Performance[i] == "Average") {
    next  # Lewati karyawan dengan performa "Average"
  }
  cat("Name:", employees$Name[i], ", Performance:", employees$Performance[i], "\n")
}
## Name: Bagas , Performance: Good 
## Name: Joan , Performance: Very Good 
## Name: Dwi , Performance: Good 
## Name: Nabil , Performance: Very Good
# 2.5.2 Conditional Statements

# Membuat dataset
employees <- data.frame(
  Name = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Salary = c(5000, 7000, 6500, 10000, 12000),
  Performance = c("Good", "Very Good", "Average", "Good", "Very Good")
)

# Fungsi untuk menghitung bonus
calculate_bonus <- function(salary, performance) {
  if (performance == "Very Good") {
    return(salary * 0.20)
  } else if (performance == "Good") {
    return(salary * 0.10)
  } else if (performance == "Average") {
    return(salary * 0.05)
  } else {
    return(0)
  }
}

# Menghitung dan menampilkan bonus untuk setiap karyawan
cat("2.5.2 Conditional Statements - Bonus Calculation\n\n")
## 2.5.2 Conditional Statements - Bonus Calculation
for (i in 1:nrow(employees)) {
  bonus <- calculate_bonus(employees$Salary[i], employees$Performance[i])
  cat("Name:", employees$Name[i], ", Bonus:", as.integer(bonus), "\n")
}
## Name: Bagas , Bonus: 500 
## Name: Joan , Bonus: 1400 
## Name: Alya , Bonus: 325 
## Name: Dwi , Bonus: 1000 
## Name: Nabil , Bonus: 2400
# 2.5.3 Loops (For & While)

# Membuat dataset karyawan
employees <- data.frame(
  Name = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Salary = c(5000, 7000, 6500, 10000, 12000),
  Position = c("Staff", "Supervisor", "Staff", "Manager", "Director"),
  Performance = c("Good", "Very Good", "Average", "Good", "Very Good")
)

# 1. Menggunakan for loop untuk menampilkan karyawan dengan gaji lebih dari 6000
cat("2.5.3.1 Employees with salary > 6000:\n\n")
## 2.5.3.1 Employees with salary > 6000:
for (i in 1:nrow(employees)) {
  if (employees$Salary[i] > 6000) {
    cat(employees$Name[i], ", Salary:", employees$Salary[i], "\n")
  }
}
## Joan , Salary: 7000 
## Alya , Salary: 6500 
## Dwi , Salary: 10000 
## Nabil , Salary: 12000
cat("\n", strrep("=", 40), "\n\n")
## 
##  ========================================
# 2. Menggunakan while loop untuk menampilkan karyawan sampai menemukan "Manager"
cat("2.5.3.2 Employees until a 'Manager' is found:\n\n")
## 2.5.3.2 Employees until a 'Manager' is found:
i <- 1
while (i <= nrow(employees)) {
  cat(employees$Name[i], ", Position:", employees$Position[i], "\n")
  if (employees$Position[i] == "Manager") {
    cat("(Stopped here)\n")
    break
  }
  i <- i + 1
}
## Bagas , Position: Staff 
## Joan , Position: Supervisor 
## Alya , Position: Staff 
## Dwi , Position: Manager 
## (Stopped here)
cat("\n", strrep("=", 40), "\n\n")
## 
##  ========================================
# 3. Menggunakan break untuk menghentikan loop saat menemukan gaji > 10,000
cat("2.5.3.3 Employees until salary > 10,000 is found:\n\n")
## 2.5.3.3 Employees until salary > 10,000 is found:
for (i in 1:nrow(employees)) {
  if (employees$Salary[i] > 10000) {
    cat("(Stopped because", employees$Name[i], "has a salary above 10,000)\n")
    break
  }
  cat("Name:", employees$Name[i], ", Salary:", employees$Salary[i], "\n")
}
## Name: Bagas , Salary: 5000 
## Name: Joan , Salary: 7000 
## Name: Alya , Salary: 6500 
## Name: Dwi , Salary: 10000 
## (Stopped because Nabil has a salary above 10,000)
cat("\n", strrep("=", 40), "\n\n")
## 
##  ========================================
# 4. Menggunakan continue untuk melewati karyawan dengan performa "Average"
cat("2.5.3.4 Employees skipping 'Average' performance:\n\n")
## 2.5.3.4 Employees skipping 'Average' performance:
for (i in 1:nrow(employees)) {
  if (employees$Performance[i] == "Average") {
    next  # Lewati karyawan dengan performa "Average"
  }
  cat("Name:", employees$Name[i], ", Performance:", employees$Performance[i], "\n")
}
## Name: Bagas , Performance: Good 
## Name: Joan , Performance: Very Good 
## Name: Dwi , Performance: Good 
## Name: Nabil , Performance: Very Good