---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: 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: 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. ---END_EXPECTED_OUTPUT--- ---INITIAL_CODE--- #include 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 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---