PROGDAS BAB 5

 Penggunaan Array dan Fungsi

A . Array sebagai Penyimpanan Data

Array (larik) identik dengan kumpulan data-data bertipe sama dan menggunakan nama yang sama. Nilai-nilai data di suatu array disebut dengan elemen-elemen array yang letak urutannya ditunjukkan oleh suatu subscript (indeks). Dengan menggunakan array, sejumlah variabel dapat memakai nama yang sama. Namun demikian, antara satu variabel dengan variabel yang lain di dalam array dibedakan berdasarkan subscript. Sebuah subscript berupa bilangan di dalam tanda kurung siku (kurawal). Melalui subscript inilah setiap elemen array dapat diakses. Nilai subscribe pertama secara default adalah 0. Bila kita menyatakan int x[10], hal ini berarti 10 elemen yang dimulai dari 0. Karena itu elemen terakhir array adalah x[9]. Hal ini terjadi karena pada dasarnya C++ tidak pernah mengecek array.

1. Pengertian Array

Array pada dasarnya adalah sebuah variabel yang memiliki suatu nama tertentu, namun di dalamnya terbagi menjadi berbagai variabel yang dibedakan berdasarkan nomor indeks. Sebuah variabel yang terbagi berdasarkan nomor indeks memiliki tipe data yang sama. Dengan pengecualian pada string karakter, semua tipe hingga sampai saat ini hanya dapat menampung sebuah nilai.

a. Array Dimensi Satu

Array dimensi satu identik dengan data-data akan disimpan dalam satu baris array yang hanya dibutuhkan satu penomoran indeks. Pada dasarnya, data array akan disimpan dalam memori yang berurutan dengan elemen pertama memiliki indeks bernilai 0. Misalnya sebuah variabel nilai_uji yang dideklarasikan sebagai array dengan 9 elemen, maka elemen pertama memiliki indeks sama dengan 0, dan elemen terakhir memiliki indeks 8.



b. Array Dimensi Dua

Array dua dimensi identik dengan perluasan dari array satu dimensi. Array dua dimensi terdiri dari beberapa baris dan beberapa kolom elemen yang bertipe sama, sedangkan pada array satu dimensi hanya terdiri dari sebuah baris dan beberapa kolom elemen saja. Hal ini berarti memberikan kesempatan untuk menyimpan data baik dalam bentuk baris maupun dalam bentuk kolom. Oleh karena menyimpan data ke dalam baris dan kolom, maka dibutuhkan dua buah nilai indeks.

Meskipun pengiriman parameter berupa array dimensi dua memiliki kemiripan dengan pengiriman parameter array dimensi satu, tetapi terdapat perbedaan pokok yang terletak pada array dimensi dua dengan menyebutkan baris dan kolom array tersebut. Hal ini dilakukan dengan mendeklarasikan MAX_ROWS dan MAX_COLS yang digunakan pada pengiriman parameter array dimensi dua dan saat pengiriman parameter harus menyebutkan jumlah dimensi array untuk kolom, sehingga ukuran kolom dapat diketahui. Hal ini dikarenakan adanya pemesanan variabel array di memori.

c. Array Multidimensi

Array multidimensi diterjemahkan sebagai suatu array yang memiliki ukuran lebih dari dua. Bentuk pendeklarasian array multidimensi memiliki kemiripan dengan deklarasi array dimensi satu maupun dimensi dua. Deklarasi array tersebut adalah sebagai berikut.

tipe_array nama_array [ukuran 1][ukuran 2] . . . [ukuran n]

2. Deklarasi Array

Guna mendeklarasikan sebuah array, harus menyebutkan tipe dari array yang dibuat, seperti int, float, ataupun double beserta ukuran array-nya. Guna menentukan ukuran array, maka penempatan jumlah nilai bisa disimpan dalam tanda kurung siku (kurawal) pada sebuah nama array. Saat mendeklarasikan sebuah array, maka compiler C++ akan mengalokasikan memori untuk menampung semua elemen sesuai dengan yang dideklarasikan. Metode yang umum dalam mendeklarasikan variabel array sebagai berikut.

a. Elemen Kosong

Elemen kosong digunakan untuk mendeklarasikan variabel array tanpa memasukkan nilai ke dalam variabel tersebut. Misalnya int nomor [6]; yang berarti instruksi tersebut menyatakan suatu variabel array bernama 'nomor' bertipe integer dideklarasikan dan memesan elemen array berjumlah 6 buah. Nilai 6 yang berada di dalam tanda kurung menunjukkan jumlah elemen array, bukan menunjukkan elemen array yang ke-6. Jadi, elemen array tersebut dimulai dari angka 0 sampai 5. Elemen terakhir dari array umumnya diisi dengan karakter '0'. Karakter ini akan memberitahu compiler bahwa akhir dari elemen array telah dicapai. Walaupun programmer tidak dapat melihat karakter tersebut secara eksplisit, tetapi compiler mampu mengetahui dan membutuhkannya.

b. Elemen Pointer

Elemen pointer digunakan untuk mendeklarasikan variabel array dengan memasukkan nilainya sekaligus ke dalam variabel tersebut. Misalnya int nomor [6] = { 28, 10, 23, 20, 9, 14 }; yang berarti instruksi tersebut menyatakan bahwa suatu variabel array bernama 'nomor' bertipe integer dideklarasikan dan memesan elemen array berjumlah 6 buah. Kemudian, nilai pada setiap elemen array disimpan sesuai urutan pada instruksi tersebut.



3. Mengurutkan Elemen Array

Metode-metode yang digunakan untuk mengurutkan data array, antara lain Exchange Sort, Selection Sort, Insertion Sort, Bubble Sort, Quick Sort, Shell Sort, Binary Insertion Sort, dan lain-lain. Namun, metode yang paling mudah dan banyak digunakan adalah Selection Sort, Bubble Sort, dan Insertion Sort.

a. Selection Sort

Metode Selection Sort menggunakan elemen-elemen yang diperbandingkan satu per satu hingga elemen terakhir dan disusun berdasarkan ketentuan-ketentuan yang berlaku.

Langkah-langkah mengurutkan array menggunakan metode Selection Sort adalah sebagai berikut.

1) Proses 1

Variabel indeks diberi nilai 1 (data ke-1) kemudian data indeks dibandingkan dengan data ke-2. Jika data indeks lebih besar, maka nilai indeksnya diganti dengan 2 (data ke-2). Jika tidak, nilai indeksnya tetap. Kemudian, data indeks dibandingkan lagi dengan data ke-3. Jika datanya lebih besar, maka nilai indeks harus ditukar. Setelah selesai, nilai indeks diperiksa apakah sudah berubah atau belum. Jika nilai indeks mengalami perubahan, maka data ke-1 harus ditukar dengan data indeks.

2) Proses 2

Variabel indeks diberi nilai 2 (data ke-2) kemudian data indeks dibandingkan dengan data ke-3. Jika data indeks lebih besar, maka nilai indeksnya diganti dengan 3 (data ke-3). Kemudian, data indeks dibandingkan lagi dengan data ke-4. Jika datanya lebih besar, maka nilai indeks harus ditukar. Setelah selesai, nilai indeks diperiksa sudah berubah atau belum. Jika nilai indeks mengalami perubahan, maka data ke-2 ditukar dengan data indeks. Demikian seterusnya hingga proses berlanjut di mana jumlah elemen array dikurangi satu.


b. Bubble Sort

Metode Bubble Sort sebagai sebuah pengurutan yang diinspirasi oleh gelembung sabun yang ada di dalam permukaan air. Oleh karena berat jenis gelembung sabun lebih ringan dibandingkan berat jenis air, maka gelembung sabun akan selalu meng- apung. Prinsip pengapungan ini juga dipakai pada pengurutan gelembung. Elemen paling kecil "diapungkan" yang artinya diangkat ke atas (atau ke ujung paling kiri) melalui pertukaran. Proses pengapungan ini dilakukan sebanyak n kali langkah.

Langkah-langkah mengurutkan array menggunakan metode Bubble Sort dilakukan dengan membandingkan data ke-1 dengan data ke-2. Jika data ke-1 lebih besar, maka kedua data ditukar. Selanjutnya membandingkan data ke-2 dengan data ke-3, jika data ke-2 lebih besar, kedua data ditukar lagi hingga data terakhir, sehingga data kedudukannya akan bergeser-geser dengan sendirinya. Hal yang perlu dipahami adalah pergeseran data (pembandingan) sampai data terakhir yang dikurangi satu.

c. Insertion Sort

Metode Insertion Sort sebagai bentuk pengurutan dengan menyisipkan elemen larik pada posisi yang tepat. Pencarian posisi yang tepat dilakukan dengan pencarian beruntun. Selama pencarian posisi yang tepat dilakukan pergeseran elemen larik. Metode jenis ini memiliki kemiripan dengan cara orang mengurutkan kartu selembar demi selembar, kartu diambil dan disisipkan (insert) ke tempat yang seharusnya. Langkah-langkah mengurutkan array menggunakan metode Insertion Sort dilakukan dengan pengurutan yang dimulai dari data ke-2 sampai dengan data terakhir. Jika ditemukan data yang lebih kecil/besar, segera ditempatkan pada posisi yang seharusnya.


1. Jenis-Jenis Fungsi

Beberapa keuntungan memakai fungsi di antaranya menguraikan tugas pemrograman rumit menjadi langkah-langkah yang lebih sederhana atau kecil; menyembunyikan informasi dari user, sehingga mencegah adanya perbuatan iseng seperti memodifikasi atau mengubah program yang kita buat; mengurangi duplikasi kode (kode yang sama ditulis berulang-ulang) dalam program; dapat menggunakan kode yang ditulis dalam berbagai program berbeda, serta memecah program besar menjadi beberapa tahap, sehingga mempermudah pengerjaan dalam sebuah proyek. Beberapa jenis fungsi dalam bahasa C++ adalah sebagai berikut.

a. Fungsi Void

Fungsi Void identik dengan fungsi yang dapat mengembalikan nilai, di mana fungsi utamanya dalam semua program yang telah dinyatakan untuk kembali ke nilai int pada sebuah sistem operasi. Sedangkan Return 0; diterjemahkan sebagai sebuah pernyataan yang menyebabkan nilai 0 bila fungsi utama telah selesai dalam melaksanakan tugasnya. Namun demikian, tidak semua fungsi diperlukan untuk kembali ke nilai tersebut. Beberapa fungsi hanya melakukan satu atau lebih pernyataan dan kemudian mengakhiri juga bisa disebut sebagai fungsi void. Perhatikan contoh berikut!

b. Fungsi Printf()

Fungsi Printf() banyak digunakan dalam menampilkan data. Berbagai jenis data dapat ditampilkan ke layar dengan fungsi ini. Bentuk penulisan dari Printf () adalah sebagai berikut.

Printf("string kontrol", argumen1, argumen2, ...);

Penggunaan string kontrol dapat berupa keterangan yang akan ditampilkan pada layar beserta penentu format seperti %d, %f. Penentu format dipakai untuk memberi tahu kompiler mengenai jenis data yang akan ditampilkan. Sedangkan, argumen ini dapat berupa variabel, konstanta, atau ungkapan.

c. Fungsi Putchar() dan Puts()

Fungsi Putchar() digunakan khusus untuk menampilkan sebuah karakter ke layar. Penampilan karakter tidak diakhiri dengan perpindahan baris, misalnya putchar('A'); sama dengan printf("%c", A);. Sedangkan fungsi Puts() lebih dikhususkan untuk menampilkan data string ke layar. Sifat fungsi Puts() yaitu string akan ditampilkan secara otomatis dan diakhiri dengan \n (pindah baris). Dibandingkan dengan fungsi printf(), perintah ini memiliki kode mesin yang lebih pendek.

d. Fungsi Scanf()

Fungsi Scanf() merupakan fungsi yang dapat digunakan untuk memasukkan berbagai jenis data. Bentuk Scanf() pada dasarnya menyerupai fungsi Printf() yang melibatkan penentu format. Hal-hal yang perlu diperhatikan dalam pemakaian fungsi Scanf() adalah sebagai berikut.

1) Fungsi Scanf() memberi pergantian baris secara otomatis, artinya tidak perlu memberi \n untuk berpindah ke baris berikutnya.

2) Fungsi Scanf() memakai penentu format, tetapi tidak memerlukan penentu lebar field. Bentuk yang salah misalnya scanf("12.2f",&gaji).

3) Variabel yang dipakai di dalam Fungsi scanf() harus didahului dengan operator alarmatang dipakai dia sukkan beberapa data secara bersama-sama dalam satu baris, di mana setiap data dipisahkan oleh sebuah karakter. Karakter-karakter yang bertindak sebagai pemisah data, antara lain tanda koma ('), garis hubung (-), titik dua (:), dan spasi.

e. Fungsi Getch() dan Getche()

Fungsi Getch() dan Getche() dipakai untuk membaca sebuah karakter dengan sifat karakter yang dimasukkan tanpa perlu diakhiri dengan menekan enter. Fungsi Getch() merupakan singkatan dari get character yang artinya membaca karakter tetapi isian data yang dimasukkan tidak akan ditampilkan di layar. Sedangkan, nama fungsi Getche() sebenarnya singkatan dari get character and echo yang artinya membaca karakter lalu tampilkan di layar. Jadi setelah mengetikkan sebuah huruf, huruf tersebut akan ditampilkan di layar tanpa menekan enter. Pada dasarnya, program yang menggunakan fungsi Printf(), Putchar(), Scanf(), dan Puts() mengandung baris yang berisi #include. Selain itu, program yang melibatkan fungsi Getche() atau Getch() mengandung baris yang berisi #include.

2. Pemanggilan Fungsi



Fungsi utama (main function) akan dipanggil secara otomatis saat program dijalankan, namun fungsi yang lain harus dijalankan melalui pernyataan function call. Ketika sebuah fungsi dipanggil, maka program akan melakukan dan melaksanakan semua pernyataan yang ada di dalam tubuh fungsi tersebut. Dalam hal ini, fungsi header (header function) yang identik dengan bagian dari definisi fungsi yang menyatakan kembali sebuah fungsi dari jenis, nama, dan daftar parameter yang bukan diakhiri dengan titik koma karena definisi dari tubuh fungsi yang mengikutinya. Sedangkan, function call (fungsi panggilan) identik dengan pernyataan yang melaksanakan fungsi tersebut yang harus diakhiri dengan titik koma seperti pernyataan C++ lainnya. Pada dasarnya, function call tidak terdapat dalam daftar, dan jika program tersebut tidak berada di dalam fungsi, maka tanda kurung harus dikosongkan.

Salah satu cara agar compiler mengetahui informasi tentang fungsi, misalnya jenis return, jumlah parameter, dan setiap jenis parameter sebelumnya yang dipanggil dengan cara menempatkan fungsi definisi sebelum semua panggilan terjadi. Dalam menyatakan pemanggilan fungsi dapat menggunakan struktur kendali, seperti loop, pernyataan IF, pernyataan If-Else, maupun pernyataan Switch. Setiap panggilan pernyataan menyebabkan program melakukan percabangan ke salah satu fungsi dan selanjutnya kembali ke menu utama bila fungsi selesai. Sebuah fungsi sering juga dipanggil dalam sebuah hierarki (berlapis).

3. Prototipe Fungsi

Sebuah parameter membolehkan informasi untuk dikirim ke salah satu fungsi dengan mengetahui jumlah parameter yang digunakan beserta jenis parameter dan jenis kembalinya fungsi tersebut. Selain fungsi utama, fungsi-fungsi yang lain tidak memiliki parameter dan cara kembalinya menggunakan jenis void. Beberapa cara untuk memastikan compiler memiliki informasi yang diperlukan adalah sebagai berikut.

a. Menempatkan fungsi yang telah didefinisikan sebelum melakukan panggilan ke fungsi tersebut.

b. Menyatakan fungsi dengan fungsi prototipe (a function prototype).

Pada dasarnya, prototipe memiliki kemiripan dengan fungsi header, hanya keberadaan titik koma pada bagian akhir sebagai pembeda. Prototipe fungsi umumnya ditempatkan pada bagian atas program sehingga compiler akan melakukan eksekusi terlebih dahulu sebelum fungsi tersebut dipanggil.

4. Pengiriman Data pada Fungsi

Nilai-nilai yang akan dikirim pada sebuah fungsi disebut sebagai argumen. Sebuah parameter diterjemahkan sebagai suatu variabel khusus yang menangani nilai yang dilewatkan sebagai argumen menuju sebuah fungsi. Seorang programmer mengetahui cara menggunakan argumen dalam function call. Dengan menggunakan parameter tersebut, seorang programmer dapat merancang sendiri fungsi yang mampu menerima data.

5. Passing Data by Value dan Pass by Reference

Parameter khusus merupakan variabel tujuan yang ditentukan melalui tanda kurung dari definisi fungsi. Tujuan parameter tersebut adalah menyampaikan informasi yang dilakukan oleh argumen dan tercantum dalam tanda kurung pada function call. Secara umum, ketika informasi disampaikan ke dalam fungsi disebut passed by value yang berarti parameter tersebut menerima copy dari nilai yang disampaikan kepadanya. Jika sebuah parameter nilai berubah di dalam fungsi, hal tersebut tidak akan berpengaruh pada argumen asli. Hal ini disebabkan oleh sebuah ekspresi yang identik dengan sesuatu yang memiliki nilai. Jika suatu fungsi (function) mengembalikan nilai, maka panggilan ke fungsi (function) tersebut merupakan sebuah ekspresi. Sedangkan pass by reference digunakan untuk melewatkan parameter dengan referensi (pass by reference) yang akan memengaruhi nilai setelah fungsi dijalankan. Untuk melewatkan parameter dengan referensi, penambahan karakter ampersand ('&') diletakkan di depan nama parameter. Bentuk peneparan dari pass by reference adalah sebagai berikut.


6. Pengembalian Nilai Boolean

Pada umumnya, sesuatu yang dibutuhkan fungsi dalam menguji argumen akan mengembalikan nilai benar atau salah disertai adanya indikasi kondisi yang ada. Misalnya, dalam sebuah program yang membutuhkan sesuatu untuk mengetahui apakah nomor tersebut genap atau ganjil, maka sebuah fungsi ditulis dengan benar jika argumen genap dan false jika argumen tersebut ganjil. Perhatikan kode pemrograman sebagai berikut!


Sebuah fungsi isEven dikerjakan ketika pernyataan IF dieksekusi, sehingga fungsi isEven disebut "val" sebagai argumen. Jika val tersebut bernilai genap, maka kondisi isEven adalah benar dan sebaliknya akan salah.

Komentar