373 lines
9.0 KiB
Markdown
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--- |