405 lines
9.5 KiB
Markdown
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---
|