sinau-c/content/conditions.md

373 lines
9.0 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: Sistem Menu Restoran
Dalam latihan ini, Anda akan membuat program sederhana yang meniru sistem menu restoran menggunakan switch statement.
**Requirements:**
- Gunakan switch statement untuk menentukan pesanan berdasarkan nomor menu
- Gunakan pernyataan if-else untuk menentukan harga makanan
- Tampilkan pesanan dan harganya
- Gunakan default case untuk menangani nomor menu yang tidak valid
Menu:
- 1: Nasi Goreng - Rp. 25000
- 2: Mie Ayam - Rp. 20000
- 3: Soto Ayam - Rp. 22000
- 4: Bakso - Rp. 18000
- 5: Es Teh - Rp. 5000
**Expected Output:**
```
Pesanan: Nasi Goreng
Harga: Rp. 25000
```
Try writing your solution in the code editor below!
---EXPECTED_OUTPUT---
Pesanan: Nasi Goreng
Harga: Rp. 25000
---END_EXPECTED_OUTPUT---
---INITIAL_CODE---
#include <stdio.h>
int main() {
int menu_number = 1;
// TODO: Gunakan switch statement untuk menentukan pesanan
char *food_name;
int price;
// TODO: Tampilkan pesanan dan harganya
printf("Pesanan: %s\n", food_name);
printf("Harga: Rp. %d\n", price);
return 0;
}
---END_INITIAL_CODE---
---SOLUTION_CODE---
#include <stdio.h>
int main() {
int menu_number = 1;
char *food_name;
int price;
switch (menu_number) {
case 1:
food_name = "Nasi Goreng";
price = 25000;
break;
case 2:
food_name = "Mie Ayam";
price = 20000;
break;
case 3:
food_name = "Soto Ayam";
price = 22000;
break;
case 4:
food_name = "Bakso";
price = 18000;
break;
case 5:
food_name = "Es Teh";
price = 5000;
break;
default:
food_name = "Menu tidak valid";
price = 0;
break;
}
printf("Pesanan: %s\n", food_name);
printf("Harga: Rp. %d\n", price);
return 0;
}
---END_SOLUTION_CODE---