sinau-c/content/conditions.md

405 lines
9.5 KiB
Markdown

---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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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---