Kod arahan
What this chapter coversMatlamat bab ini
- Murid boleh menerangkan maksud dan penggunaan pangkalan data dan Structured Query Language (SQL) (4.1.1)
- Murid boleh menyenaraikan entiti dan atribut berdasarkan situasi dalam suatu masalah (4.1.2)
- Murid boleh mengenal pasti dan menerangkan kekunci primer dan kekunci asing (4.1.3)
- Murid boleh mengenal pasti dan menjelaskan kekardinalan (cardinality) antara entiti dalam hubungan one to one (1:1) dan one to many (1:M) (4.1.4)
- Murid boleh membina pangkalan data yang terdiri daripada entiti (table), atribut (field) dan hubungan (4.1.5)
- Murid boleh menghasilkan borang (form) dan memasukkan data dalam jadual melalui borang bagi pangkalan data yang telah dibina (4.1.6)
- Murid boleh menggunakan arahan SQL yang melibatkan SELECT..., SELECT...WHERE dan SELECT...ORDER BY (4.1.7)
- Murid boleh menggunakan arahan SQL melibatkan ungkapan Boolean bagi operator OR dan operator AND (4.1.8)
- Murid boleh menjana laporan berdasarkan hasil pertanyaan (query) (4.1.9)
- Murid boleh menerangkan fungsi struktur function dan procedure dalam atur cara (4.2.1)
- Murid boleh memberi contoh penggunaan pernyataan function dalaman (built-in) dan function dihasilkan sendiri (user-defined) (4.2.2)
- Murid boleh menulis pernyataan function dan procedure (4.2.3)
- Murid boleh menghasilkan atur cara yang melibatkan function dan procedure (4.2.4)
- Murid boleh menguji atur cara dan membaiki ralat pada atur cara yang dihasilkan (4.2.5)
- Murid boleh menghasilkan atur cara yang melibatkan gabungan struktur kod arahan bagi menyelesaikan masalah dalam kehidupan seharian (4.2.6)
4.1Pangkalan data dan SQL
Data ialah fakta yang belum diproses. Maklumat ialah hasil daripada pengumpulan, pemprosesan dan penganalisisan data, dan boleh digunakan untuk membuat keputusan. Data yang belum diproses kepada maklumat tidak bermakna. Contoh (Rajah 4.1): data "Bunga Raya; Bunga Sepatu; Hibiscus; Hibiscus Rosasinensis; 28 Julai 1960" menjadi maklumat apabila dikumpul, diproses dan dianalisis: nama Bunga Raya, nama tradisional Bunga Sepatu, nama Inggeris Hibiscus, nama saintifik Hibiscus Rosasinensis dan tarikh diisytiharkan sebagai Bunga Kebangsaan, 28 Julai 1960.
Buku teks Asas Sains Komputer Tingkatan 3, ms. 114.
4.1.1 Maksud dan penggunaan pangkalan data dan SQL
Organisasi mengurus data dengan sistem fail atau sistem pangkalan data. Sistem fail ada dua jenis: manual (fail kertas dalam kabinet fail) dan elektronik (data direkod dalam fail komputer).
| Aspek | Sistem fail | Sistem pangkalan data |
|---|---|---|
| Capaian data | Tidak boleh dilakukan serentak dan lambat | Dicapai oleh semua pihak secara serentak dalam masa yang singkat |
| Keselamatan data | Tidak terjamin | Ada kata laluan khusus dan sandaran data yang mantap |
| Pengulangan data | Berlaku pengulangan data | Kawalan berpusat; perulangan data yang sama dapat dielakkan |
| Perkongsian data | Terhad | Dikongsi dengan semua pihak yang terlibat secara efisien |
Buku teks Asas Sains Komputer Tingkatan 3, ms. 117.
Fungsi sistem pangkalan data: membina sistem pemprosesan data yang cekap dan menyepadukan koleksi data. Kebaikannya: memudahkan capaian, pengurusan dan pengemaskinian data; mengelakkan pengulangan data; menjaga integriti data; menjaga keselamatan data. Contoh: Sistem Inventori Barangan di pasar raya dan Sistem Analisis Peperiksaan Sekolah (SAPS) untuk semua sekolah di Malaysia (Rajah 4.3).
SELECT * FROM abc sama kesannya dengan select * from abc. Tiga pernyataan yang dipelajari: SELECT...FROM, SELECT...WHERE dan SELECT...ORDER BY.Tunjuk jawapanSembunyi jawapan
4.1.2 Entiti dan atribut
Buku teks Asas Sains Komputer Tingkatan 3, ms. 118.
Contoh entiti dalam bilik darjah (Rajah 4.8): MURID, GURU, PERALATAN. Makmal komputer (Rajah 4.9): entiti KOMPUTER dengan atribut Model, Jenama, Nombor_Siri dan Buatan. Kantin sekolah (Rajah 4.10): entiti PEKERJA (Nama, Alamat, Nombor_Telefon) dan MAKANAN (Jenis_Makanan, Harga).
Dalam pangkalan data hubungan, setiap entiti diwakili oleh satu jadual. Setiap lajur ialah satu medan (satu atribut). Setiap baris ialah satu rekod, iaitu data bagi setiap atribut seorang murid.
| Istilah dalam jadual | Maksud |
|---|---|
| Jadual (table) | mewakili satu entiti |
| Lajur atau medan (field) | mewakili satu atribut |
| Baris atau rekod (record) | himpunan atribut bagi satu murid, satu rekod |
4.1.3 Kekunci primer dan kekunci asing
Kepentingan kekunci primer: memelihara integriti data, mengelakkan pertindihan rekod lama dan baharu, menjimatkan ruang storan komputer dan memberi nilai unik untuk simpanan data. Kekunci primer biasanya di medan pertama sebelah kiri jadual; kekunci asing di medan kedua selepas kekunci primer.
| Aspek | Kekunci primer | Kekunci asing |
|---|---|---|
| Input | Tidak boleh menerima nilai kosong (null) | Boleh menerima beberapa nilai kosong (null) |
| Bilangan dalam jadual | Satu sahaja | Boleh lebih daripada satu |
Contoh 4.4: BUTIR_MURID dan BUTIR_PENJAGA
Entiti BUTIR_MURID: kekunci primer ialah ID_Murid. Entiti BUTIR_PENJAGA: kekunci primer ialah No_Daftar; kekunci asing ialah ID_Murid kerana ia kekunci primer dalam BUTIR_MURID.
Buku teks Asas Sains Komputer Tingkatan 3, ms. 122.
ID_Murid sebagai kekunci primer dalam kedua-dua jadual. Dalam BUTIR_PENJAGA ia ialah kekunci asing, kerana kekunci primer jadual itu ialah No_Daftar.Tunjuk jawapanSembunyi jawapan
4.1.4 Kekardinalan (cardinality) antara entiti dalam hubungan
Dalam gambar rajah perhubungan entiti (Entity Relationship Diagram, ERD), hubungan dilukis dengan simbol rombus dan lazimnya dinamakan dengan kata kerja.
Buku teks Asas Sains Komputer Tingkatan 3, ms. 124.
| Jenis | Maksud | Contoh dalam buku |
|---|---|---|
| One to one (1:1), satu-ke-satu | Satu entiti berhubung dengan hanya satu entiti yang lain, dan sebaliknya. Setiap rekod dalam satu jadual berhubung dengan satu rekod sahaja dalam jadual lain. | Seorang pengetua menguruskan sebuah sekolah dan sebuah sekolah hanya mempunyai seorang pengetua. |
| One to many (1:M), satu-ke-banyak | Satu entiti berhubung dengan satu atau lebih entiti yang lain. Satu rekod berhubung dengan satu atau lebih rekod dalam jadual lain. | Seorang murid dapat meminjam banyak buku tetapi sebuah buku hanya dipinjam oleh seorang murid. |
Dalam contoh 1:M, jadual BUKU mempunyai lajur ID_Murid (kekunci asing) yang menunjuk kepada murid yang meminjam. Satu ID_Murid boleh muncul pada beberapa baris BUKU (PSS002 meminjam dua buku: F101 dan F102). Selain itu masih ada satu jenis lagi, many to many (M:N), tetapi tidak dipelajari dalam bab ini.
Contoh 4.5: lakar jenis kekardinalan
(a) Seorang guru menjadi guru kelas bagi satu kelas sahaja: 1:1, GURU 1 mengurus 1 KELAS.
(b) Seorang murid boleh mendaftar lebih daripada satu acara sukan: 1:M, MURID 1 mendaftar M ACARA.
Tunjuk jawapanSembunyi jawapan
4.1.5 Membina pangkalan data
Pangkalan data dibina dengan perisian sistem pengurusan pangkalan data (Database Management System, DBMS). Contoh DBMS dalam buku: Microsoft Access. DBMS lain: Microsoft SQL Server, Oracle, Informix, DB2, Sybase, Postgress dan MySQL.
| Objek Access | Kegunaan |
|---|---|
| Jadual (Table) | Satu entiti diwakili satu jadual. Atribut disimpan dalam lajur (medan). Data disimpan mengikut baris; setiap baris ialah satu rekod. |
| Pertanyaan (Query) | Meminta data tertentu daripada satu atau lebih jadual. Data boleh dicetak atau dipaparkan dan boleh diubah. |
| Borang (Form) | Antara muka antara pengguna dan komputer. Memudahkan kemasukan data; memaparkan data dalam bentuk selain baris dan lajur; mengubah, melihat atau memasukkan data. |
| Laporan (Report) | Menyediakan laporan berdasarkan data dalam satu atau lebih jadual atau berdasarkan satu pertanyaan. Boleh dicetak atau menganalisis data. |
Buku teks Asas Sains Komputer Tingkatan 3, ms. 127.
Lima langkah merancang pangkalan data: contoh SisMaP
SMK Sinar Gemilang sukar menganalisis keputusan peperiksaan kerana markah dikira secara manual. Anda bercadang membina Sistem Maklumat Peperiksaan (SisMaP).
| Langkah | Tugas | Hasil dalam SisMaP |
|---|---|---|
| 1 | Tentukan tujuan pembinaan pangkalan data | Menghasilkan analisis keputusan peperiksaan dengan cepat |
| 2 | Tentukan entiti | MURID dan MARKAH |
| 3 | Tentukan atribut | MURID: ID_Murid, Nama_Murid, Jantina, Kaum, Nama_Kelas, Nama_Guru_Kelas. MARKAH: ID_Markah, ID_Murid, BM, BI, Sn, Mate, Sej, Geo, ASK |
| 4 | Tentukan hubungan dan kekardinalan | MURID: kekunci primer ID_Murid. MARKAH: kekunci primer ID_Markah, kekunci asing ID_Murid. Hubungan one to many (1:M) |
| 5 | Hasilkan pangkalan data | Jadual, borang, pertanyaan (query) dengan SQL, dan laporan |
Buku teks Asas Sains Komputer Tingkatan 3, ms. 128.
Langkah dalam Microsoft Access
- Mulakan: lancarkan Access, klik Blank database, pilih lokasi simpanan, bina folder PANGKALAN DATA dalam Documents, namakan fail TUGASAN1, klik OK, kemudian Create (Rajah 4.16).
- Entiti (table): ubah nama Table1 kepada MURID dan klik OK (Rajah 4.17).
- Atribut (field): klik View, pilih Design View, masukkan nama medan dalam Field Name dan pilih jenis data dalam Data Type (Rajah 4.18).
- Kekunci primer: klik nama medan yang unik, klik Primary Key (Rajah 4.19). Access menjadikan atribut pertama kekunci primer secara automatik.
- Jadual kedua: klik Create pada bar menu, klik ikon Table, klik View, pilih Design View dan namakan jadual MARKAH (Rajah 4.20).
- Hubungan: klik Database Tools, klik Relationships, klik Show Table, Add MURID dan MARKAH, klik Close. Seret
ID_Muriddaripada MURID keID_Muriddalam MARKAH. Dalam Edit Relationships, tanda Enforce Referential Integrity dan klik Create (Rajah 4.22 dan 4.23). - Isi data: klik View, pilih Datasheet View dan taip data untuk setiap medan (Rajah 4.24).

Buku teks Asas Sains Komputer Tingkatan 3, ms. 131.
| Jenis data | Penerangan |
|---|---|
| AutoNumber | Menjana pembilang secara automatik dalam susunan menaik |
| Text / Short Text | Panjang terhad kepada maksimum 255 aksara |
| Memo / Long Text | Boleh menyimpan teks sehingga satu Gigabait |
| Number | Hanya menyimpan nilai angka |
| Date/Time | Nilai tarikh dan masa bagi tahun bermula daripada 100 hingga 9999 |
Dalam Edit Relationships: Enforce Referential Integrity memastikan kekunci asing dalam satu jadual ialah kekunci primer dalam jadual lain; Cascade Update Related Fields mengemas kini kekunci asing secara automatik jika kekunci primer berubah; Cascade Delete Related Records menghapuskan kekunci asing jika kekunci primer dihapus (Rajah 4.23).

Buku teks Asas Sains Komputer Tingkatan 3, ms. 136.
Tunjuk jawapanSembunyi jawapan
4.1.6 Menghasilkan borang dan memasukkan data melalui borang
Borang (form) menyusun dan mengurus rekod dengan lebih efisien. Ia ialah antara muka pengguna yang interaktif untuk memasukkan dan mengubah suai data. Borang dijana secara automatik dengan Form Wizard.
- Buka pangkalan data TUGASAN1. Klik tab Create, kemudian Form Wizard.
- Pilih jadual MURID, klik
>>untuk memilih semua medan, klik Next. - Pilih susun atur Columnar, klik Next.
- Taip nama borang (BORANG MURID), klik Finish (Rajah 4.25).
Simbol dalam Form Wizard: > pindah medan yang diklik; >> pindah semua medan; < dan << pindah balik (ms. 141).
| Susun atur | Maksud |
|---|---|
| Columnar | Rekod dipaparkan satu demi satu |
| Tabular | Semua rekod dipaparkan dalam bentuk jadual yang menarik |
| Datasheet | Semua rekod dipaparkan dalam bentuk helaian data |
| Justified | Semua medan disusun pada baris-baris blok yang mempunyai margin kiri dan kanan yang tetap |

Buku teks Asas Sains Komputer Tingkatan 3, ms. 143.
Borang daripada dua jadual (Rajah 4.27): dalam Form Wizard, pilih semua medan MURID dan semua medan MARKAH, klik Next, pilih Form with subform(s) (dua borang saling berhubung), pilih susun atur subform Datasheet, namakan Borang Murid dan Borang Markah (Subform), klik Finish. Pengguna memasukkan data untuk dua jadual tanpa menaip ID_Murid berulang kali.
Memasukkan data melalui borang (Rajah 4.28): klik ikon rekod baharu di bahagian bawah borang, taip data dalam ruangan kosong dan tekan Enter untuk medan seterusnya. ID_Murid dalam Borang Markah dimasukkan secara automatik apabila ID_Murid diisi dalam Borang Murid. Ada dua cara memasukkan data: terus ke dalam jadual, atau melalui borang.
4.1.7 Penggunaan pernyataan SQL
DBMS menggunakan arahan SQL untuk mencapai data daripada rekod dalam pangkalan. Sintaks ialah set peraturan yang menetapkan perintah yang boleh digunakan dan cara menulisnya supaya boleh difahami DBMS. Sintaks SQL berasaskan sintaks bahasa Inggeris. Semua contoh menggunakan entiti MURID (Rajah 4.30):
| ID_Murid | Nama_Murid | Jantina | Kaum | Nama_Kelas | Nama_Guru_Kelas |
|---|---|---|---|---|---|
| SM101 | DAMIA ZAHRAA BINTI RAHIM | PEREMPUAN | MELAYU | 3 ASERTIF | FATIMAH BINTI SEMAN |
| SM102 | DHIA ARISSA BINTI MALIK | PEREMPUAN | MELAYU | 3 BIJAK | ZAKIAH BINTI YUSOF |
| SM103 | DENISH RAIMI BIN ZAINAL | LELAKI | MELAYU | 3 CEKAL | MUSTAFA BIN ROSLAN |
| SM104 | TAN XUE LIEH | LELAKI | CINA | 3 DINAMIK | TEOH JEE YEE |
| SM105 | KUMAR A/L RAMESH | LELAKI | INDIA | 3 EFISIEN | RIMALA A/P SAMY |
| SM106 | JESSICA HENG MUI MUI | PEREMPUAN | CINA | 3 FIKIR | LIM CHOII PENG |
| SM107 | KHAIR MUIZ BIN ABD RAHIM | LELAKI | MELAYU | 3 GIGIH | CHANDRAN A/L SUMAN |
| SM108 | DEVI A/P MUTHU | PEREMPUAN | INDIA | 3 EFISIEN | RIMALA A/P SAMY |
Buku teks Asas Sains Komputer Tingkatan 3, ms. 150.
(i) Pernyataan SELECT...FROM
SELECT memilih atribut yang dikehendaki. FROM menyatakan nama entiti (jadual) untuk capaian data.
SELECT atribut_1, atribut_2, atribut_3, atribut_N FROM nama_jadual;
Contoh 1: pilih dua atribut
SELECT ID_Murid, Nama_Murid FROM MURID;
Output: lapan baris, hanya lajur ID_Murid dan Nama_Murid (SM101 DAMIA ZAHRAA BINTI RAHIM hingga SM108 DEVI A/P MUTHU), seperti Rajah 4.31.
Contoh 2: pilih semua atribut
SELECT * FROM MURID;
Simbol * memilih semua atribut. Output: lapan baris dan enam lajur (Rajah 4.32).
(ii) Pernyataan SELECT...WHERE
Klausa WHERE mencapai data yang memenuhi sesuatu kriteria sahaja, jadi data lebih khusus.
SELECT atribut_1, atribut_2,...atribut_N FROM nama_jadual WHERE kriteria;
Contoh: murid perempuan
SELECT Nama_Murid, Jantina, Kaum FROM MURID WHERE Jantina = "PEREMPUAN";
Output (Rajah 4.33): DAMIA ZAHRAA BINTI RAHIM (MELAYU), DHIA ARISSA BINTI MALIK (MELAYU), JESSICA HENG MUI MUI (CINA), DEVI A/P MUTHU (INDIA).
(iii) Pernyataan SELECT...ORDER BY
ORDER BY mengisih data yang dicapai: ASC = menaik (A hingga Z), DESC = menurun (Z hingga A), berdasarkan satu atau lebih medan isihan.
SELECT atribut_1, atribut_2,...atribut_N FROM nama_jadual WHERE kriteria ORDER BY atribut_1 ASC/DESC;
Contoh 1: menaik (ASC)
SELECT Nama_Murid, Jantina, Kaum FROM MURID WHERE Jantina = "PEREMPUAN" ORDER BY Nama_Murid ASC;
Output (Rajah 4.34), A ke Z: DAMIA ZAHRAA BINTI RAHIM, DEVI A/P MUTHU, DHIA ARISSA BINTI MALIK, JESSICA HENG MUI MUI.
Contoh 2: menurun (DESC)
SELECT Nama_Murid, Jantina, Kaum FROM MURID WHERE Jantina = "PEREMPUAN" ORDER BY Nama_Murid DESC;
Output (Rajah 4.35), Z ke A: JESSICA HENG MUI MUI, DHIA ARISSA BINTI MALIK, DEVI A/P MUTHU, DAMIA ZAHRAA BINTI RAHIM.
Buku teks Asas Sains Komputer Tingkatan 3, ms. 153.
Menghasilkan pertanyaan (query) dengan SQL di Access (Rajah 4.36)
- Klik Create, kemudian Query Design.
- Pilih jadual MURID, klik Add.
- Klik View, pilih SQL View.
- Taip
SELECT * FROM MURIDdan klik Run. - Klik kanan pada Query1, klik Save, tukar nama kepada PERTANYAAN 1, klik OK.
Tunjuk jawapanSembunyi jawapan
SELECT Nama_Murid, Kaum FROM MURID WHERE Jantina = "LELAKI" ORDER BY Nama_Murid ASC;Hasil: DENISH RAIMI BIN ZAINAL (MELAYU), KHAIR MUIZ BIN ABD RAHIM (MELAYU), KUMAR A/L RAMESH (INDIA), TAN XUE LIEH (CINA).
4.1.8 Pernyataan SQL yang melibatkan ungkapan Boolean
Operator logik (operator Boolean) dalam SQL: OR, AND, EQV, NOT dan XOR. Dua yang paling kerap digunakan ialah OR dan AND. Operator logik menggabungkan dua atau lebih kriteria menjadi satu ungkapan Boolean yang bernilai BENAR atau PALSU. BENAR boleh ditulis 1 dan PALSU 0.
| P | Q | P OR Q | P AND Q |
|---|---|---|---|
| BENAR | BENAR | BENAR | BENAR |
| BENAR | PALSU | BENAR | PALSU |
| PALSU | BENAR | BENAR | PALSU |
| PALSU | PALSU | PALSU | PALSU |
OR memberi BENAR jika salah satu kriteria benar. AND memberi BENAR hanya jika kedua-dua kriteria benar. Simbol: OR ditulis v, AND ditulis ^.
SELECT atribut_1, atribut_2, ..., atribut_N FROM nama_jadual WHERE kriteria_1 OR kriteria_2, ... OR kriteria_N; SELECT atribut_1, atribut_2, ..., atribut_N FROM nama_jadual WHERE kriteria_1 AND kriteria_2 AND ...kriteria_N;
Contoh 4.6: operator OR
SELECT ID_Murid, Nama_Murid, Jantina, Kaum FROM MURID WHERE Jantina = "PEREMPUAN" OR Kaum = "MELAYU";
Output (Rajah 4.38): enam rekod, iaitu SM101, SM102, SM103, SM106, SM107 dan SM108.
Contoh 4.7: operator AND
SELECT ID_Murid, Nama_Murid, Jantina, Kaum FROM MURID WHERE Jantina = "PEREMPUAN" AND Kaum = "MELAYU";
Output (Rajah 4.39): dua rekod sahaja, iaitu SM101 dan SM102.
WHERE Jantina = "LELAKI" AND Kaum = "CINA"?Tunjuk jawapanSembunyi jawapan
4.1.9 Menjana laporan berdasarkan hasil pertanyaan (query)
Laporan (report) ialah cara yang sistematik untuk mengurus dan mempersembahkan data daripada pangkalan data dalam format yang menarik dan bermaklumat, untuk cetakan dan paparan pada skrin. Laporan boleh dihasilkan daripada satu jadual atau beberapa jadual. Jika daripada beberapa jadual, hasilkan pertanyaan (query) dahulu. Laporan dijana daripada jadual atau pertanyaan.
- Klik Create, kemudian Report Wizard.
- Pilih jadual atau query yang hendak digunakan.
- Klik
>>untuk memilih semua medan dalam Available Fields. - Medan terpilih muncul dalam Selected Fields. Klik Next.
- Klik
>atau<untuk menentukan susunan medan. Klik Next. - Pilih medan isihan dan klik Ascending atau Descending. Klik Next.
- Pilih Layout dan Orientation. Klik Next.
- Masukkan nama laporan. Klik Finish (Rajah 4.40).
Susun atur laporan: Stepped Layout, Block Layout dan Outline Layout (Rajah 4.41). Bilangan maksimum atribut dalam laporan ialah 255. Laporan juga boleh dijana dengan Report hanya dengan satu klik.

Buku teks Asas Sains Komputer Tingkatan 3, ms. 164.
4.2Struktur kod arahan
Satu masalah dibahagikan kepada submasalah melalui leraian. Setiap submasalah ada algoritma khusus. Dalam fasa pengekodan, algoritma tugas utama menjadi atur cara utama dan algoritma tugas kecil menjadi subatur cara yang dipanggil function atau procedure. Buku ini menggunakan bahasa pengaturcaraan Python (sumber terbuka, mula digunakan pada tahun 1991).
4.2.1 Fungsi function dan procedure dalam atur cara
Function dan procedure menjadikan kod lebih kemas, teratur, sistematik, bermodular serta mudah dinyahpepijat dan diselenggara. Dalam Python, procedure tidak wujud secara berasingan kerana ia dianggap implicit function: ia tetap memulangkan nilai None (nilai lalai Python) dan hanya memaparkan maklumat.
| Aspek | Function | Procedure |
|---|---|---|
| Ciri sama | Ada nama khusus yang eksplisit; berparameter atau tidak; melaksanakan urutan arahan untuk satu tugas; boleh digunakan berulang kali | Sama seperti function |
| Input (argumen) | Perlu menerima nilai input | Tidak semestinya menerima input |
| Pemulangan | Memulangkan satu atau beberapa nilai (nombor, aksara atau jenis data lain) | Tidak memulangkan sebarang nilai kecuali nilai lalai None |
| Jenis | Built-in function (sedia ada) dan user-defined (ditulis pengguna) | Ditulis oleh pengguna |
Buku teks Asas Sains Komputer Tingkatan 3, ms. 169.
Tunjuk jawapanSembunyi jawapan
4.2.2 Penggunaan pernyataan function
Function dibahagi kepada built-in function (fungsi dalaman) dan user-defined function (fungsi dihasilkan sendiri). Kedua-duanya melakukan tugas yang khusus.
(i) Function dalaman (built-in)
Built-in function sedia ada dan disimpan dalam library bahasa pengaturcaraan. Kod sumbernya tidak boleh dilihat, namanya deskriptif dan tidak boleh ditukar. Tugasnya terhad dan ringkas. Dalam Python, fungsi input dan output (input(), print()) ialah built-in function yang sering digunakan. Sekumpulan built-in function Python boleh digunakan terus tanpa menyatakan nama fail library.
Contoh 4.8: sum( ), max( ), min( ) dan index( )
Cari murid dengan jumlah markah tertinggi dan terendah. Markah lima murid bagi BM, BI, Mate dan Sains (Jadual 4.11).
#Menyimpan markah setiap murid dalam senarai
murid_1 = [87, 70, 80, 78]
murid_2 = [95, 80, 65, 75]
# murid_3, murid_4 dan murid_5 ditulis dengan cara yang sama
murid_5 = [65, 78, 68, 65]
#Menyimpan nama setiap murid dalam urutan senarai nama
nama = ["Ali bin Azmi", "Aminah binti Yusof", "Chong Yee Ling", "Dayang Minsu",
"Denish A/L Kathigasu"]
#Menjumlahkan markah setiap murid
jumlah_1 = sum(murid_1)
jumlah_2 = sum(murid_2)
# jumlah_3 dan jumlah_4 dengan cara yang sama
jumlah_5 = sum(murid_5)
#Menyimpan jumlah markah setiap murid dalam senarai jumlah
jumlah = [jumlah_1, jumlah_2, jumlah_3, jumlah_4, jumlah_5]
#Mencari markah tertinggi dan terendah dalam senarai jumlah
tertinggi = max(jumlah)
terendah = min(jumlah)
#Menggunakan sub-function untuk mencari indeks
indeks_tertinggi = jumlah.index(tertinggi)
indeks_terendah = jumlah.index(terendah)
#Menggunakan sub-function untuk mencari nama murid
murid_markah_tertinggi = nama[indeks_tertinggi]
murid_markah_terendah = nama[indeks_terendah]
#Mencetak nama berserta markah tertinggi dan terendah
print(murid_markah_tertinggi, "memperoleh jumlah markah tertinggi, iaitu ", tertinggi)
print(murid_markah_terendah, "memperoleh jumlah markah terendah, iaitu ", terendah)Output (Rajah 4.46):
Chong Yee Ling memperoleh jumlah markah tertinggi, iaitu 334 Denish A/L Kathigasu memperoleh jumlah markah terendah, iaitu 276
Semua markah: murid_3 = [74, 85, 90, 85], murid_4 = [55, 85, 71, 68] (Jadual 4.11). Semakan: jumlah ialah 315, 315, 334, 279 dan 276. max = 334 (indeks 2, Chong Yee Ling) dan min = 276 (indeks 4, Denish A/L Kathigasu). Indeks bermula dari 0.
Buku teks Asas Sains Komputer Tingkatan 3, ms. 171.
(ii) Function dihasilkan sendiri (user-defined)
User-defined function ialah satu set arahan yang ditulis pengatur cara untuk tugas khas yang berulang dalam atur cara utama. Namanya mesti deskriptif. Ia ditulis kerana tiada built-in function yang memenuhi kehendak. Ia boleh menerima argumen dan memulangkan nilai kepada pemanggilnya.
Contoh 4.9: kuasa dua
# Fungsi yang mengira kuasa dua
def kuasadua(x):
return x*x
# Bahagian utama atur cara
# Minta pengguna memasukkan satu nombor
nom = int(input("Masukkan satu nombor integer: "))
# panggilan fungsi
nom_kuasa = kuasadua(nom)
print("Kuasa dua bagi",nom,"ialah",nom_kuasa)Output (Rajah 4.48): jika input 2, paparan Kuasa dua bagi 2 ialah 4; jika input 5, Kuasa dua bagi 5 ialah 25.
Function kuasadua: menerima argumen dan menyimpannya dalam parameter x, mengira x kuasa dua, dan memulangkan hasil kepada pernyataan yang memanggilnya. input() ialah built-in function yang membolehkan pengguna memasukkan nombor (Uji Minda 4.17).
Contoh 4.10: function yang memulangkan dua nilai
""" User-defined function yang memulangkan nombor besar di kiri
dan nombor kecil di kanan """
def besar_kecil(x,y):
if x > y:
return x, y
else:
return y, x
# Bahagian utama atur cara
# Minta pengguna memasukkan dua nombor
a = int(input("Masukkan nombor integer yang pertama: "))
b = int(input("Masukkan nombor integer yang kedua: "))
# panggilan user-defined function
[besar, kecil] = besar_kecil(a,b)
print("Nombor",besar,"lebih besar daripada",kecil)Output jika input 6 dan 9: Nombor 9 lebih besar daripada 6 (Rajah 4.50).
Buku teks Asas Sains Komputer Tingkatan 3, ms. 173.
| Aspek | Built-in function | User-defined function |
|---|---|---|
| Asal | Datang sekali dengan bahasa pengaturcaraan | Ditulis oleh pengatur cara |
| Nama | Unik, deskriptif, terpelihara, tidak boleh diubah | Sebarang nama yang tidak bercanggah dengan kata kunci bahasa |
| Argumen | Perlu argumen | Boleh ada atau tanpa argumen |
| Kod sumber | Tidak boleh dilihat | Boleh dilihat dan diubah |
| Struktur | Ada nama (pengepala) dan badan function | Ada nama (pengepala), badan function dan pernyataan return |
4.2.3 Menulis pernyataan function dan procedure
Function
User-defined function ditakrifkan di permulaan atur cara, kemudian dipanggil setiap kali tugas khasnya diperlukan. Sintaks:
def nama_function (parameter):
badan function
return (nilai)
defialah kata kunci untuk mentakrifkan function.- Nama function mencerminkan tugasnya.
- Parameter ialah pemboleh ubah yang menerima argumen; ditulis dalam tanda kurungan ( ).
- Pentakrifan nama dan parameter mesti berakhir dengan titik bertindih (:).
- Badan function bermula sebaris selepas nama dan mesti inden dari jidar kiri.
returnmemulangkan nilai atau output.
Dalam kebanyakan bahasa, return memulangkan satu nilai. Dalam Python ia boleh memulangkan satu nilai atau sekumpulan nilai yang diasingkan koma:
def hasiltambah (x,y):
jumlah = x + y
return (jumlah) # Situasi 1; Situasi 2: return (x + y)
def susun_naik (x, y): # Situasi 3: dua nilai
if x > y:
return (y, x)
else:
return (x, y)
Situasi 1: satu nilai tunggal. Situasi 2: satu nilai daripada ungkapan. Situasi 3: dua nilai dalam susunan menaik.
Contoh 4.11: simulasi permainan batu seremban
Function bilangan_batu(x) menerima bilangan batu (lima) dan menghantarnya kepada random.randint( ). Nilai pertama ialah batu yang berjaya ditimbang; nilai itu dihantar semula untuk mendapat batu yang berjaya ditangkap. Gelung while mengulang aktiviti sehingga pemain berhenti.
import random
# User-defined function untuk simulasi menimbang batu
def bilangan_batu(x):
hasil =(random.randint(0,x))
return hasil
# Membuat panggilan function.
# Hantar nilai bilangan batu yang digunakan ke dalam bilangan_batu()
terus = "Y"
while terus == "Y":
hasil_timbang = bilangan_batu(5)
print("Hasil timbangan anda ialah " + str(hasil_timbang) + " batu.")
# Menangkap batu. Membuat panggilan fungsi.
# Hantar hasil timbangan ke dalam bilangan_batu()
if hasil_timbang > 0:
tangkap = bilangan_batu(hasil_timbang)
print("Hasil tangkapan anda ialah " + str(tangkap))
terus = input("\nTeruskan [Y] atau Berhenti [T]? Tekan [Y|T] ")
print("")Buku teks Asas Sains Komputer Tingkatan 3, ms. 177.
Procedure
Sintaks procedure hampir sama dengan function, cuma tidak memulangkan nilai. Jika tiada parameter, tanda kurungan dibiarkan kosong. Selepas procedure selesai, pelaksanaan kembali ke baris selepas pemanggilan.
def nama_procedure (parameter):
badan procedure
Contoh 4.12: lirik lagu "Selamat Hari Jadi"
Tanpa procedure, empat baris print yang sama ditaip semula untuk setiap murid. Dengan procedure lirik( ) hanya dua baris panggilan diperlukan:
# Menggunakan procedure untuk lirik lagu
def lirik(nama):
print("Selamat hari jadi!")
print("Selamat hari jadi!")
print("Selamat hari jadi",nama)
print("Selamat hari jadi!")
print()
# Mencetak lirik lagu untuk pelajar
lirik("Ali")
lirik("Raju")Faedah: menjimatkan masa menaip, ralat berkurang, kod lebih kemas.
Buku teks Asas Sains Komputer Tingkatan 3, ms. 179.
def dan inden pada badan function atau procedure. Dalam def menu() tanpa titik bertindih, Python memaparkan ralat sintaks.salam(nama) yang mencetak "Selamat pagi" diikuti nama, dan panggil untuk "Aini".Tunjuk jawapanSembunyi jawapan
def salam(nama):
print("Selamat pagi", nama)
salam("Aini")Output: Selamat pagi Aini. Tiada return, jadi ia procedure.4.2.4 Menulis atur cara yang melibatkan function dan procedure
Kepentingan function dan procedure: kod boleh digunakan terus atau berulang kali tanpa ditulis semula; boleh digunakan dalam atur cara lain; atur cara lebih teratur, kemas, bermodular dan mudah difahami; memudahkan nyahpepijat; mengurangkan kemungkinan ralat; boleh dikongsikan; menjimatkan masa (Rajah 4.58).
Contoh 4.13: kalkulator bermenu
Atur cara kalkulator melakukan tambah, tolak, darab dan bahagi bagi dua integer. Menu: 1. Tambah, 2. Tolak, 3. Darab, 4. Bahagi, 5. Tamat. Fasa pembangunan atur cara:
Analisis: input ialah pilihan menu dan dua nombor, proses ialah operasi yang dipilih, output ialah jawapan. Reka bentuk: algoritma tugas kecil, pseudokod, carta alir dan antara muka. Pengekodan: sintaks function, procedure, input, proses dan output serta jenis data input. Kemudian pengujian, penyahpepijatan dan dokumentasi.
Pseudokod pertama mempunyai corak berulang (setiap pilihan meminta dua nombor). Dengan leraian, ia dipecahkan kepada empat subpseudokod: menu, dptPilihanPengguna, dptDuaNombor dan kiraCetak. Pseudokod utama yang dimurnikan (subpseudokod kiraCetak (a, b) memilih operasi mengikut jenisOperator 1 hingga 4 dengan Lain jika):
Pseudokod utama (selepas leraian): Setkan aktif = 1; Selagi aktif == 1 panggil menu, Setkan jenisOperasi = panggil dptPilihanPengguna; jika jenisOperasi == 5 setkan aktif = 0, jika tidak Setkan nom1 dan nom2 = panggil dptDuaNombor dan Panggil kiraCetak (nom1, nom2); selepas gelung papar "Terima kasih kerana menggunakan saya.".
Buku teks Asas Sains Komputer Tingkatan 3, ms. 185.
Simbol dalam carta alir: bujur panjang = mula atau tamat; segi empat = proses; berlian = keputusan (Ya atau Tidak); segi empat dengan garis tepi berganda = panggilan subatur cara (konvensyen carta alir, bukan daripada ms. 185).
Kod Python (fasa pengekodan):
# Procedure menu()
def menu():
print("Kalkulator Bermenu")
print("1. Tambah")
print("2. Tolak")
print("3. Darab")
print("4. Bahagi")
print("5. Tamat")
# Function dptPilihanPengguna()
def dptPilihanPengguna():
noPilihan = 0
while (noPilihan < 1) or (noPilihan > 5):
noPilihan = int(input("Pilihan anda [1 hingga 5]: "))
return noPilihan
# Function dptDuaNombor()
def dptDuaNombor():
nombor1 = int(input("Masukkan nombor pertama : "))
nombor2 = int(input("Masukkan nombor kedua : "))
return nombor1, nombor2
# Procedure kiraCetak()
def kiraCetak(jenisOperator, a, b):
if jenisOperator == 1:
print("Output: " + str(a) + " + " + str(b) + " = " + str(a + b) +"\n")
elif jenisOperator == 2:
print("Output: " + str(a) + " - " + str(b) + " = " + str(a - b) +"\n")
elif jenisOperator == 3:
print("Output: " + str(a) + " * " + str(b) + " = " + str(a * b) +"\n")
elif jenisOperator == 4:
print("Output: " + str(a) + " / " + str(b) + " = " + str(a / b) +"\n")
# main ---------------------------------------------------------------
aktif = 1
while aktif == 1:
menu()
jenisOperasi = dptPilihanPengguna()
if jenisOperasi == 5:
aktif = 0
else:
[nom1, nom2] = dptDuaNombor()
kiraCetak(jenisOperasi, nom1, nom2)
print("Terima kasih kerana menggunakan saya.")
Buku teks Asas Sains Komputer Tingkatan 3, ms. 186.
Output contoh (Rajah 4.60): pilihan 1 dengan 4 dan 7 memberi Output: 4 + 7 = 11; pilihan 4 dengan 3 dan 5 memberi 3 / 5 = 0.6; pilihan 5 menamatkan atur cara.
dptPilihanPengguna() dan dptDuaNombor() memulangkan nilai (ada return), maka ia function. menu() dan kiraCetak() hanya mencetak, maka ia procedure.4.2.5 Menguji atur cara dan membaiki ralat
Ralat pengaturcaraan dinamakan pepijat (bugs). Proses menjejaki ralat ialah nyahpepijat (debugging). Tiga kategori ralat: ralat sintaks, ralat masa larian dan ralat logik. Function dan procedure boleh diuji dan dinyahpepijat walaupun atur cara utama belum siap. Teknik step through tidak digunakan sepenuhnya kerana function dan procedure modular; setiap subatur cara diuji dan dibaiki sehingga bebas ralat sebelum digunakan dalam atur cara utama.
| Jenis ralat | Ciri | Contoh dalam buku |
|---|---|---|
| Ralat sintaks (syntax error) | Kod tidak menepati tatabahasa bahasa; tidak dapat dilaksanakan. Pelaksanaan terhenti pada baris itu dan mesej ralat dipaparkan. | print "Cetak teks anda." tanpa kurungan |
| Ralat masa larian (runtime error) | Timbul semasa atur cara dilaksanakan; pelaksanaan terhenti tiba-tiba dan mesej ralat dipaparkan. Sintaks betul. | ZeroDivisionError: pembahagian dengan sifar |
| Ralat logik (logic error) | Atur cara tidak berhenti dan tiada mesej ralat, tetapi output tidak betul atau tindakan tidak dijangka. Sukar dikesan. | Jawapan 5 dibanding dengan 5 memberi "Salah!" kerana jenis data berbeza |
Ralat sintaks
Sintaks Python dan C berbeza. Python menggunakan elif, titik bertindih (:) pada baris yang bermula dengan kata kunci, dan tidak menggunakan { } (Jadual 4.12). Contoh C: if (a== b) { ... } else if (a > b); Python: if (a== b) : dan elif (a > b) :.
Contoh 4.14: ralat sintaks dalam procedure ulang( )
def ulang():
for i in range (3):
print "Cetak teks anda."Python memaparkan SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Cetak teks anda.")? Selepas dibaiki dengan kurungan, print ("Cetak teks anda."), dan procedure dipanggil dengan ulang():
Output: Cetak teks anda. dicetak tiga kali.
Contoh 4.15: function kuasadua(x) boleh diuji dengan hasil=kuasadua(4) kemudian print(hasil) (Ramli), atau terus print(kuasadua(4)) (Kien Tien). Kedua-duanya memberi output 16.
Contoh 4.16: semak kod dan baiki ralat (piramid)
Atur cara mengira isi padu piramid bertapak segi empat sama, (1/3) x sisi x sisi x tinggi. Kod asal mentakrifkan def kira_Isipadu_piramid(a,b): tetapi badannya menggunakan sisi dan tinggi, dan atur cara utama memanggil kira_Isipadu_piramid(a,b).
Output: NameError: name 'a' is not defined.
- Uji function dahulu dengan
print(kira_Isipadu_piramid(2,3)):NameError: name 'sisi' is not defined. - Baiki: parameter menjadi
def kira_Isipadu_piramid(sisi,tinggi):. - Uji atur cara utama: tiga pernyataan pertama tiada ralat.
- Uji pernyataan pemanggil: hantar pemboleh ubah yang wujud:
print("Isi Padu Piramid =",kira_Isipadu_piramid(sisi,tinggi)).
Semakan dengan sisi = 4 dan tinggi = 3: (1/3) x 4 x 4 x 3 = 16.0.
Buku teks Asas Sains Komputer Tingkatan 3, ms. 192.
Ralat masa larian
Contoh 4.17: ZeroDivisionError dalam kira_purata
# Function mengira purata
def kira_purata(x,y):
purata = jumlah / bilangan
return(purata)
# Atur cara utama
senaraiNo = []
cont = True
while cont:
try:
nom = float(input("Masukkan nombor [X utk berhenti]: "))
senaraiNo.append(nom)
except ValueError:
cont = False
bilangan = len(senaraiNo)
jumlah = sum(senaraiNo)
print("Purata = ",str(kira_purata(jumlah,bilangan)))
print("Tamat.")Jika input pertama ialah X, senarai kosong, bilangan = 0 dan baris purata = jumlah / bilangan menghasilkan ZeroDivisionError: division by zero. Nilai 0 datang daripada bilangan = len(senaraiNo).
Pembaikan: gunakan struktur kawalan pilihan supaya pengiraan hanya dibuat apabila bilangan lebih besar daripada sifar:
bilangan = len(senaraiNo)
if bilangan > 0:
jumlah = sum(senaraiNo)
print("Purata = ",str(kira_purata(jumlah,bilangan)))
print("Tamat.")Dengan input 0 kemudian X, output ialah Purata = 0.0 dan Tamat.. Dengan input X sahaja, output ialah Tamat..
Buku teks Asas Sains Komputer Tingkatan 3, ms. 195.
kira_purata(x,y) tidak menggunakan parameter x dan y. Ia mengira dengan pemboleh ubah global jumlah dan bilangan, dan hanya berjaya kerana atur cara utama sudah menyimpan nilai itu. Amalan yang lebih baik ialah purata = x / y.Ralat logik
Contoh 4.18: jenis data dalam semak( )
Atur cara menjana dua nombor rawak, menambahkannya dengan tambah( ) dan menyemak jawapan pengguna dengan semak( ):
import random
def tambah(a,b):
return(a+b)
def semak(jawapan, jumlah):
if jawapan == jumlah:
print("Betul!")
else:
print("Salah! Jawapannya ialah",jumlah)
# Atur cara utama
nombor1 = random.randint(1, 10)
nombor2 = random.randint(1, 10)
print("Selesaikan",nombor1, "+", nombor2,".")
jawapan = input()
jumlah = tambah(nombor1,nombor2)
semak(jawapan, jumlah)Atur cara berjalan tanpa mesej ralat, tetapi untuk soalan 2 + 3 jawapan 5 dinilai "Salah! Jawapannya ialah 5". Kaedah mengesan:
- Uji
tambah(2,3): output 5, tiada ralat. - Uji
semak( )dengan data ujian yang sesuai: tiada ralat. - Semak jenis data:
print(type(jawapan))memberi<class 'str'>. Input sentiasa jenis str, tetapijumlahberjenis int;"5" == 5ialah PALSU.
Pembaikan: tukar input kepada integer.
jawapan = int(input())
Buku teks Asas Sains Komputer Tingkatan 3, ms. 197.
print(semak(2,3)) sebagai "Betul!". Sebenarnya 2 tidak sama dengan 3, maka function memaparkan "Salah! Jawapannya ialah 3" (dan print( ) menambah None kerana semak( ) tidak memulangkan nilai). Gunakan idea buku (uji function berasingan) tetapi periksa output sendiri.def menu() tanpa titik bertindih; (b) atur cara membahagi dengan sifar; (c) atur cara memberi 10 apabila 2 + 3 dijangka 5 tanpa mesej ralat.Tunjuk jawapanSembunyi jawapan
4.2.6 Menghasilkan atur cara yang melibatkan gabungan struktur kod arahan
Atur cara yang bermodular memudahkan pengatur cara mengenal pasti tugas setiap modul. Atur cara bermodular dihasilkan dengan function dan procedure.
Contoh 4.19: peratus keuntungan dan kerugian
Rumus Matematik: Untung = Harga Jualan - Harga Kos; Rugi = Harga Kos - Harga Jualan; % keuntungan = Untung / Harga Kos x 100; % kerugian = Rugi / Harga Kos x 100.
Analisis: leraian kepada input harga kos dan harga jualan, pengiraan peratus, dan paparan output. Reka bentuk: pengecaman corak, kedua-dua pengiraan guna input yang sama; proses input dan pengiraan berulang, maka dijadikan function dan procedure.
Dua subpseudokod: inputPengguna(mesejInput) memaparkan mesej, menyimpan harga daripada input dan memulangkannya (function); kiraPeratus(h1, h2) mengira peratus = (h2 - h1) / h1 x 100, memaparkan peratus keuntungan jika peratus > 0, jika tidak memaparkan peratus kerugian (nilai mutlak) (procedure).
Atur cara utama: panggil inputPengguna dua kali untuk h1 dan h2; jika h1 == h2 papar "Tiada keuntungan.", jika tidak panggil kiraPeratus(h1, h2).
Buku teks Asas Sains Komputer Tingkatan 3, ms. 203.
Pengekodan: function atau procedure dihasilkan dan diuji dahulu hingga bebas ralat, baharulah atur cara utama ditulis (inputPengguna( ), kemudian kiraPeratus( ), kemudian atur cara utama; Rajah 4.61).
# Function inputPengguna
def inputPengguna(mesejInput):
print(mesejInput)
harga = float(input())
return harga
# Procedure kiraPeratus
def kiraPeratus(h1,h2):
peratus =((h2-h1)/h1)*100
peratus = round(peratus, 2) # dua tempat perpuluhan
if peratus > 0:
print("Keuntungan ialah", peratus, "%")
else:
print("Kerugian ialah", abs(peratus), "%") # positifkan nilai
# Atur cara utama
h1 = inputPengguna("Masukkan harga kos RM ")
h2 = inputPengguna("Masukkan harga jualan RM ")
if h1 == h2:
print("Tiada keuntungan")
else:
kiraPeratus(h1, h2)
Buku teks Asas Sains Komputer Tingkatan 3, ms. 205.
| Panggilan kiraPeratus( ) | Pengiraan | Output |
|---|---|---|
| (2.50, 3.00) | (3.00 - 2.50) / 2.50 x 100 = 20 | Keuntungan ialah 20.0 % |
| (1.50, 2.80) | (2.80 - 1.50) / 1.50 x 100 = 86.67 | Keuntungan ialah 86.67 % |
| (2.75, 2.55) | (2.55 - 2.75) / 2.75 x 100 = -7.27 | Kerugian ialah 7.27 % |
| (2.50, 2.50) | 0 / 2.50 x 100 = 0 | Kerugian ialah 0.0 % (tidak tepat) |
Apabila h1 sama dengan h2, procedure memberi output yang tidak tepat. Maka atur cara utama menyemak if h1 == h2 dahulu. Data ujian akhir (Rajah 4.65): (3.50, 3.50) memberi Tiada keuntungan; (2.00, 3.00) memberi Keuntungan ialah 50.0 %; (2.00, 1.50) memberi Kerugian ialah 25.0 %.
while.