sinau-c/content/conditions.md

9.0 KiB

---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).

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).

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.

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:

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:

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:

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:

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:

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.

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:

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:

#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:

---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---