Pada artikel ini, kita akan mengenal suatu istilah yang baru lagi seputar pemrograman bahasa C. Dimana kita akan mempelajari tentang Nested Loop.
Menurut artian dalam bahasa Inggris, Nested loop dapat diartikan sebagai looping atau perulangan yang bersarang. Maksudnya adalah dalam looping tersebut masih terdapat looping lagi bahkan dalam looping tersebut, masih memungkinkan untuk membuat perulangan lagi sehingga looping tersebut bersarang kedalam. Ketika loop pada tingkat terendah telah selesai dilakukan maka looping pada tingkat diatasnya akan dilakukan dan begitu seterusnya. Perulangan bersarang seperti ini sangat membantu kita ketika program yang akan kita buat tersebut tidak cukup untuk menuangkan/ mengekspresikan keseluruhan hasil yang ingin kita capai. Biasanya dalam Nested loop digunakan ketika parameter untuk perulangan itu lebih dari satu atau dua parameter.
Teori
Berikut adalah teori penunjang yang bermanfaat.
Setelah membaca baca Teori Penunjang diatas, Mari kita mencoba membuat beberapa program sederhana tentangc materi ini :
SEMANGATTTT
Soal 1
Dengan menggunakan pernyataan nested loop, buatlah program berikut:
input: n
Jawab
Ehmmmm. Terlihat susah . Ayo kita bedah soal diatas.
Dari soal diats kita dpat memahami bahwa dalam pembuatan program diatas, kita perlu memnbuat dua pernyataan for yang bertingkat. Fungsi for yang tertinggi atau yang terluar kita tempatkan untuk mengatur banyaknya baris yang akan kita buat dengan batasan yaitu seanyak n kali. Dan pada pernyataan for yang berikutnya, kita gunakan untuk membuat barisan angka yang berjejer mulai dari 1 hingga batasan ke-n. Nilai n dalam program kita belum kita ketahui sebab kita akan mengaturnya agar n yang merupakan batasan program bersumber dari masukan client.
Dari serangkaian analisa diatas, kita dapat membuatkan program diatas sebagai berikut.
Program yang telah kita buat seperti pada gambar diatas jika kita coba untuk running amaka akan diperoleh hasil sebagai berikut :
WOOW. Sakti kan nested loop ini ??
Dari program diatas, sehingga menghasilkan output seperti itu, kita perlu memahami rangkaian program diatas.
- Pada baris ke-5 seperti biasa kita perlu mendeklarasikan variabel variabel yang akan kita gunakan, agar mudah dan tidak rumit, saya memakai label a, b, dan d saja.
- Pada baris yang ke-7, disini kita mulai untuk mengambil dan mengisi batasan yang di inginkan oleh sang client. sampai berapa panjang dan lebar program kita ini. Pada program yang telah kita buat saya memilih variabel d untuk menampung input tersebut.
- Pada baris ke-8 kita mulai untuk membuat banyaknya baris yang akan kita buat. Untuk batasan awalnya, tentu saja kita harus memulainya dengan angka 1 terlebih dahulu. Dan untuk batas akhirnya, hasil yang akan kita peroleh atau batasan yang diperkenankan diharapkan sampai batas input dari client sehingga untuk batasan akhir, kita berikan dengan lebih kecil atau sama dengan input d dengan iterasi yaitu peningkatan sebanyak 1 point setiap kali looping dilakukan.
- Didalam loop yang sebelumnya, kita membuat lagi looping untuk membuat barisan angka yang akan ditampilkan. Sehingga untuk fungsi for yang kedua ini, kicta menggunakan variabel b sebagai parameter loopinya karena variabel a telah digunakan dalam loop yang sebelumnya.
- Untuk batasan pada looping yang kedua, kita mulai dari batasan awal adalah sama dengan 1 dan batasan atas kita beri batasan untuk tidak melampaui nilai input yang diberikan oleh client.
- Dalam fungsi perulangan for kedua, kita melakukan proses menampilkan atau mencetah bilangan yang berada dalam variabel b dala setiap kali looping dilakukan.
- Dan ketika kita ingin berpindah baris, atau setelah perulangan dalam looping kedua telah selesai dilakukan, maka akan keluar dan akan mencetak lagi tanda untuk baris baru yaitu disimbolkan dengan (\n) sehingga setiap loop yang kedua selesai, maka akan berpindah kepada loop yang sebelumnya dan akan memutuskan lagi apakah akan dilakukan looping untuk nilai a yang kedua dan seterusnya ataukah telah mencapai batas akhir yang di inputkan oleh client.
Soal 2
Dengan menggunakan pernyataan nested loop, buatlah program berikut:
input: n
Jawab
Dari soal diatas, kita dapat menganalisanya sebagai berikut :
Kita akan membuat program yang angka dalam setiap barisnya akan dicetak berdasarkan urutan angka dan banyaknya angka yang serupa dalam barisan tersebut sama dengan urutan barisan tersebut. Jadi untuk batas akhirnya ditetapkan oleh input langsung yang nantinya akan dimasukkan oleh client.
Mari kita membuat program sederhana dari analisis diatas.
Dari program yang telah kita buat pada gambar diatas, kita akan mencoba untuk menjalankannya. Ketika kita mencoba menjalankannya, kita akan mendapatkan contoh hassil sebagai berikut :
Dari menjalankan atau mengcompile program diatas, kita dapat menganalisisnya sebagai berikut :
- Pada baris yang ke-5 kita akan mendeklarasikan variabel yang akan kita gunakan dalam program ini, untuk memampung masukan dari client atau masukan keyoard, kita menggunakan variabel c
- Pada baris ke-7, kita akan mulai untuk memasukkan data atau mengisi data pada variabel c sehingga data yang ditampung oleh variabel c bergantung pada input keyboard nantinya.
- Mulai dari baris yang ke-8, kita mulai untuk membuat sebuah fungsi looping for yang gunanya untuk melakukan perulangan pada setiap baris. Sehingga dalam jumlah dan perpindahan baris, dikerjakan dan diatur oleh fungsi for ini.
- Kemudian dalam loop tadi, kita berikan fungsi loop lagi sehingga terdapat loop didalam loop tersebut. Fungsi dari loop yang kedua ini adalah untuk mengatur kolom dalam setiap baris.
- Batasan pada loop yang kedua ini atau loop tingkat sekunder ini adalah untuk nilai awalnya kita berikan batasan b = 1 sehingga pada baris pertama pada kolom pertama akan diisi oleh angka 1. Untuk batasan akhirnya, kita berikan batasan bahwa loop sekunderakan berhenti apabila nilai b telah mencapai nilai a atau sama dengan a. Serta untuk iterasinya kita berikan pergerakan b yang akan meningkat terus menerus sebanyak 1 point setiap kali looping dilakukan.
- Dalam fungsi for sekunder, kita buat perintah untuk mencetak barisan angka angka sesuai yang sial minta,sehingga untuk ditampilkan Dalam setiap kali looping adalah nilai dari a. Sehingga pada setiap baris, angka yang dicetak adalah tergantung dari posisi baris tersebut. Misalnya baris tersebut berada pada baris ke 5 maka yng akan dicetak adalah angka 5 dan banyaknya angka 5 yang akan dicetak bergantung pada nilai a itu sendiri.
- Setelah loop sekunder telah berhasil dilaksanakan , maka berlanjut pada perintah baris selanjutnya Dalam tubuh loop pertama atau loop for pimer tadi yaitu pada baris selanjutnya kita tambahkan perintah untuk pindah ke baris baru. Sehingga setiapkali loop primer telah selesai bekerja maka akan berlanjut ke baris yang berikutnya.
Soal 3
Dengan menggunakan pernyataan nested loop, buatlah program berikut: input: n
Jawab
Dari soal diatas, kita dapat melihat bahwa membuat suatu baris an bilangan prima I tidak dapat dilepaskan dari pengertian dari bilangan prima itu sendiri yang hanya dapat dibagi habis oleh bilangan 1 dan dirinya sendiri. Sehingga jika kita membagi bilangan prima dengan bilangan yang lain, maka bilang tersebut tidak akan bisa menghasilkan bilangan bulat yang mengindikasikan bahwa bilangan tersebut dapat dibagi habis (Modulus 0). Sehingga kita dapat membuatkan Program sederhana dari analisis diatas seperti pada gambar dibawah ini.
ika program yang telah kita buat, kita ingin mengcopilenya maka akan dapat terlihat hasil seperti pada gambar dibawah ini.
Dari program yang telah kita buat, kita dapat menganalisisnya sebagai berikut :
1. Pada baris yang ke-5, kita memulai dengan mendeklarasikan semua variable yang akan kita gunakan. Pada program ini, kita akan menggunakan variable Inp sebagai variable yang akan berfungsi untuk menampung masukan dari keyboard client.
2. Pada baris yang ke-7, kita akan mulai untuk memasukkan atau mengisi variabel Inp sehingga Nilai Inp akan mengikuti masukan yang diberikan oleh client
3. Pada baris yag ke-9, kita membuat fungsi for untuk fungsi for primer, dimana fungsi for ini digunakan sebagai parameter jumlah bilangan prima yang telah dicetak oleh system. Sehingga pada fungsi for ini, banyaknya angka yang akan dicetak sama dengan jumlah proses looping fungsi ini dilakukan. Dengan batasan awal kita berikan angka 1 dan untuk batasan akhir kita berikan angka Inp +1. Atau bisa juga dengan cara lain yaitu dengan memberikan Batas awal = 0 dan batasan akhir = Inp. Akan menghasilkan hasil yang sama juga. Disamping itu kita juga jagan lupa memberikan iterasi b++.
4. Dalam tubuh for yang telah dijelaskan sebelumnya, kita membuat suatu persamaan sederhana yaitu dengan variabel d yang sama dengan variabel a. Apa maskud dari persamaan ini ???. Pesamaan ini dibuat untuk mengantisipasi bahwa pada loop sekunder berikutny nilai a yang digunakan akan sama dengan nilai a yang digunakan pada looping sebelumnya sehingga pada setiap kali looping akan menghasilkan hasil yang sama. Nah itu sangat tidak diharapkan. Sehingga kita perlu memastikan bahwa tidak akan terjadi perulangan pada setiap perulangan dilakukan.
5. Pada baris berikutnya dalam tubuh loping primer, kita membuat lagi sebuah looping fungsi for sekunder. Fungsi dari looping sekunder ini adalah untuk enentukan dan mencari dari biangan prima jadi akan mulai meningkat seiring dengan bertambahnya iterasi a yang memenuhi sehingga nilai a untuk batasan awal kita berikan persamaan d+1 karena kita mengharapkan bahwa pada looping selanjutnya tidak akan terjadi perulangan pada nilai a yang sama. Untuk batasan akhirnya, kita memberikan batasan 10^Inp. Sebenrnya ini hanya siasat kita saja untuk membuat batasan ini seolah olah adalah unlimeted walaupun sebenarnya masih terdefinisi. Dan untuk iterasinya adalah akan meningkat sebanyak 1 point setiap kali dilakukan perulangan.
6. Disamping sebiah looping for sekunder, kita juga meletakkan sebuah pemilihan if yang berfungsi untuk mencetak nilai a jika Mod yang dihasilkan adalah tidak sama dengan 0 dan a yang dihasilkan itu bukanlah 1. Hal ini dilakukan atas dasar bahwa jika tidak ada hasil bagi yang menghasilkan sebuah bilangan bulat (Modulus 0) dan jika a yang dhasilkan itu bukan 1 maka system akan mencetaknya.
7. Didalam looping sekunder tadi, kita membuat agi sebuah loopig tersier dengan konfigurasi batas awal adalah 2 dan batas akhir adalah lebih kecil dari bilangan a maka nilai c akan selalu berada dalam range 2 sampai bilangan a dan tidak akan pernah sama atau melebihinya.
8. Disamping itu, juga kita memberikan iterasi c++. Guna dari pernyataan for tersier ini adalah sebagai faktor pembagi untuk menyelidiki bilangan pria pada setiap bilngan a yang diselidiki.
9. Dalam Tubuh for tersier kita membuat rumusan Modulus dengan rumus a % c.
10. Setelah merumuskan modulus nya, maka akan dibuat pengkondisian. Jika Ada angka yang telah bisa membagi bilangan a maka dapat diketahui bahwa itu bukan bilangan prima sehingga proses dapat dihentikan. Tidak perlu lagi membagi karena keputusan telah diperoleh.
11. Disamping loop tersier terdapat pengkondisian yaitu jika Mod tidak sama dengan 0 maka system akan dikeluarkan dari looping tersier. Jika seandainya pada akhir looping tersier tidak ditemukan sama sekali bilangan yang dapat membagi habis a maka pengkondisian ini akan berlaku. Namun jika tidak maka looping sekunder akan kembali berulang.
Soal 4
Dengan menggunakan pernyataan nested loop, buatlah program berikut:
input: n
output:
0 1 3 6 10 15 21 28 …. Bilangan ke n
Jawab
Dari permasalahan diatas, kita dapat merumuskannya dalam bentuk analisa sebagai berikut .
Untuk nilai awal, kita akan memberikan angka 0 sebagai batasan atau acuan awal. Kemudian untuk barisan atau angka angka berikutnya akan selalu merupakan penjumlahan dari angka pada baris sebelumnya dengan angka yang menyatakan bilangan ke berapa kedudukan bilangan tersebut terhadap bilangan 0. Sehingga kita dapat merumuskannya dengan penjumlahan dengan iterasi bergantung pada nilai iterasi atau kedudukan bilangannya.
Mari kita membuat program sederhana atas masalah diatas.
Ketika kita mencoba untuk mengcompile program yang telah kita buat maka kita akan dapat melihat contoh uji sample program sebagai berikut :
Yuk kita analisa program diatas.
- Pada baris ke-5 kita mendeklarasikan variabel a, b dan c sebagai variabel dengan tipe integer yang akan kita gunakan selama program dijalankan. Namun pada nilai awal c, kita berikan nilai 0. Sebab kita ingin bahwa untuk program pertama akan diawali oleh angka 0.
- Pada baris ke-7 kita akan mulai untuk memasukkan atau menginput harga a yang akan kita gunakan kemudia sebagai acuan banyaknya angka yang akan ditampilkan pada program. Jadi banyaknya angka yang akan dicetak akan bergantung pada nilai a yang diinputkan oleh client.
- Mulai dari baris ke-8 kita membuat perulangan for dengan batasan awal yaitu 1 katena kita akan menentukan banyaknya perulangan yang dilakukan oleh loop. Untuk batasan akhir, kita berikan harga b akan kurang dari atau sama dengan nilai a yang mengisyaratkan bahwa banyaknya perulangan yang dilakukan akan bergantung pada input yang dimasukkan oleh client.
- Dalam tubuh loop tadi, kita mencantumkan sebuah perintah untuk mencetak nilai dari c. Karena pada aaawal program kita mendeklarasikan nilai c dengan 0 maka pada looping yang pertama, nilai yang tercetak pada c akan sama dengan nilai c yang dideklarasikan. Yaitu 0.\
- Kemudian selanjutnya adalah mengkalkulasikan untuk nilai c yang berikutnya apabila loop akan berputar lagi. Sehingga untuk nilai c yang ercetak pada loop akan sama dengan kalkulasi c yang dialkukan pada loop yang sebelumnya.
Soal 5
Pada akhir setiap 4 buah program diatas tambahkan tanyaan “apakah anda ingin keluar (y/t)?”, pertanyaan tersebut hanya bisa di jawab dengan huruf ‘y’ (y kecil) dan ‘t’(t kecil). Dan akan keluar dari program setelah dijawab dengan ‘y’ (y kecil).
Jawab
Dari pertanyaan program diatas, kita diminta untuk menambahkan pertanyaan kepada client diakhir paragraf apakah ingin keluar ataukah tidak. Dan syarat jawaban diatas adalah dengan memberikan input huruf y (kecil) untuk yes dan t (kecil) untuk tidak. Diluar itu, program tidak berbuat apa apa. Ketika client mengetikkan t yang berarti client tidak ingin keluar, maka kita akan mengulang lagi program diatas dari awal dan jika client mengetikkan y maka program akan diiselesaikan. Jika client mengetikkan tombol lain (ngawur) maka program akan menunjukkan kesalahan input.
Mari kita lihat contoh dari program pada setiap program sebelumnya.
Soal 1
Hasil Running
Soal 2
Hasil compile soal 2
Soal 3 (2 compiler berbeda)
Program diatas tidak mengalami error saat menggunakan compiler MinGW dengan hasil sebagai berikut :
Untuk Compiler Online, kita perlu membuat beberapa perubahan dalam syntaksisnya seperti gambar berikut.
Knapa kita mengubah beberapa syntaxnya ??? Karena beberapa compiler terkadang memiliki beberapa perbedaan yang terkadang tidak disadari. Terkadang kita melakukan compile offline padatext editor kita dan dapat berjalan dengan baik namun jika kita memindahkan program kita kedalah compiler online maka akan terjadi beberapa error. Maka kita perlu melakukan adaptasi tergantung compiler apa yang kita gunakan. Jika program diatas dijalankan maka kita akan memperoleh hasil sebagai berikut :
Soal 4
Jika program diatas dijalankan maka kita akan mendapatkan contoh hasil sebagai berikut.
Analisis.
Pada setiap code diatas, secara garis besarnya, kita menerapkan hal yang sama yaitu pada akhir program kita menanyakan kepada client apakah sang client ingin keluar ataukah sang client ingin menjalankannya lagi. Jika sang client menjawab t (untuk tidak) maka kita menyediakan pilihan untuk mengulanginya dari awal lagi program yang telah dibuat. Untuk memeulai dari awalmain program, kita memanfaatkan fungsi goto untuk kembali pada baris sebelumnya yang telah kita berikan label atau tanda untuk mengulangi dari baris atau titik itu. Sehingga prohram dapat dijalankan ulang tanpa harus melakukan compile ulang lagi atau menunggu program selesai kemudian menekan tombol compile lagi. Namun jika seandainya sang client menjawab y (untuk ya) dengan artian sang client ingin keluar dari program maka kita harusmengakhiri program tersebut. Kita memanfaatkan perintah return 0 untuk mengakhiri dengan baik program kita dan mengembalikan lagi stdio.h yang telah kita panggil sebelumnya. Ketikasang client menjawab dengan memasukkan karakter yang tidak ada pada pilihan (y/t) maka kita kana mengonfirmasi bahwa masukan yang diterima tidak valid sehingga program kita hentikan.
Bonussss
Siapa nihh yang suka bonus ???. Nah pada kali ini kita akan menjawab satu permasalahan lagi guna menambah pemahaman kita seputar Nested loop. Semangatttttt
Buatlah program untuk menghitung faktorial dari bilangan yang diinputkan dengan syarat tidak boleh menggunakan operator perkalian hanya dengan operator penambahan!
Contoh : input: 4
output : 24 (faktorial dari 4).
WADAWWW. Panas nihh soalnya. Tapi yuk kita coba bahas bersama. Jangan mengeluh kalau mau sukses. Hahaha.
Analisis Soal
Dari soal diatas, kita mengetahui bahwa Faktorial sebenarnya adalah fungsi perkalian beruntun dri bilangan terbesar yang dicari faktorialnya terhadap bilangan terkecil hingga ke 1 bilangan yang berada dibawahnya. Namun pada permasalahan kali ini, kita akan mencari faktorial tanpa ada unsur perkalian sama sekali sehingga kita hanya diperkenankan emnggunakan penjumlahan. Oleh karena itu, kita perlu menata ulang konsep kita seperti pada gambar dibawah ini.
Dari penataan ulang konsep kita diatas, kita eroleh kesimpulan bahwa diperlukan looping perulangan bertingkat (nested loop untuk memperoleh hasil diatas.
Ayo kita coba untuk membuat program diatas. !!!
Jiks kita mencoba program diatas, maka kita akan menemukan contoh hasil sebagai berikut :
Pada program diatas, umumnya sederhana . Tanpa perklian pun kita dapat menemukan faktorial suatu bilangan menggunakan operasi penjumlahan.
Analisis :
- Pada for fungsi for pertama adalah untuk menentukan tingkatan looping yang telah dilakukan. Misalnya jika kita mencari faktorial 4 maka fungsi for ini akan membatasi operasi tingkat hingga pada loop yang ke 4 saja
- Pada for timgkat kedua adalah untuk menghitung penjumlahan dari faktorial yang dicari dengan kalkulasi e pada nilai sebelumnya dan b pada nilai sebelumnya.
- Baris ke-14 adalah baris penampung d kedalam e untuk dijadikan nilai e berikutnya.
Recent Comments