1.6 Struktur Data dan Modular
Atur cara komputer memerlukan struktur data dan kaedah modularisasi untuk memproses sejumlah data yang besar dengan lebih sistematik, efisien, mudah dibaca, diuji dan dikemas kini. Melalui topik ini, murid diperkenalkan kepada struktur tatasusunan (array) satu dimensi bagi menyimpan koleksi elemen dalam ruang memori berindeks serta penggunaan subatur cara (prosedur dan fungsi) bagi membahagikan masalah atur cara yang kompleks kepada modul-modul kecil.
Objektif Pembelajaran
- Menerangkan struktur tatasusunan (array) satu dimensi merangkumi pengisytiharan nilai dan pengumpukan nilai awal.
- Menggunakan subatur cara dan memahami konsep menghantar parameter ke subatur cara serta mengembalikan data.
- Membezakan antara fungsi (function) dan prosedur (procedure) pada subatur cara.
- Menulis atur cara bermodular yang mengandungi struktur tatasusunan.
Struktur Memori Pemboleh Ubah Mudah lwn Tatasusunan Berindeks
Pemboleh ubah mudah memegang satu nilai dalam satu sel memori, manakala tatasusunan memegang jujukan sel memori bersebelahan yang dirujuk dengan indeks bermula dari 0.
Pemboleh ubah mudah: satu sel memori
Satu nama pemboleh ubah, satu nilai sahaja.
Tatasusunan: enam sel memori berindeks
Satu nama tatasusunan, banyak elemen berindeks.
Penerangan Ringkas
Tatasusunan satu dimensi, subatur cara, parameter, pengembalian data, serta perbezaan prosedur dan fungsi.
Apakah itu tatasusunan?
Tatasusunan ialah pemboleh ubah yang membolehkan koleksi beberapa nilai data (elemen) disimpan dalam satu-satu masa. Setiap elemen disimpan dalam ruang memori berindeks yang tersusun secara berjujukan, iaitu sebelah-menyebelah.
Semua elemen dalam sesuatu tatasusunan Java mestilah daripada jenis data yang sama seperti yang diisytiharkan.
Pemboleh ubah mudah lwn tatasusunan
Pemboleh ubah mudah menyimpan hanya satu nilai data pada satu-satu masa dalam satu sel ingatan.
Tatasusunan pula menyimpan banyak elemen yang berkongsi satu nama pemboleh ubah, dengan indeks integer bermula dari 0 hingga \(n-1\), di mana \(n\) ialah saiz tatasusunan.
Pengisytiharan tatasusunan Java
Pengisytiharan boleh dilakukan dalam dua baris: baris pertama mengisytiharkan nama dan jenis data, manakala baris kedua memperuntukkan saiz memori.
jenisData [] namaTatasusunan;
namaTatasusunan = new jenisData[saizTatasusunan];
int [] senaraiMarkah;
senaraiMarkah = new int[6];
Pengumpukan nilai ke dalam tatasusunan
Satu-persatu mengikut indeks
Nilai diumpuk dengan memanggil nombor indeks, contohnya senaraiMarkah[0] = 34;, senaraiMarkah[1] = 56; sehingga indeks maksimum.
Pengumpukan nilai awal serentak
Nilai awal boleh diumpuk serentak dengan pengisytiharan menggunakan tanda kurung dakap { }. Saiz ditentukan secara automatik mengikut bilangan data.
int [] senaraiMarkah = {34, 56, 78, 89, 56, 95};
Capaian elemen
Elemen dicapai menggunakan sintaks namaTatasusunan[indeks]. Contohnya hariMinggu[0] menghasilkan elemen pertama. Indeks mestilah bernilai integer, bukan rentetan, dan berada dalam batasan 0 hingga saiz tolak 1. Mengakses di luar batasan menghasilkan ralat masa larian (runtime error).
Subatur cara dan modularisasi
Modularisasi memecahkan kod komputer yang panjang dan kompleks kepada beberapa modul atau subatur cara kecil yang mengkhusus kepada tujuan tertentu, seperti menerima input, memproses data atau memaparkan maklumat.
- Projek yang kompleks menjadi lebih ringkas.
- Lebih mudah digunakan semula (reusable).
- Lebih mudah diuji, dinyah pijat (debug) dan dibaiki.
- Membolehkan tugasan pengaturcaraan dibahagikan kepada ahli kumpulan berbeza.
- Lebih mudah menangani projek komputer.
Struktur subatur cara
Setiap subatur cara mempunyai Pengepala (Header) dan Badan (Body). Pengepala terdiri daripada kata kunci khas static, jenis data pulangan (void atau jenis primitif/objek), nama subatur cara, dan bekas parameter ( ). Badan dikepung oleh kurung dakap { } dan mengandungi arahan logik yang berakhir dengan tanda koma bertindih (;).
public static void main(String[] args){ }
Subatur cara main() ialah modul utama yang wajib wujud dalam setiap aplikasi Java. Ia mengandungi baris awal dan akhir pelaksanaan atur cara.
Parameter dan pengembalian data
Parameter
Parameter membolehkan subatur cara menerima nilai daripada subatur cara pemanggil.
Parameter rasmi dinyatakan pada pengepala subatur cara yang dipanggil, manakala parameter sebenar ialah nilai atau argumen yang dihantar semasa panggilan dibuat. Nilai yang dihantar mesti sepadan dari segi jenis data, bilangan dan urutan susunan.
Mengembalikan data
Data dikembalikan menggunakan kata kunci return di baris akhir badan subatur cara. Jenis data pulangan diisytiharkan pada pengepala, contohnya int, double atau String. Jika tiada data dikembalikan, kata kunci void digunakan.
Perbezaan prosedur dan fungsi
| Ciri | Prosedur | Fungsi |
|---|---|---|
| Jenis pulangan | void | Selain void (int, double, String, tatasusunan, dsb.) |
| Pemulangan data | Tidak memulangkan data | Memulangkan tepat satu nilai data menggunakan return nilai; |
| Cara panggilan | Dipanggil terus sebagai penyataan berdiri sendiri, contohnya cariJumlah(5, 8); | Panggilan mesti disambut, contohnya int jumlah = cariJumlah(5, 8); |
| Kegunaan lazim | Memaparkan output atau proses sekali guna | Hasil proses perlu disimpan atau digunakan semula oleh pemanggil |
Persamaan: kedua-duanya mengembalikan kawalan pelaksanaan kepada subatur cara pemanggil setelah selesai.
Fungsi utiliti Java (kelas Math)
| Fungsi | Keterangan |
|---|---|
Math.sqrt(double n) | Memulangkan punca kuasa dua bagi nilai \(n\). |
Math.floor(double n) | Memulangkan integer terdekat yang kurang daripada atau sama dengan \(n\). |
Math.round(double n) | Memulangkan nilai \(n\) dibundarkan kepada integer terdekat. |
Math.max(double m, double n) | Memulangkan nilai terbesar antara \(m\) dan \(n\). |
Math.min(double m, double n) | Memulangkan nilai terkecil antara \(m\) dan \(n\). |
Menulis atur cara bermodular dengan tatasusunan
Pemboleh ubah sejagat diisytiharkan di luar subatur cara tetapi di dalam kelas, dan boleh dikongsi serta dicapai oleh semua subatur cara, contohnya objek Scanner, pemboleh ubah nama dan markah.
Tatasusunan boleh dihantar ke subatur cara dengan kepala subatur cara menerima parameter bertanda []. Contohnya static void paparSenarai(int[] senaraiNombor). Pemprosesan tatasusunan dalam modul lazimnya menggunakan gelung for yang berulang mengikut indeks dari 0 hingga \(n-1\).
Penghantaran tatasusunan secara rujukan
Tatasusunan yang dihantar sebagai parameter dihantar secara rujukan (reference). Pengubahsuaian elemen di dalam subatur cara yang dipanggil akan mengubah nilai elemen dalam subatur cara pemanggil secara langsung, tanpa perlu penyataan return.
Cuba Jawab Dulu
Cuba jawab sendiri dahulu, kemudian tekan butang untuk menyemak.
Jika sebuah tatasusunan diisytiharkan sebagai double[] markah = new double[5];, apakah nombor indeks bagi elemen yang pertama dan elemen yang terakhir?
Indeks bagi elemen pertama ialah 0, manakala indeks bagi elemen terakhir ialah 4.
Apakah perbezaan utama dari segi pemulangan data antara fungsi (function) dan prosedur (procedure)?
Prosedur tidak memulangkan data (menggunakan kata kunci void), manakala fungsi memulangkan satu nilai data ke subatur cara pemanggil menggunakan kata kunci return.
Mengapakah panggilan Math.max(100, 10) dikategorikan sebagai fungsi dan bukannya prosedur?
Kerana Math.max mengembalikan suatu nilai data (iaitu nombor maksimum, 100) kepada pemanggil.
Kesalahan Biasa
- Menggunakan nombor indeks bermula dari 1 dan bukannya 0. Ini menyebabkan indeks terakhir melebihi saiz tatasusunan tolak 1 dan mencetuskan ralat masa larian (ArrayIndexOutOfBoundsException).
- Menghantar argumen dalam urutan atau jenis data yang tidak sepadan dengan parameter rasmi yang diisytiharkan pada pengepala subatur cara.
- Terlupa "menyambut" atau menampung nilai pulangan daripada subatur cara jenis fungsi, contohnya memanggil fungsi tanpa mengumpukkannya kepada pemboleh ubah.
- Menggunakan jenis data pulangan selain
voidpada subatur cara tetapi terlupa menyertakan arahanreturndi dalam badan subatur cara tersebut.
Salah Faham Konsep
Tatasusunan boleh menyimpan campuran pelbagai jenis data seperti nombor integer dan teks secara bersama-sama dalam satu tatasusunan.
Semua elemen dalam sesuatu tatasusunan Java mestilah daripada jenis data yang sama seperti yang diisytiharkan, contohnya int[] hanya untuk integer sahaja.
Prosedur tidak mengembalikan apa-apa sama sekali ke subatur cara pemanggil.
Prosedur tetap mengembalikan kawalan pelaksanaan (control) kepada pemanggil setelah tugasnya selesai, cuma ia tidak memulangkan nilai data.
Apabila tatasusunan diubah di dalam subatur cara, nilai dalam subatur cara pemanggil tidak berubah melainkan dikembalikan dengan return.
Tatasusunan dihantar melalui parameter secara rujukan memori, maka sebarang perubahan elemen dalam subatur cara dipanggil akan mengubah nilai asal secara langsung.
Ringkasan
- Tatasusunan satu dimensi membolehkan data tersusun secara linear dan dicapai secara pantas menggunakan indeks berasaskan sifar (0).
- Konsep modular membahagikan masalah besar kepada subatur cara yang lebih kecil dan terurus.
- Subatur cara terbahagi kepada prosedur (tanpa nilai pulangan/
void) dan fungsi (dengan satu nilai pulangan/return). - Parameter digunakan untuk menghantar maklumat ke subatur cara.
- Penggunaan tatasusunan sebagai parameter membolehkan kumpulan data yang banyak diproses secara sistematik tanpa perlu menyalin pemboleh ubah secara berasingan.
Aktiviti Ringkas
A. Kuiz Objektif
1 Apakah jenis data pulangan yang digunakan dalam pengepala subatur cara bagi mentakrifkan sebuah prosedur?
2 Diberi tatasusunan int[] senarai = {10, 20, 30, 40};. Apakah ralat yang akan berlaku sekiranya arahan System.out.println(senarai[4]); dilaksanakan?
B. Isi Tempat Kosong
3 Nombor indeks bagi elemen pertama dalam sesuatu tatasusunan sentiasa bermula daripada nombor .
4 Di dalam badan fungsi, arahan di baris akhir mesti mengandungi penyataan untuk memulangkan nilai data kepada subatur cara pemanggil.
C. Padankan Fungsi Utiliti Java dengan Penerangannya
Seret fungsi utiliti ke penerangan yang betul. Jika menggunakan telefon, tekan pilihan jawapan dahulu, kemudian tekan kotak padanan.