402 lines
9.1 KiB
Markdown
402 lines
9.1 KiB
Markdown
---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 <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):
|
|
|
|
```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 <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:
|
|
```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 <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:
|
|
|
|
```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 <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:
|
|
|
|
```c
|
|
#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:**
|
|
- [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 <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--- |