---LESSON_INFO--- **Learning Objectives:** - Memahami struktur pengambilan keputusan dalam bahasa C - Belajar menggunakan pernyataan if, else if, dan else - Mengenal operator logika dalam C - Memahami cara membuat keputusan dalam program - Mengenal shorthand conditional operator **Prerequisites:** - Pemahaman tentang variabel dan tipe data - Pemahaman dasar tentang program C ---END_LESSON_INFO--- # Kondisi dalam C **Kondisi dalam bahasa C** memungkinkan program membuat keputusan berdasarkan nilai-nilai yang dievaluasi. Dengan kondisi, program bisa mengeksekusi blok kode yang berbeda tergantung pada apakah ekspresi tertentu bernilai benar atau salah. ## Pernyataan `if` **Pernyataan `if`** digunakan untuk mengeksekusi blok kode hanya jika kondisi tertentu terpenuhi (bernilai benar). ```c int score = 85; if (score > 80) { printf("Nilai Anda sangat baik!"); } ``` ## Pernyataan `else` **Pernyataan `else`** digunakan untuk mengeksekusi blok kode jika kondisi dalam `if` tidak terpenuhi (bernilai salah). ```c int score = 75; if (score > 80) { printf("Nilai Anda sangat baik!"); } else { printf("Nilai Anda perlu ditingkatkan."); } ``` ## Pernyataan `else if` **Pernyataan `else if`** digunakan untuk mengecek kondisi tambahan jika kondisi pertama dalam `if` tidak terpenuhi. ```c int score = 95; if (score >= 90) { printf("Nilai Anda A"); } else if (score >= 80) { printf("Nilai Anda B"); } else if (score >= 70) { printf("Nilai Anda C"); } else { printf("Nilai Anda perlu ditingkatkan."); } ``` ## Shorthand Conditional (Ternary Operator) C juga menyediakan **shorthand conditional operator** (ternary operator) yang merupakan cara singkat untuk menulis pernyataan `if-else` dalam satu baris: ```c int score = 85; char *result = (score >= 75) ? "Lulus" : "Tidak Lulus"; printf("Status: %s", result); ``` Formatnya adalah: `condition ? value_if_true : value_if_false` ## Kondisi Bersarang (Nested Conditions) Anda bisa **menyarangkan pernyataan kondisional** di dalam pernyataan kondisional lainnya: ```c int age = 25; int has_license = 1; if (age >= 18) { if (has_license == 1) { printf("Anda bisa mengemudi."); } else { printf("Anda cukup umur tapi belum punya SIM."); } } else { printf("Anda belum cukup umur untuk mengemudi."); } ``` ## Operator Logika **Operator logika** digunakan untuk menggabungkan kondisi: ### AND (&&) Mengembalikan benar jika **kedua kondisi** benar: ```c int age = 25; int has_license = 1; if (age >= 18 && has_license == 1) { printf("Anda bisa mengemudi secara legal."); } ``` ### OR (||) Mengembalikan benar jika **salah satu kondisi** benar: ```c int has_license = 0; int has_passenger = 1; if (has_license == 1 || has_passenger == 1) { printf("Anda bisa berkendara (sendiri atau dengan penumpang)."); } ``` ### NOT (!) Mengembalikan kebalikan dari kondisi: ```c int has_license = 0; if (!has_license) { printf("Anda belum punya SIM."); } ``` ## Switch Statement **Switch statement** adalah alternatif untuk pernyataan `if-else if-else` ketika Anda perlu membandingkan nilai variabel dengan beberapa kemungkinan nilai. Switch sangat berguna ketika Anda memiliki banyak kondisi yang bergantung pada nilai tunggal. ```c int day = 3; switch (day) { case 1: printf("Senin"); break; case 2: printf("Selasa"); break; case 3: printf("Rabu"); break; case 4: printf("Kamis"); break; case 5: printf("Jumat"); break; default: printf("Akhir pekan"); break; } ``` ### Keyword dalam Switch: - **`switch`**: Memulai pernyataan switch - **`case`**: Menentukan nilai yang akan dibandingkan - **`break`**: Menghentikan eksekusi switch (penting untuk mencegah fall-through) - **`default`**: Menyediakan blok kode yang akan dieksekusi jika tidak ada case yang cocok ### Fall-through Jika Anda **tidak menggunakan `break;`**, program akan melanjutkan mengeksekusi semua case berikutnya: ```c int num = 1; switch (num) { case 1: printf("Nomor 1\\n"); case 2: printf("Nomor 2\\n"); case 3: printf("Nomor 3\\n"); default: printf("Nomor lain\\n"); } ``` Output: ``` Nomor 1 Nomor 2 Nomor 3 Nomor lain ``` ## Contoh Nyata Penggunaan Kondisi Berikut adalah contoh penggunaan kondisi dalam situasi nyata: ```c #include int main() { float temperature = 25.0; int is_weekend = 1; printf("Suhu saat ini: %.1f°C\n", temperature); if (temperature > 30) { printf("Cuaca sangat panas! "); if (is_weekend) { printf("Bagus untuk liburan pantai.\n"); } else { printf("Minumlah air yang cukup.\n"); } } else if (temperature > 20) { printf("Cuaca hangat dan nyaman.\n"); if (is_weekend) { printf("Sempurna untuk aktivitas luar ruangan.\n"); } else { printf("Saat yang baik untuk bekerja produktif.\n"); } } else { printf("Cuaca dingin, pakailah jaket.\n"); } // Menggunakan ternary operator char *weather_status = (temperature > 25) ? "hangat" : "dingin"; printf("Kondisi cuaca saat ini: %s\n", weather_status); // Contoh switch statement int day_of_week = 3; printf("Hari ini adalah: "); switch (day_of_week) { case 1: printf("Senin"); break; case 2: printf("Selasa"); break; case 3: printf("Rabu"); break; case 4: printf("Kamis"); break; case 5: printf("Jumat"); break; default: printf("Akhir pekan"); break; } printf("\n"); return 0; } ``` **Output:** ``` Suhu saat ini: 25.0°C Cuaca hangat dan nyaman. Saat yang baik untuk bekerja produktif. Kondisi cuaca saat ini: hangat Hari ini adalah: Rabu ``` **Tips:** - Gunakan **indentasi** yang konsisten untuk membuat kode lebih mudah dibaca - Gunakan **komentar** untuk menjelaskan kondisi yang kompleks - Hindari **nested conditions** yang terlalu dalam karena bisa membuat kode sulit dipahami - Gunakan **ternary operator** hanya untuk kondisi sederhana - Gunakan **switch statement** ketika Anda memiliki banyak kondisi yang bergantung pada nilai tunggal **Referensi:** - [https://www.w3schools.com/c/c_conditions.php](https://www.w3schools.com/c/c_conditions.php) - [https://www.w3schools.com/c/c_conditions_else.php](https://www.w3schools.com/c/c_conditions_else.php) - [https://www.w3schools.com/c/c_conditions_elseif.php](https://www.w3schools.com/c/c_conditions_elseif.php) - [https://www.w3schools.com/c/c_conditions_short_hand.php](https://www.w3schools.com/c/c_conditions_short_hand.php) - [https://www.w3schools.com/c/c_conditions_nested.php](https://www.w3schools.com/c/c_conditions_nested.php) - [https://www.w3schools.com/c/c_conditions_logical.php](https://www.w3schools.com/c/c_conditions_logical.php) - [https://www.w3schools.com/c/c_conditions_reallife.php](https://www.w3schools.com/c/c_conditions_reallife.php) - [https://www.w3schools.com/c/c_switch.php](https://www.w3schools.com/c/c_switch.php) ---EXERCISE--- # Latihan: Klasifikasi Nilai Siswa Dalam latihan ini, Anda akan membuat program sederhana untuk mengklasifikasikan nilai siswa menggunakan if-else dan switch statement. **Requirements:** - Gunakan if-else untuk menentukan grade berdasarkan nilai (A, B, C, D, E) - Gunakan switch statement untuk menentukan deskripsi berdasarkan grade - Tampilkan nilai, grade, dan deskripsi Skala Nilai: - A: 85-100 - B: 70-84 - C: 55-69 - D: 40-54 - E: 0-39 Deskripsi Grade: - A: "Sangat Baik" - B: "Baik" - C: "Cukup" - D: "Kurang" - E: "Sangat Kurang" **Expected Output:** ``` Nilai: 85 Grade: A Deskripsi: Sangat Baik ``` Try writing your solution in the code editor below! ---KEY_TEXT--- if else switch case break default grade ---END_KEY_TEXT--- ---EXPECTED_OUTPUT--- Nilai: 85 Grade: A Deskripsi: Sangat Baik ---END_EXPECTED_OUTPUT--- ---INITIAL_CODE--- #include int main() { int nilai = 85; char grade; char *deskripsi; // TODO: Gunakan if-else untuk menentukan grade berdasarkan nilai // A: 85-100, B: 70-84, C: 55-69, D: 40-54, E: 0-39 // TODO: Gunakan switch untuk menentukan deskripsi berdasarkan grade printf("Nilai: %d\n", nilai); printf("Grade: %c\n", grade); printf("Deskripsi: %s\n", deskripsi); return 0; } ---END_INITIAL_CODE--- ---SOLUTION_CODE--- #include int main() { int nilai = 85; char grade; char *deskripsi; // Menentukan grade berdasarkan nilai if (nilai >= 85 && nilai <= 100) { grade = 'A'; } else if (nilai >= 70 && nilai <= 84) { grade = 'B'; } else if (nilai >= 55 && nilai <= 69) { grade = 'C'; } else if (nilai >= 40 && nilai <= 54) { grade = 'D'; } else if (nilai >= 0 && nilai <= 39) { grade = 'E'; } else { grade = 'X'; // Nilai di luar rentang } // Menentukan deskripsi berdasarkan grade switch (grade) { case 'A': deskripsi = "Sangat Baik"; break; case 'B': deskripsi = "Baik"; break; case 'C': deskripsi = "Cukup"; break; case 'D': deskripsi = "Kurang"; break; case 'E': deskripsi = "Sangat Kurang"; break; default: deskripsi = "Tidak Valid"; break; } printf("Nilai: %d\n", nilai); printf("Grade: %c\n", grade); printf("Deskripsi: %s\n", deskripsi); return 0; } ---END_SOLUTION_CODE---