Tujuan
Kalian akan belajar memahami konsep dan cara kerja perulangan dalam pemrograman. Setelah menyelesaikan aktivitas ini, kalian diharapkan mampu menerapkan perulangan dan menghubungkannya dengan kejadian seharihari.
- Pernahkah kalian melakukan aktivitas yang sama berulang kali? Eits... tidak perlu jauh-jauh, untuk melangkah saja, kita mengulang pergerakan kaki kanan dan kiri. Apakah kalian selalu berpikir sebelum melakukan setiap langkah? Pertanyaan terakhir tersebut dapat ditanyakan pada semua kegiatan perulangan yang kalian lakukan.
- Membaca buku - kalian membalikkan halaman buku setiap selesai membaca halaman tersebut.
Salah satu keunggulan program komputer daripada manusia ialah kemampuannya untuk mengolah data yang berukuran besar atau melaksanakan suatu aksi berulang kali dalam periode waktu yang lama tanpa merasa bosan atau lelah. Hal ini dimungkinkan dengan adanya suatu kontrol perulangan. Pernyataan perulangan atau loop merupakan struktur program untuk keperluan iterasi, yaitu memproses satu atau beberapa pernyataan secara berulang (looping) berdasarkan kondisi tertentu. Program C menyediakan tiga bentuk pernyataan loop, yaitu:
- for loop
- while loop
- do...while loop
Struktur Kontrol Perulangan for
Pernyataan ini umumnya digunakan untuk memproses pernyataan secara berulang-ulang, dengan jumlah perulangan yang dilakukan telah diketahui sebelumnya. Misalnya, berjalan sebanyak n langkah ke depan, atau mencetak barisan dari suku pertama hingga suku ke-n. Struktur kontrol perulangan for adalah sebagai berikut:
for (expr1; expr2; expr3)
{
<statement>; ...
}
Struktur di atas akan dijalankan melalui proses berikut.
- Ekspresi expr1 akan dieksekusi ketika program menjalankan struktur for tersebut. Ekspresi ini biasanya berisi inisialisasi suatu variabel counter yang digunakan untuk menghitung jumlah perulangan yang telah dilakukan.
- Ekspresi expr2 merupakan suatu ekspresi bernilai benar atau salah (boolean) yang akan dicek sebelum pernyataan di dalam blok struktur dieksekusi. Apabila ekspresi ini bernilai benar, pernyataan akan dieksekusi. Sebaliknya, apabila ekspresi bernilai salah, pernyataan tidak akan dieksekusi dan perulangan berakhir. Dengan kata lain, pada bagian ini, kalian menuliskan sebuah pernyataan yang merupakan kondisi berhenti (stopping criteria) untuk memastikan perulangan yang kalian buat memiliki langkah yang terbatas (dipastikan berhenti).
- Ekspresi expr3 merupakan sebuah pernyataan yang dijalankan setelah semua pernyataan di dalam struktur for dieksekusi. Biasanya, pernyataan ini dibuat untuk mengubah nilai variabel counter yang akan makin mendekati kondisi berhenti (memastikan nilai counter akan konvergen ke kondisi berhenti).
Walaupun ketiga ekspresi tersebut bersifat opsional (tidak harus ada), kalian disarankan untuk menuliskan ketiga ekspresi tersebut saat membuat program dengan jelas dan lengkap. Untuk saat ini, kalian perlu memahami teknik untuk menulis ketiga ekspresi tersebut dengan baik.
$ads={1}
Perhatikan contoh kode program menulis bilangan bulat berikut. Pada contoh tersebut, program akan menulis bilangan bulat dari 0 hingga kurang dari n. Telusurilah kode program tersebut dengan teknik penelusuran yang telah kalian pelajari pada saat menelusuri suatu diagram alir!
/* Program Menulis Bilangan Bulat Sebanyak n Kali */
#include <stdio.h>
int main() {
int i, n;
scanf("%d", &n);
for (i=0; i < n; i=i+1) { // i = i+1 dapat juga ditulis i++
printf("%d\n", i);
}
return 0;
}
Keluaran program tersebut saat diberi masukan 5 adalah:
0
1
2
3
4
Pada contoh tersebut, variabel counter yang digunakan ialah i yang nilainya diinisialisasi (diberi nilai awal) dengan nilai 0. Pada bahasa C, lazimnya counter, dimulai dari nilai 0. Berbeda dengan proses pencacahan yang biasa kalian lakukan dari 1 di dunia nyata. Hal ini terkait dengan beberapa aspek teknis di bahasa C yang dimulai dari 0. Misalnya, di kelas XI nanti, kalian akan menggunakan struktur data array yang dimulai dari indeks ke-0. Perlu diingat bahwa inisiasi dengan 0 ini hanyalah suatu kebiasaan masyarakat pemrogram dalam bahasa C, dan kalian tetap dapat melakukan pencacahan mulai dari 1. Kalian dapat mencoba mengubah kode program di atas sehingga counter berjalan dari 1. Selain counter yang berjalan menaik (ascending), kalian juga dapat membuat suatu counter yang berjalan turun (descending). Contoh ini disajikan misalnya pada Diagram Alir 4 dan 5 pada bagian algoritma.
Pernyataan yang ada pada expr1 hingga expr3 dapat ditulis menjadi deretan instruksi yang dipisahkan dengan tanda koma. Misalnya, terdapat pada contoh program berikut.
for (i=0, j=0; i<3; ++i, j++) {
printf("%d %d", i, j);
}
Urutan pengerjaan akan sama seperti pada contoh sebelumnya. Akan tetapi, ada dua pernyataan yang akan dijalankan pada expr1 hingga expr3.
Praktik Baik Pemrograman
Pada saat merancang sebuah struktur perulangan
for
, kalian perlu memastikan agar kondisi berhenti pasti akan tercapai (konvergen). Apabila kondisi berhenti tidak pernah tercapai, akibatnya, struktur ini akan berjalan terus-menerus dan menyebabkan terjadinya suatu perulangan yang tidak terbatas (infinite loop). Apabila hal ini terjadi, program akan dibekukan oleh sistem operasi, bahkan akan dihentikan. Perhatikan contoh berikut.
/* Program dengan Perulangan tak Terbatas */
#include <stdio.h>
int main(){
int i, n;
scanf("%d", &n);
for(i=0; i<n; i--)
printf("%d\n", n)
return 0;
}
Dapat dilihat bahwa pada kode tersebut, nilai counter i akan berkurang dan tidak akan pernah melebihi nilai n jika n diisi dengan suatu bilangan bulat positif.
Ayo Cari Tahu
Lakukan penelusuran pada kode program tersebut dengan nilai n = 3.
Struktur Kontrol Perulangan While
Saat merancang perulangan, kalian bisa jadi tidak dapat menentukan berapa kali perulangan akan dilakukan. Akan tetapi, kalian mengetahui kondisi berhentinya. Misalkan instruksi berikut pada dunia nyata, “berjalan luruslah sampai ujung jalan, kemudian belok kiri.” Instruksi tersebut tidak memberikan gambaran jelas jumlah langkah yang akan kalian lakukan. Namun, secara naluriah, kalian mengetahui kapan kalian harus berhenti berjalan lurus, lalu berbelok ke arah kiri.
Pada program, suatu struktur kontrol while
dikenal untuk melakukan perulangan seperti pada contoh di atas. Struktur kontrol tersebut dapat ditulis sebagai berikut. Pernyataan akan dieksekusi terus-menerus selama ekspresi kondisi bernilai benar.
while (ekspresi kondisi) {
<pernyataan>;
...
}
Sebagai contoh, misalnya kalian akan menulis kode program untuk membaca dan menuliskan kembali bilangan bulat positif. Hal ini terus dilakukan hingga program membaca nilai -1. Program tersebut dapat kalian lihat di bawah ini.
/* Program Baca Tulis Bilangan */
#include <stdio.h>
int main() {
int bilangan;
scanf("%d", &bilangan);
while (bilangan != -1) {
printf("%d\n", bilangan);
scanf("%d", &bilangan);
}
return 0;
}
Ayo Cari Tahu
Lakukan penelusuran pada kode program ini dengan masukan yang diberikan ialah 1 2 3 4 -1.
Struktur Kontrol Perulangan Do – While
Struktur kontrol do-while
memiliki perilaku yang mirip dengan while
, yaitu kalian hanya mengetahui kondisi berhenti dari perulangan tersebut. Perbedaannya ialah struktur do-while dipastikan akan dikerjakan setidaknya satu kali. Bentuk umum pernyataan do .. while
adalah sebagai berikut.
do {
<pernyataan>;
} while (ekspresi kondisi);
Salah satu contoh penggunaan struktur do-while
ialah ketika kalian menulis sebuah program interaktif yang akan meminta pengguna memasukkan kembali suatu nilai hingga nilai tersebut memenuhi suatu syarat. Hal ini akan sering kalian alami ketika kalian diminta untuk mengisi ulang (retry) saat menggunakan sebuah program atau mengisi sebuah formulir elektronik.
Misal, program berikut akan terus meminta pengguna memasukkan nilai sampai pengguna tersebut memasukkan bilangan bulat positif.
/* Program Veriikasi Masukan Pengguna */
#include <stdio.h>
int main() {
int bilangan;
do
scanf("%d\n", &bilangan);
while (!(bilangan > 0));
printf("Anda telah memasukkan bilangan bulat positif\n");
return 0;
}
Struktur Kontrol Perulangan Bersarang
Sama seperti struktur kontrol keputusan, kalian dapat meletakkan struktur kontrol perulangan secara bersarang. Misalnya, pada contoh program berikut yang akan mencetak suatu pola berbentuk persegi menggunakan karakter asterisk ‘*’.
/* Program dengan FOR Bersarang */
#include <stdio.h>
const int PANJANG = 2;
const int TINGGI = 3;
int main() {
int i, j;
for (i = 0; i < TINGGI; i++) {
for (j = 0; j < PANJANG; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
Ayo Cari Tahu
Lakukanlah penelusuran pada kode program tersebut!
Pada contoh di atas, counter pada struktur for
terluar dan terdalam tidak saling berkaitan. Pada beberapa kasus nantinya, kedua counter tersebut bisa saja saling berkaitan. Misalnya, pada program berikut:
/* Program dengan Dua Counter */
#include <stdio.h>
int main() {
int i, j, m, n;
scanf("%d %d", &m, &n);
for (i=1; i<=m; i++) {
for (j=i; j<=n; j++) {
printf("%d", j);
if (j==n)
printf("\n");
else
printf(" ");
}
}
return 0;
}
Pada program tersebut, kalian dapat melihat bahwa nilai awal counter j
akan berpengaruh pada nilai counter i
. Saat dijalankan, keluaran dari program tersebut ialah:
1 2 3 4 5
2 3 4 5
3 4 5
Tentunya, tidak ada batasan jumlah struktur yang kalian buat secara bersarang. Kalian pun juga dapat memadukan struktur perulangan dengan struktur keputusan sehingga menghasilkan program yang lebih kompleks.
Ayo, Kita Berlatih 6: Latihan Struktur Kontrol Perulangan
Problem 1: Menghitung Mundur (Tingkat Kesulitan: **)
Buatlah kode program berdasarkan Diagram Alir 4 pada bagian algoritma untuk mencetak bilangan secara hitung mundur.
Problem 2: Menghitung Rataan (Tingkat Kesulitan: ***)
Deskripsi Soal:
Buatlah sebuah program yang akan menghitung rata-rata dari n buah bilangan.
Format Masukan:
Baris pertama berisi sebuah bilangan bulat positif n yang menunjukkan banyaknya data, sedangkan baris berikutnya berisi n buah bilangan bulat. Nilai n maksimal 1000, dan besarnya bilangan yang harus dihitung rata-ratanya berada pada rentang -1 miliar hingga 1 miliar.
Format Keluaran:
Nilai rata-rata dari n buah bilangan masukan. Nilai rata-rata tersebut dituliskan sebagai bilangan riil dengan dua angka di belakang titik desimal.
Contoh Kasus Uji
Masukan | Keluaran |
---|---|
10 20 30 | 0,833333 |
Problem 3: Mencari Bilangan Terbesar (Tingkat Kesulitan: ***)
Buatlah kode program berdasarkan Diagram Alir 5 pada bagian algoritma untuk mencari bilangan terbesar dari sekumpulan bilangan yang diberikan.
Problem 4: Membuat Mesin Sortir Kembang Kol (Tingkat Kesulitan: ****)
Deskripsi Soal:
Kalian akan membantu seorang petani kembang kol untuk menyortir kembang kol yang telah dipanen berdasarkan ukurannya. Kembang kol tersebut akan dikelompokkan menjadi berukuran kecil (< 50 gram per buah), berukuran sedang (50-200 gram per buah), dan berukuran jumbo (> 200 gram per buah). Selama ini, petani tersebut menyortir kembang kol menggunakan tenaga manusia. Karena kalian telah memiliki kemampuan untuk membuat program yang dapat melakukan hal tersebut secara otomatis, kalian pun mengajak petani tersebut untuk menerapkan future practice dengan menerapkan otomatisasi. Bantulah petani tersebut dengan program buatan kalian! Ini akan menjadi langkah awal bagi petani tersebut untuk menjadi seorang petani modern.
Format Masukan:
Program kalian akan membaca berat dari setiap kembang kol dalam satuan gram. Berat setiap kembang kol ditulis dalam bilangan riil. Apabila semua kembang kol telah tersortir, program kalian akan membaca nilai -1.
Format Keluaran:
Tiga buah bilangan bulat yang merupakan jumlah kembang kol pada setiap kategori, yaitu kecil, sedang, dan jumbo. Setiap bilangan ditulis pada baris yang berbeda.
Contoh Kasus Uji
Masukan | Keluaran |
---|---|
100.0 20.5 300.1 40.1 -1 | 2 |
1 | |
1 |
Problem 5: Memperbaiki Program (Tingkat Kesulitan: *****)
Deskripsi Soal:
Buatlah sebuah program untuk menggambar sebuah pola X dengan menggunakan karakter asterisk (*).
Format Masukan:
Sebuah bilangan bulat n yang menyatakan ukuran pola yang akan dibuat. Nilai n berada pada rentang 1 hingga 20.
Format Keluaran:
Pola huruf X yang sesuai dengan ukuran yang dimasukkan. Perhatikan perbedaan untuk banyak baris ganjil dan genap pada contoh keluaran.
Contoh Kasus Uji
Masukan | Keluaran |
---|---|
5 | *---* |
-*-*--*-- | |
-*-**---* | |
6 | *----* -*-- |
*--**--*-- | |
**----* |
Pada soal ini, kalian telah diberikan salah satu program yang dibuat untuk menyelesaikan permasalahan di atas. Akan tetapi, program tersebut tidak dapat dijalankan dan ditulis dengan tidak rapi! Pelajarilah kode program di bawah ini. Perbaiki program tersebut hingga dapat berjalan dengan benar. Sesuaikan pula penulisannya dengan mengikuti praktik baik yang telah kalian pelajari hingga saat ini.
int main(){
int N, i, j;
scanf("%d", &n);
for(i=0; i>n; i++){
for(j=0; j<n; j++){
if(j==i || j==n-i-1)printf("-");
else printf("*");
}
printf("\n");
}
Ayo Renungkan
Jawablah pertanyaan berikut dalam Lembar Releksi pada Buku Kerja. Jangan lupa mencatat kegiatan dalam Jurnal.
- Pada bagian ini, kalian mendapatkan banyak konsep baru tentang program. Seperti apa perasaan kalian saat ini?
- Apakah kalian bereksperimen dengan contoh-contoh yang diberikan di buku? Jika ya, pengetahuan paling menarik apa yang kalian temukan dari hasil eksperimen tersebut?
- Pada Problem 6, apakah kalian memikirkan dampak sosial yang terjadi pada pekerja yang selama ini menyortir kembang kol secara manual tersebut? Jika kalian menjadi petani tersebut, apa yang akan kalian lakukan kepada pekerja tersebut? Apa yang kalian lakukan jika kalian menjadi pekerja tersebut?
- Kesalahan apa yang sering kalian lakukan saat membuat program menggunakan struktur kontrol perulangan?
Posting Komentar
Komentar yang dirasa merugikan situs ini akan dihapus. Terima kasih telah berkunjung