Salah satu konsep programming yang cukup banyak dipakai (dan juga sedikit rumit), adalah perulangan bersarang atau nested loop. Dalam tutorial kali ini kita akan lihat praktek pembuatan perulangan bersarang dalam bahasa C.
Pengertian Perulangan Bersarang (Nested Loop)
Perulangan bersarang adalah sebutan untuk perulangan di dalam perulangan. Konsep seperti ini sering dipakai untuk memecahkan masalah programming yang cukup kompleks. Semua jenis perulangan bisa dibuat dalam bentuk perulangan bersarang, termasuk perulangan FOR, WHILE dan DO WHILE. Dalam bahasa inggris, perulangan bersarang ini dikenal dengan sebutan nested loop.
Berikut contoh format dasar perulangan bersarang dalam bahasa C:
for (start1; condition1; increment1) { // kode program for (start2; condition2; increment2) { // kode program } }
Di dalam perulangan bersarang terdapat istilah outer loop dan inner loop. Sesuai dengan namanya, outer loop adalah sebutan untuk perulangan luar, sedangkan inner loop sebutan untuk perulangan dalam.
Pada contoh di atas, outer loop adalah perulangan di baris 1, sedangkan inner loop adalah perulangan di baris 4. Kode program di dalam outer loop akan dijalankan sejumlah kondisi perulangan di outer saja. Sedangkan kode program yang ada di dalam perulangan inner loop akan dijalankan sebanyak perulangan outer * inner.
Tidak ada batasan seberapa banyak "kedalaman" dari sebuah perulangan bersarang. Kita bisa saja membuat perulangan di dalam perulangan di dalam perulangan, dst. Tentu saja semakin banyak perulangan yang "bersarang", kode programnya juga akan makin kompleks.
Dalam membuat perulangan berasarang kita juga harus sangat teliti dalam penggunaan tanda kurung kurawal "{ }" untuk menandakan awal dan akhir sebuah blok kode program. Tidak jarang hasilnya jadi berantakan karena salah menulis posisi penutup kurung kurawal.
Contoh Kode Program Perulangan Bersarang (Nested Loop)
Mari kita masuk ke contoh kode program dari perulangan bersarang dalam bahasa C. Namun sebelum itu, kita berangkat dari perulangan "normal" terlebih dahulu.
Latihan pertama, bisakah anda merancang kode program untuk membuat daftar perkalian 3 dari 1 sampai 10? Hasil akhir yang saya inginkan adalah seperti ini:
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 3 * 10 = 30
Tentu saja baris di atas bisa dihasilkan dengan membuat perintah printf sebanyak 10 kali, namun hal itu tidak efisien. Hasil di atas harus dibuat menggunakan perulangan FOR.
Baik, berikut kode program yang saya gunakan:
#include <stdio.h> int main(void) { for (int i = 1; i <= 10; i++) { printf("3 * %i = %i\n",i,3*i); } return 0; }
Disini saya menggunakan sebuah perulangan FOR. Perulangan mulai dari variabel counter i = 1 sampai i <= 10. Sepanjang perulangan, tampilkan hasil dari printf("3 * %i = %i\n",i,3*i).
Jika anda sudah memahami konsep dasar perulangan FOR, maka kode program ini seharusnya bisa dipahami dengan mudah.
Berikutnya, bagaimana dengan membuat kode program untuk menghasilkan daftar perkalian yang sama seperti di atas, tapi kali ini bukan hanya perulangan 3 saja, tapi dari 1 – 10. Maksudnya, saya ingin membuat kode program yang menghasilkan 100 baris daftar perkalian, mulai dari:
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 .... ....
Sampai dengan:
.... .... 10 * 8 = 80 10 * 9 = 90 10 * 10 = 100
Ada beberapa cara untuk membuat daftar perkalian seperti ini, misalnya bisa dengan membuat 10 kali perulangan FOR (1 perulangan untuk setiap angka). Namun cara paling efisien adalah menggunakan perulangan bersarang.
Berikut contoh kode program yang bisa dipakai:
#include <stdio.h> int main(void) { for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { printf("%i * %i = %i\n",i,j,j*i); } printf("\n"); } return 0; }
Untuk membuat perulangan bersarang, kita butuh 2 buah variabel counter, yakni 1 untuk outer loop, dan 1 untuk inner loop. Dalam contoh ini saya menggunakan variabel i dan j.
Perulangan i (outer loop) akan diulang sebanyak 10 kali, yakni dari i = 1 sampai i <= 10. Di dalam setiap perulangan i ini, akan di proses perulangan j (inner loop). Perulangan j jukan akan di proses sebanyak 10 kali. Dengan demikian, perintah printf di baris 7 akan dijalankan sebanyak 100 kali, yakni total dari i * j.
Inilah salah satu contoh penerapan perulangan bersarang dalam bahasa C.
Sebagai tantangan terakhir, bisakah anda meng-konversi nested loop diatas menjadi perulangan WHILE? Silahkan dicoba sebentar.
Baik, berikut kode program untuk hasil yang sama namun kali ini dengan perulangan WHILE:
#include <stdio.h> int main(void) { int i = 1; int j; while (i <= 10) { j = 1; while (j <= 10) { printf("%i * %i = %i\n",i,j,j*i); j++; } printf("\n"); i++; } }
Membuat nested loop dengan perulangan WHILE memang butuh tantangan tersendiri, karena kita harus memikirkan kapan sebuah variabel harus di deklarasikan. Sebagai contoh, perintah j = 1 harus berada di dalam perulangan i, namun sebelum perulangan j.
Dalam tutorial belajar bahasa C kali ini kita telah membahas konsep dari perulangan bersarang atau nested loop. Meskipun cukup rumit, konsep perulangan ini sangat penting sepanjang karir kita sebagai programmer. Kuncinya ada di latihan kode program. Semakin banyak berlatih memecahkan masalah, anda akan semakin terampil dalam merancang kode program.
kenapa hasil eksekusi dari nested loop yg while menjadi infinity loop juga?
Kode program yang ada di tutorial ini kan ya? Saya sudah coba jalankan ulang dan tidak ada masalah.
Tapi jika yang dimaksud kode program lain atau kode di tutorial ini tapi sudah diedit2 lagi, maka harus dipelajari dulu kodenya seperti apa.
izin menjawab, ini kode nested loop while yang saya coba dan bisa
#include
using namespace std;
int main(){
int a=1, i;
while(a<=10){
i=1;
while(i<=10){
cout<<a<<" * "<<i<<" ="<<a*i<<endl;
i++;
}
a++;
}
}
Terimakasih tambahannya…
Izin bertanya, saat saya mau melakukan eksekusi pada codingan Nested Loop menggunakan for kenapa gagal ya? pada baris
for (int i = 1; i <= 10; i++) {
mohon pencerahannya!!
Pesan errornya apa ya? dan apakah sudah coba copy paste kode yang ada di tutorial ini (untuk menghindari salah ketik) ?
[Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
sudah saya copas darisini juga tidak bisa'-'
Sepertinya compiler yang digunakan tidak mendukung penulisan var i yang digabung ke dalam for loop. Solusinya, pendefinisian var int i harus dibawa keluar loop:
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 10; i++) {
printf("3 * %i = %i\n",i,3*i);
}
return 0;
}
kalo keluarannya gini :
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
…
dst
gimana ya?
Saya sempet lupa logika dasar buat nested loop. Artikel anda sangat membantu saya. Terimakasih.
#include <stdio.h>
main()
{
int i=1,j;
while(i<=5)
{
printf ("\nOuter Loop %i",i);
j=1;
while (j<=i)
{
printf ("\nInner Loop %i",j);
j++;
}
i++;
}
}
min ini penjelasan nya gmn ya ? bisa outputnya
Outer Loop 1
Inner Loop 1
Outer Loop 2
Inner Loop 1
Inner Loop 2
Outer Loop 3
Inner Loop 1
Inner Loop 2
Inner Loop 3
Outer Loop 4
Inner Loop 1
Inner Loop 2
Inner Loop 3
Inner Loop 4
Outer Loop 5
Inner Loop 1
Inner Loop 2
Inner Loop 3
Inner Loop 4
Inner Loop 5
mas, cara membuat program seperti ini bagaimana ya?
N = 5
M = 5
1111122222333334444455555
Mas cara membuat program yang membaca suatu string dan keyboard
dan kemudian tampilkan semacam berikut ini:
Sama
ama
aa
a
Ini gimana ya mas cara buat programnya ?
Request di tampung dulu ya… kalau sempat akan dibuatkan tutorial terpisah
sangat membantu bagi pemula seperti saya
1 2 3 4 5 6
7 8 9 10 11
12 13 14 15
16 17 18 19
21 22 23 24
gimana bro?
Bisa lanjut ke sini: https://www.duniailkom.com/latihan-kode-program-bahasa-c-membuat-persegi-angka/
1 2 3 4 5
6 7 8 9
10 11 12
13 14
15
biar outputnya kaya gini gimana ya kak ?
Silahkan lanjut ke sini: https://www.duniailkom.com/latihan-kode-program-bahasa-c-membuat-segitiga-angka-terbalik/
Min klo logikanya gini sprti apa?
Ada sebuah gedung dengan lantai tidak terbatas. Di dalam setiap lantai ada sejumlah loker dengan nomor loker berurutan, dengan konfigurasi seperti ini:
Lt. 1 tersedia 5 buah loker, nomor 1-5
Lt. 2 tersedia 6 buah loker, nomor 6-11
Lt. 3 tersedia 7 buah loker, nomor 12-18
Lt. 4 tersedia 5 buah loker, nomor 19-23
Lt. 5 tersedia 6 buah loker, nomor 24-29
Lt. 6 tersedia 7 buah loker, nomor 30-36
Dan seterusnya…
Buat sebuah fungsi yang menerima parameter nomor loker, dan mengembalikan angka lantai
a. Buat dengan bahasa pemrograman apapun (webserver), diutamakan menggunakan c# / .Net Core