---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 ```c while (kondisi) { // blok kode yang akan diulang } ``` ## Contoh Dasar Perulangan While Berikut adalah contoh sederhana dari perulangan while: ```c #include 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): ```c 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: ```c 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: ```c 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: ```c #include 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: ```c // 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 ```c do { // blok kode yang akan diulang } while (kondisi); ``` ### Contoh Do-While Loop ```c #include 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: ```c 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: ```c #include 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: ```c #include 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:** - [https://www.w3schools.com/c/c_while_loop.php](https://www.w3schools.com/c/c_while_loop.php) - [https://www.w3schools.com/c/c_do_while_loop.php](https://www.w3schools.com/c/c_do_while_loop.php) - [https://www.w3schools.com/c/c_while_loop_reallife.php](https://www.w3schools.com/c/c_while_loop_reallife.php) ---EXERCISE--- # Latihan: Mencetak Angka Ganjil dengan While Loop Dalam latihan ini, Anda akan membuat program yang mencetak angka ganjil dari 1 hingga 20 menggunakan while loop. **Requirements:** - Gunakan while loop untuk mencetak angka ganjil - Cetak angka ganjil dari 1 hingga 20 - Gunakan kondisi untuk memeriksa apakah angka ganjil - Tampilkan setiap angka ganjil dengan pemisah spasi **Expected Output:** ``` 1 3 5 7 9 11 13 15 17 19 ``` Try writing your solution in the code editor below! ---KEY_TEXT--- while printf % 2 ---END_KEY_TEXT--- ---EXPECTED_OUTPUT--- 1 3 5 7 9 11 13 15 17 19 ---END_EXPECTED_OUTPUT--- ---INITIAL_CODE--- #include int main() { int number = 1; // Mulai dari angka 1 // TODO: Gunakan while loop untuk mencetak angka ganjil dari 1 hingga 20 // - Kondisi: ulangi selama number kurang dari atau sama dengan 20 // - Di dalam loop: periksa apakah number ganjil, jika ya cetak, lalu tambahkan number return 0; } ---END_INITIAL_CODE--- ---SOLUTION_CODE--- #include int main() { int number = 1; // Mulai dari angka 1 while (number <= 20) { if (number % 2 == 1) { // Periksa apakah angka ganjil printf("%d ", number); } number++; // Tambahkan number setiap iterasi } printf("\\n"); return 0; } ---END_SOLUTION_CODE---