Perulangan adalah hal yang sangat membosankan bagi manusia. Namun perulangan adalah hal yang mudah bagi komputer. Ada 3 jenis perulangan dalam bahasa C, yaitu for, while dan do-while. Sesuai namanya, perulangan memungkinkan komputer untuk melakukan satu instruksi beberapa kali sampai suatu kondisi/keadaan.
Meskipun ketiga perulangan dalam bahasa C memiliki tujuan yang sama (mengulang suatu instruksi), namun masing-masing memiliki cara penulisan dan kondisi yang berbeda untuk berhenti. Berikut adalah diagram alur dari for dan while dengan do-while.
Daftar isi
Perulangan For
Perulangan for dapat digunakan jika kita tahu berapa kali intruksi harus dijalankan, misalnya 5 kali, 10 kali, 20 kali dst. Contoh dari perulangan for:
#include <stdio.h> int main(){ for(int i = 0;i<20; i++) printf("Selamat datang di cahInfor\n"); }
Perhatikan contoh tersebut.
int i = 0
mendeklarasikan nilai i dan memberi 0 sebagai nilai awal dari i.i < 20
menandakan bahwa instruksi berjalan selama nilai i < 20.i++
artinya setiap kali komputer menjalankan instruksi dalam perulangan, nilai i bertambah 1.- Ketiganya terpisah oleh titik koma (;).
Karena potongan tersebut hanya contoh, masing-masing nilainya juga tidak harus sama. Ketiga nilai bisa diubah sesuai dengan keinginan atau soal, selama yang pertama merupakan nilai counter awal, kedua merupakan kondisi saat program berhenti dan ketiga harus merupakan pengubah nilai i agar program bisa berhenti.
Perulangan while
Berbeda dengan perulangan for, perulangan while bisa kita gunakan jika tidak tahu kapan program harus berhenti. Dalam perulangan ini, program sendiri yang akan menentukan kapan program berhenti dan kita hanya perlu memberikan kondisi kapan untuk berhenti.
while(kondisi){ //Baris instruksi }
Perulangan while akan berhenti jika kondisi bernilai false. Berbeda dengan perulangan for yang akan terus berjalan selama kondisi memenuhi. Misalnya kita ingin menulis baris pada Collatz conjecture sampai nilainya satu. Aturan barisan adalah:
- Jika n bernilai ganjil, bilangan berikutnya adalah 3n + 1, dengan n merupakan bilangan saat ini.
- Jika n bernilai genap, bilangan berikutnya adalah n/2.
#include <stdio.h> int main(){ int n = 25; while(n != 1){ printf("%d, ",n); if(n % 2) n = n*3 + 1; else n /= 2; } printf("%d\n",n); }
Pada contoh tersebut kita tidak tahu berapa kali instruksi berjalan. Yang kita ketahui hanyalah bahwa program tersebut harus berhenti jika n bernilai 1. Sehingga selama nilai n bukan 1 (!= 1), program akan terus berjalan. Satu hal lagi, tahukah kamu kenapa tertulis if(n % 2)
untuk menguji nilai n ganjil?
Sebenarnya perulangan while juga bisa kita gunakan jika kita sudah mengetahui berapa kali intruksi berjalan. Misalnya contoh program for sebelumnya.
#include <stdio.h> int main(){ int i = 0; while(i<20){ printf("Selamat datang di cahInfor\n"); i++; } }
Perulangan do-while
Sebenarnya perulangan ini sama dengan perulangan while. Perbedaannya adalah bahwa perulangan do-while pasti akan menjalankan instruksi, meskipun hanya sekali. Hal ini karena instruksi akan dijalankan sebelum program melihat kondisi syarat. Misalnya program tebak angka, program akan berhenti jika user memberi input bernilai sama dengan yang ada (contoh 42).
#include <stdio.h> int main(){ int angka = 42; do{ printf("Tebak angka: "); scanf("%d",&angka); }while(angka != 42); }
Meskipun angka awal bernilai 42, program tidak akan berhenti sebagaimana dengan menggunakan while.
Perulangan Bersarang
Perulangan bersarang (nested loop) adalah perulangan berada di dalam perulangan. Misalnya untuk mencetak ‘*’ pada layar sebanyak n*n, kita tidak bisa menuliskannya secara manual karena tidak tahu berapa nilai dari n tersebut. Sehingga untuk menyelesaikannya adalah sebagai berikut:
#include <stdio.h> int main(){ int i,j,n; scanf("%d",&n); for(i = 0;i<n; i++){ for(j = 0;j<n; j++) printf("*"); printf("\n"); } }
Break dan Continue
kedua kata kunci (keyword) ini bisa berguna untuk mengendalikan perulangan. Break berguna untuk menghentikan perulangan, sedangkan continue untuk melewati instruksi saat kondisi saat itu dan biasanya dalam perulangan for.
Anggap terdapat sebuah array yang tidak kita ketahui isinya dan kita ingin mengetahui index dari elemen yang bernilai 5. Untuk itu, gunakan break.
#include <stdio.h> int main(){ int i,arr[10] = {1,6,3,9,6,5,7,8,0,4}; for(i = 0; i<10; i++) if(arr[i] == 5) break; printf("Index dari elemen 5 adalah %d\n",i); }
Kemudian misalkan kita ingin mencetak angka 1-20 dengan syarat bahwa bilangan kelipatan 3 atau 5 tidak akan ditulis.
#include<stdio.h> int main(){ int i; for(i = 1; i<=20; i++) if(i%3==0 || i%5==0) continue; else printf("%d ",i); }
Infinite Loop
Infinite loop adalah perulangan yang tidak akan pernah berhenti. Hal ini bisa terjadi jika program tidak menemukan kondisi yang membuatnya berhenti. Tentu saja kita harus menghindari hal ini.
#include <stdio.h> int main(){ for(i = 0; i<20 ; i--) printf("Selamat datang di cahInfor\n"); }
Apa yang membuat program tersebut tidak berhenti?