sinau-c/content/while_loops.md

9.1 KiB

---LESSON_INFO--- Learning Objectives:

  • Memahami konsep perulangan while dalam bahasa C
  • Belajar menggunakan perulangan while untuk iterasi
  • Mengenal struktur perulangan while
  • Memahami perbedaan antara perulangan while dan for
  • Mengenal direktif kontrol perulangan (break dan continue)

Prerequisites:

  • Pemahaman tentang variabel dan tipe data
  • Pemahaman dasar tentang kondisi dalam C

---END_LESSON_INFO---

Perulangan While dalam C

Perulangan while dalam bahasa C digunakan untuk mengulang blok kode selama kondisi tertentu masih benar. Perulangan akan terus berjalan selama ekspresi kondisi mengevaluasi ke nilai benar (non-zero).

Sintaks Perulangan While

while (kondisi) {
    // blok kode yang akan diulang
}

Contoh Dasar Perulangan While

Berikut adalah contoh sederhana dari perulangan while:

#include <stdio.h>

int main() {
    int i = 1;
    
    while (i <= 5) {
        printf("%d ", i);
        i++;
    }
    
    return 0;
}

Output:

1 2 3 4 5

Perulangan While Tak Terbatas

Jika kondisi dalam perulangan while selalu benar, maka perulangan akan berjalan selamanya (infinite loop):

while (1) {
    printf("Loop tak terbatas\\n");
    // Perulangan ini akan berjalan selamanya
}

Direktif Kontrol Perulangan

Break

Keyword break digunakan untuk keluar dari perulangan sebelum kondisi menjadi salah:

int i = 1;

while (i <= 10) {
    if (i == 5) {
        break;  // Keluar dari perulangan ketika i = 5
    }
    printf("%d ", i);
    i++;
}

Output:

1 2 3 4

Continue

Keyword continue digunakan untuk melewati iterasi saat ini dan melanjutkan ke iterasi berikutnya:

int i = 0;

while (i < 5) {
    i++;
    
    if (i == 3) {
        continue;  // Lewati iterasi ketika i = 3
    }
    
    printf("%d ", i);
}

Output:

1 2 4 5

Contoh Nyata Penggunaan While Loop

Berikut adalah contoh penggunaan perulangan while dalam situasi nyata:

#include <stdio.h>

int main() {
    int password;
    int attempts = 0;
    const int MAX_ATTEMPTS = 3;
    
    printf("Masukkan password (angka 1234): ");
    
    while (attempts < MAX_ATTEMPTS) {
        scanf("%d", &password);
        attempts++;
        
        if (password == 1234) {
            printf("Password benar! Akses diberikan.\\n");
            break;
        } else if (attempts < MAX_ATTEMPTS) {
            printf("Password salah! Coba lagi (%d kesempatan tersisa): ", MAX_ATTEMPTS - attempts);
        } else {
            printf("Terlalu banyak percobaan salah. Akses ditolak.\\n");
        }
    }
    
    return 0;
}

Perbandingan While dan For

Perulangan while dan for memiliki tujuan yang sama tetapi digunakan dalam konteks berbeda:

  • While loop: Digunakan ketika jumlah iterasi tidak diketahui sebelumnya
  • For loop: Digunakan ketika jumlah iterasi diketahui atau menggunakan counter

Contoh konversi dari for ke while:

// Menggunakan for loop
for (int i = 0; i < 5; i++) {
    printf("%d ", i);
}

// Setara dengan while loop
int i = 0;
while (i < 5) {
    printf("%d ", i);
    i++;
}

Do-While Loop

Do-while loop mirip dengan while loop, tetapi dengan satu perbedaan penting: blok kode akan dieksekusi setidaknya sekali sebelum kondisi dicek. Ini berarti bahwa kode dalam blok do akan selalu dijalankan setidaknya satu kali, bahkan jika kondisi awalnya salah.

Sintaks Do-While Loop

do {
    // blok kode yang akan diulang
} while (kondisi);

Contoh Do-While Loop

#include <stdio.h>

int main() {
    int i = 1;

    do {
        printf("%d ", i);
        i++;
    } while (i <= 5);

    return 0;
}

Output:

1 2 3 4 5

Perbedaan utama antara while dan do-while adalah bahwa dalam do-while, blok kode akan dieksekusi setidaknya sekali, meskipun kondisi awalnya salah:

int i = 10;

// While loop - tidak akan mengeksekusi blok kode
while (i < 5) {
    printf("Ini tidak akan dicetak\\n");
}

// Do-while loop - akan mengeksekusi blok kode sekali
do {
    printf("Ini akan dicetak sekali\\n");
} while (i < 5);

Contoh Nyata Penggunaan While Loop

Berikut adalah contoh penggunaan perulangan while dalam situasi nyata:

#include <stdio.h>

int main() {
    int password;
    int attempts = 0;
    const int MAX_ATTEMPTS = 3;

    printf("Masukkan password (angka 1234): ");

    while (attempts < MAX_ATTEMPTS) {
        scanf("%d", &password);
        attempts++;

        if (password == 1234) {
            printf("Password benar! Akses diberikan.\\n");
            break;
        } else if (attempts < MAX_ATTEMPTS) {
            printf("Password salah! Coba lagi (%d kesempatan tersisa): ", MAX_ATTEMPTS - attempts);
        } else {
            printf("Terlalu banyak percobaan salah. Akses ditolak.\\n");
        }
    }

    return 0;
}

Contoh Nyata Penggunaan Do-While Loop

Do-while loop sangat berguna dalam skenario interaktif di mana Anda ingin memastikan bahwa pengguna diminta setidaknya sekali:

#include <stdio.h>

int main() {
    int choice;

    do {
        printf("\\nMenu:\\n");
        printf("1. Tampilkan pesan\\n");
        printf("2. Hitung angka\\n");
        printf("3. Keluar\\n");
        printf("Pilih opsi (1-3): ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                printf("Anda memilih untuk menampilkan pesan.\\n");
                break;
            case 2:
                printf("Anda memilih untuk menghitung angka.\\n");
                break;
            case 3:
                printf("Keluar dari program.\\n");
                break;
            default:
                printf("Opsi tidak valid. Silakan coba lagi.\\n");
        }
    } while (choice != 3);

    return 0;
}

Tips:

  • Pastikan kondisi dalam while loop akan berubah sehingga perulangan tidak menjadi infinite loop
  • Gunakan break untuk keluar dari perulangan dalam kondisi tertentu
  • Gunakan continue untuk melewati iterasi saat ini dalam kondisi tertentu
  • Hati-hati saat menggunakan continue karena bisa menyebabkan infinite loop jika counter tidak diperbarui
  • Gunakan do-while ketika Anda ingin memastikan bahwa blok kode dijalankan setidaknya sekali

Referensi:

---EXERCISE---

Latihan: Menu Interaktif dengan Do-While Loop

Dalam latihan ini, Anda akan membuat menu interaktif yang terus berjalan sampai pengguna memilih untuk keluar, menggunakan do-while loop.

Requirements:

  • Gunakan do-while loop untuk membuat menu terus berjalan
  • Tampilkan menu pilihan (setidaknya 3 pilihan)
  • Gunakan switch statement untuk menangani pilihan menu
  • Gunakan break untuk keluar dari perulangan saat pengguna memilih keluar
  • Pastikan program menangani pilihan yang tidak valid

Expected Output:

Menu:
1. Tampilkan pesan sambutan
2. Hitung jumlah angka
3. Keluar
Pilih opsi (1-3): 1
Halo! Selamat datang di program kami.
Menu:
1. Tampilkan pesan sambutan
2. Hitung jumlah angka
3. Keluar
Pilih opsi (1-3): 2
Jumlah angka dari 1 hingga 5 adalah 15.
Menu:
1. Tampilkan pesan sambutan
2. Hitung jumlah angka
3. Keluar
Pilih opsi (1-3): 3
Terima kasih telah menggunakan program kami.

Try writing your solution in the code editor below!

---EXPECTED_OUTPUT--- Menu:

  1. Tampilkan pesan sambutan
  2. Hitung jumlah angka
  3. Keluar Pilih opsi (1-3): 1 Halo! Selamat datang di program kami. Menu:
  4. Tampilkan pesan sambutan
  5. Hitung jumlah angka
  6. Keluar Pilih opsi (1-3): 2 Jumlah angka dari 1 hingga 5 adalah 15. Menu:
  7. Tampilkan pesan sambutan
  8. Hitung jumlah angka
  9. Keluar Pilih opsi (1-3): 3 Terima kasih telah menggunakan program kami. ---END_EXPECTED_OUTPUT---

---INITIAL_CODE--- #include <stdio.h>

int main() { int choice;

// TODO: Gunakan do-while loop untuk membuat menu interaktif
// Tampilkan menu dan tangani pilihan pengguna

return 0;

} ---END_INITIAL_CODE---

---SOLUTION_CODE--- #include <stdio.h>

int main() { int choice;

do {
    printf("Menu:\\n");
    printf("1. Tampilkan pesan sambutan\\n");
    printf("2. Hitung jumlah angka\\n");
    printf("3. Keluar\\n");
    printf("Pilih opsi (1-3): ");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            printf("Halo! Selamat datang di program kami.\\n");
            break;
        case 2: {
            int sum = 0;
            for (int i = 1; i <= 5; i++) {
                sum += i;
            }
            printf("Jumlah angka dari 1 hingga 5 adalah %d.\\n", sum);
            break;
        }
        case 3:
            printf("Terima kasih telah menggunakan program kami.\\n");
            break;
        default:
            printf("Opsi tidak valid. Silakan coba lagi.\\n");
    }

    // Jika bukan pilihan keluar, tambahkan baris kosong untuk pemisah
    if (choice != 3) {
        printf("\\n");
    }
} while (choice != 3);

return 0;

} ---END_SOLUTION_CODE---