myUASARevision for UASAUlang kaji UASA
Asas Sains Komputer notesnota, bab 4

Kod arahan

TextbookBuku teks Asas Sains Komputer Tingkatan 3 KSSM (cetakan pertama 2018), pageshalaman 112–216

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

Pangkalan data ialah tempat pengumpulan dan penyimpanan data secara berpusat bagi sistem maklumat yang berasaskan komputer. Ia ialah koleksi data yang saling berhubung dan disimpan tanpa pengulangan data yang tidak dikehendaki. Data mudah disimpan, dicapai atau dikemas kini.

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).

Evolusi sistem fail kepada sistem pangkalan data (Rajah 4.5)
AspekSistem failSistem pangkalan data
Capaian dataTidak boleh dilakukan serentak dan lambatDicapai oleh semua pihak secara serentak dalam masa yang singkat
Keselamatan dataTidak terjaminAda kata laluan khusus dan sandaran data yang mantap
Pengulangan dataBerlaku pengulangan dataKawalan berpusat; perulangan data yang sama dapat dielakkan
Perkongsian dataTerhadDikongsi 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).

Structured Query Language (SQL) ialah bahasa pengaturcaraan aras tinggi generasi keempat yang ringkas, mudah dibaca dan mempunyai arahan yang terhad. SQL digunakan untuk menyimpan, memanipulasi dan mendapatkan data daripada pangkalan data.
SQL tidak sensitif huruf. SELECT * FROM abc sama kesannya dengan select * from abc. Tiga pernyataan yang dipelajari: SELECT...FROM, SELECT...WHERE dan SELECT...ORDER BY.
Nyatakan dua perbezaan antara sistem fail dan sistem pangkalan data.
Tunjuk jawapanSembunyi jawapan
Contoh: sistem fail ada pengulangan data, sistem pangkalan data mengelakkannya; sistem fail tidak menjamin keselamatan data, sistem pangkalan data ada kata laluan dan sandaran data; capaian sistem fail lambat dan tidak serentak.

4.1.2 Entiti dan atribut

Entiti ialah satu kumpulan objek yang sama jenis dan bersifat unik, yang wujud dalam persekitaran tertentu. Contoh: orang, tempat atau benda. Entiti mempunyai data yang boleh dikutip dan disimpan. Dalam gambar rajah perhubungan entiti, entiti diwakili oleh segi empat.
Atribut menerangkan ciri-ciri entiti. Satu entiti mempunyai satu atau lebih atribut. Atribut ialah lajur dalam jadual pangkalan data dan diwakili oleh bulatan bujur dalam gambar rajah perhubungan entiti.
Entiti MURID dengan enam atribut
Entiti MURID dan atribut Nama, ID_Murid, Tarikh_Lahir, Kelas, Nama_Bapa dan Nama_Ibu (dilukis semula, Rajah 4.7).

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.

Entiti, atribut dan rekod (Jadual 4.1)
Istilah dalam jadualMaksud
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

Kekunci primer (primary key) ialah atribut dengan nilai unik yang mengenal pasti rekod dalam jadual. Ia tidak boleh berulang, sama atau dibiarkan kosong (null). Setiap entiti mempunyai sekurang-kurangnya satu kekunci primer.
Kekunci asing (foreign key) ialah atribut dalam satu jadual hubungan yang merupakan kekunci primer bagi jadual hubungan yang lain. Ia mengaitkan dua atau lebih entiti atau rekod yang mempunyai hubungan.

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.

Perbezaan kekunci primer dan kekunci asing (ms. 123)
AspekKekunci primerKekunci asing
InputTidak boleh menerima nilai kosong (null)Boleh menerima beberapa nilai kosong (null)
Bilangan dalam jadualSatu sahajaBoleh 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.

Dua jadual dengan kekunci primer dan kekunci asing ditanda
Jadual BUTIR_MURID dan BUTIR_PENJAGA (Rajah 4.13 dan 4.14, dilukis semula).

Buku teks Asas Sains Komputer Tingkatan 3, ms. 122.

Murid sering menulis ID_Murid sebagai kekunci primer dalam kedua-dua jadual. Dalam BUTIR_PENJAGA ia ialah kekunci asing, kerana kekunci primer jadual itu ialah No_Daftar.
Satu borang mengandungi nama, jantina, kaum, alamat rumah dan nombor telefon. Mengapakah nama tidak sesuai menjadi kekunci primer?
Tunjuk jawapanSembunyi jawapan
Dua orang boleh mempunyai nama, jantina atau kaum yang sama. Kekunci primer mesti unik. Atribut yang unik (contohnya ID atau nombor pendaftaran) perlu ditambah.

4.1.4 Kekardinalan (cardinality) antara entiti dalam hubungan

Kekardinalan merujuk kepada perhubungan antara entiti-entiti dalam satu pangkalan data. Dua jenis yang dipelajari: one to one (1:1) dan one to many (1:M).

Dalam gambar rajah perhubungan entiti (Entity Relationship Diagram, ERD), hubungan dilukis dengan simbol rombus dan lazimnya dinamakan dengan kata kerja.

ERD satu-ke-satu dan satu-ke-banyak
Atas: PENGETUA 1 mengurus 1 SEKOLAH. Bawah: MURID 1 meminjam M BUKU (dilukis semula, Jadual 4.2).

Buku teks Asas Sains Komputer Tingkatan 3, ms. 124.

JenisMaksudContoh dalam buku
One to one (1:1), satu-ke-satuSatu 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-banyakSatu 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.

Cara menentukan jenis: tanya dua soalan. Satu A berhubung dengan berapa B? Satu B berhubung dengan berapa A? Jika kedua-duanya "satu", ia 1:1. Jika satu sahaja yang "banyak", ia 1:M.
Lakarkan jenis kekardinalan bagi: seorang warganegara Malaysia boleh memiliki satu Pasport Malaysia Antarabangsa.
Tunjuk jawapanSembunyi jawapan
WARGANEGARA 1 memiliki 1 PASPORT: satu-ke-satu (1:1). Lukis segi empat, rombus bernama kata kerja, dan label 1 di kedua-dua hujung.

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 pangkalan data dalam Microsoft Access (Jadual 4.3)
Objek AccessKegunaan
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 pembinaan pangkalan data (Rajah 4.15)
LangkahTugasHasil dalam SisMaP
1Tentukan tujuan pembinaan pangkalan dataMenghasilkan analisis keputusan peperiksaan dengan cepat
2Tentukan entitiMURID dan MARKAH
3Tentukan atributMURID: ID_Murid, Nama_Murid, Jantina, Kaum, Nama_Kelas, Nama_Guru_Kelas. MARKAH: ID_Markah, ID_Murid, BM, BI, Sn, Mate, Sej, Geo, ASK
4Tentukan hubungan dan kekardinalanMURID: kekunci primer ID_Murid. MARKAH: kekunci primer ID_Markah, kekunci asing ID_Murid. Hubungan one to many (1:M)
5Hasilkan pangkalan dataJadual, borang, pertanyaan (query) dengan SQL, dan laporan

Buku teks Asas Sains Komputer Tingkatan 3, ms. 128.

Buku (ms. 134) menyebut hubungan MURID dan MARKAH sebagai one to one kerana setiap murid ada satu set markah, tetapi ms. 128, 135 dan 136 menyatakan hubungan one to many (1:M) dan itulah yang dibina dalam Access. Ikut 1:M untuk SisMaP.

Langkah dalam Microsoft Access

  1. 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).
  2. Entiti (table): ubah nama Table1 kepada MURID dan klik OK (Rajah 4.17).
  3. Atribut (field): klik View, pilih Design View, masukkan nama medan dalam Field Name dan pilih jenis data dalam Data Type (Rajah 4.18).
  4. Kekunci primer: klik nama medan yang unik, klik Primary Key (Rajah 4.19). Access menjadikan atribut pertama kekunci primer secara automatik.
  5. Jadual kedua: klik Create pada bar menu, klik ikon Table, klik View, pilih Design View dan namakan jadual MARKAH (Rajah 4.20).
  6. Hubungan: klik Database Tools, klik Relationships, klik Show Table, Add MURID dan MARKAH, klik Close. Seret ID_Murid daripada MURID ke ID_Murid dalam MARKAH. Dalam Edit Relationships, tanda Enforce Referential Integrity dan klik Create (Rajah 4.22 dan 4.23).
  7. Isi data: klik View, pilih Datasheet View dan taip data untuk setiap medan (Rajah 4.24).
Tangkapan skrin Design View dalam Access
Klik View, pilih Design View, kemudian masukkan nama medan dan jenis data (Rajah 4.18).

Buku teks Asas Sains Komputer Tingkatan 3, ms. 131.

Jenis-jenis data dalam Access (Jadual 4.4)
Jenis dataPenerangan
AutoNumberMenjana pembilang secara automatik dalam susunan menaik
Text / Short TextPanjang terhad kepada maksimum 255 aksara
Memo / Long TextBoleh menyimpan teks sehingga satu Gigabait
NumberHanya menyimpan nilai angka
Date/TimeNilai 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).

Tetingkap Relationships dengan MURID dan MARKAH
Hubungan kekardinalan one to many (1:M) antara MURID dan MARKAH (Rajah 4.23).

Buku teks Asas Sains Komputer Tingkatan 3, ms. 136.

Nama atribut dalam Access boleh dijarakkan, tetapi dalam penulisan SQL tidak boleh dijarakkan (gunakan garis bawah, contoh Nama_Murid). Nama atribut tidak boleh mengandungi simbol seperti titik (.), tanda seruan (!) dan tanda sama dengan (=). Semua medan perlu mempunyai data dan tidak patut dibiarkan kosong (null).
Apakah kesan memilih Enforce Referential Integrity?
Tunjuk jawapanSembunyi jawapan
Kekunci asing dalam satu jadual mestilah kekunci primer dalam jadual yang lain, supaya hubungan antara jadual terpelihara.

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.

  1. Buka pangkalan data TUGASAN1. Klik tab Create, kemudian Form Wizard.
  2. Pilih jadual MURID, klik >> untuk memilih semua medan, klik Next.
  3. Pilih susun atur Columnar, klik Next.
  4. 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).

Jenis susun atur borang (ms. 142)
Susun aturMaksud
ColumnarRekod dipaparkan satu demi satu
TabularSemua rekod dipaparkan dalam bentuk jadual yang menarik
DatasheetSemua rekod dipaparkan dalam bentuk helaian data
JustifiedSemua medan disusun pada baris-baris blok yang mempunyai margin kiri dan kanan yang tetap
BORANG MURID dalam Access
Paparan BORANG MURID; bar bawah menunjukkan bilangan rekod (Rajah 4.26).

Buku teks Asas Sains Komputer Tingkatan 3, ms. 143.

Nama borang tidak semestinya sama dengan nama jadual. Butang di bahagian bawah borang: rekod pertama, sebelumnya, berikutnya, terakhir; wujudkan satu rekod baharu; carian rekod (Jadual 4.5).

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):

Entiti MURID (Rajah 4.30)
ID_MuridNama_MuridJantinaKaumNama_KelasNama_Guru_Kelas
SM101DAMIA ZAHRAA BINTI RAHIMPEREMPUANMELAYU3 ASERTIFFATIMAH BINTI SEMAN
SM102DHIA ARISSA BINTI MALIKPEREMPUANMELAYU3 BIJAKZAKIAH BINTI YUSOF
SM103DENISH RAIMI BIN ZAINALLELAKIMELAYU3 CEKALMUSTAFA BIN ROSLAN
SM104TAN XUE LIEHLELAKICINA3 DINAMIKTEOH JEE YEE
SM105KUMAR A/L RAMESHLELAKIINDIA3 EFISIENRIMALA A/P SAMY
SM106JESSICA HENG MUI MUIPEREMPUANCINA3 FIKIRLIM CHOII PENG
SM107KHAIR MUIZ BIN ABD RAHIMLELAKIMELAYU3 GIGIHCHANDRAN A/L SUMAN
SM108DEVI A/P MUTHUPEREMPUANINDIA3 EFISIENRIMALA 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).

Kriteria teks perlu mempunyai tanda petikan pembuka dan penutup (""). Jika tidak, berlaku ralat sintaks. Buku mencetak petikan lengkung (“PEREMPUAN”), tetapi semasa menaip dalam Access atau Python gunakan petikan lurus (").

(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)

Pertanyaan (query) ialah pertanyaan kepada pangkalan data hubungan dalam bahasa query untuk mencapai data dan maklumat yang disimpan. Pernyataan SQL yang dipelajari ialah pertanyaan.
  1. Klik Create, kemudian Query Design.
  2. Pilih jadual MURID, klik Add.
  3. Klik View, pilih SQL View.
  4. Taip SELECT * FROM MURID dan klik Run.
  5. Klik kanan pada Query1, klik Save, tukar nama kepada PERTANYAAN 1, klik OK.
Tulis SQL untuk memaparkan Nama_Murid dan Kaum bagi murid lelaki, disusun A ke Z mengikut Nama_Murid.
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.

Jadual kebenaran OR dan AND (Jadual 4.9 dan 4.10)
PQP OR QP AND Q
BENARBENARBENARBENAR
BENARPALSUBENARPALSU
PALSUBENARBENARPALSU
PALSUPALSUPALSUPALSU

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.

Jadual MURID dengan nilai P, Q, OR dan AND bagi setiap rekod
Setiap murid diperiksa untuk P (perempuan) dan Q (Melayu). OR memaparkan 6 rekod, AND memaparkan 2 rekod (dilukis daripada data Rajah 4.37).
Buku (ms. 159) menulis penerangan Contoh 4.7 sebagai "perempuan atau Melayu", tetapi pernyataannya menggunakan AND: jantina perempuan dan kaum Melayu.
Berapakah rekod yang dipaparkan oleh WHERE Jantina = "LELAKI" AND Kaum = "CINA"?
Tunjuk jawapanSembunyi jawapan
Satu rekod: SM104 TAN XUE LIEH. (Lelaki ialah SM103, SM104, SM105, SM107; antara mereka hanya SM104 berkaum Cina.)

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.

  1. Klik Create, kemudian Report Wizard.
  2. Pilih jadual atau query yang hendak digunakan.
  3. Klik >> untuk memilih semua medan dalam Available Fields.
  4. Medan terpilih muncul dalam Selected Fields. Klik Next.
  5. Klik > atau < untuk menentukan susunan medan. Klik Next.
  6. Pilih medan isihan dan klik Ascending atau Descending. Klik Next.
  7. Pilih Layout dan Orientation. Klik Next.
  8. 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.

Tiga susun atur laporan
Laporan OPERATOR AND dalam (a) Stepped Layout, (b) Block Layout dan (c) Outline Layout (Rajah 4.41).

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 sesuai untuk subtugas yang perlu memulangkan satu nilai selepas tugas selesai. Contoh dalam permainan MyStemVille: function mengira baki. Sebelum pembelian baki ialah 220; selepas pembelian disahkan baki ialah 20; function memulangkan baki terbaharu untuk dipaparkan.
Procedure sesuai apabila satu tugas dilaksanakan berulang kali tanpa memulangkan nilai. Contoh: procedure pada butang profil memaparkan tetingkap profil pemain setiap kali butang diklik.

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.

Persamaan dan perbezaan function dan procedure Python (Rajah 4.44)
AspekFunctionProcedure
Ciri samaAda nama khusus yang eksplisit; berparameter atau tidak; melaksanakan urutan arahan untuk satu tugas; boleh digunakan berulang kaliSama seperti function
Input (argumen)Perlu menerima nilai inputTidak semestinya menerima input
PemulanganMemulangkan satu atau beberapa nilai (nombor, aksara atau jenis data lain)Tidak memulangkan sebarang nilai kecuali nilai lalai None
JenisBuilt-in function (sedia ada) dan user-defined (ditulis pengguna)Ditulis oleh pengguna

Buku teks Asas Sains Komputer Tingkatan 3, ms. 169.

Parameter ialah pemboleh ubah yang digunakan oleh function atau procedure untuk menerima nilai.
Argumen ialah data atau nilai sebenar yang dihantar kepada parameter semasa function dipanggil.
Apakah beza utama function dan procedure?
Tunjuk jawapanSembunyi jawapan
Function memulangkan nilai kepada pemanggilnya (dengan return); procedure tidak memulangkan nilai (dalam Python ia memulangkan None).

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.

Panggilan function kuasadua dengan argumen 5 dan nilai pulangan 25
Pelaksanaan Contoh 4.9 apabila nom = 5 (dilukis semula).

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.

Persamaan dan perbezaan (Rajah 4.51)
AspekBuilt-in functionUser-defined function
AsalDatang sekali dengan bahasa pengaturcaraanDitulis oleh pengatur cara
NamaUnik, deskriptif, terpelihara, tidak boleh diubahSebarang nama yang tidak bercanggah dengan kata kunci bahasa
ArgumenPerlu argumenBoleh ada atau tanpa argumen
Kod sumberTidak boleh dilihatBoleh dilihat dan diubah
StrukturAda nama (pengepala) dan badan functionAda 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)
  • def ialah 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.
  • return memulangkan 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.

Jangan lupa titik bertindih (:) pada hujung baris def dan inden pada badan function atau procedure. Dalam def menu() tanpa titik bertindih, Python memaparkan ralat sintaks.
Tulis procedure 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.

Carta alir atur cara utama kalkulator bermenu
Carta alir atur cara utama. Segi empat bertanda dua garis tepi ialah panggilan function atau procedure (dilukis berdasarkan pseudokod utama).

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.

Function 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.

Tiga jenis ralat
Jenis ralatCiriContoh 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.

  1. Uji function dahulu dengan print(kira_Isipadu_piramid(2,3)): NameError: name 'sisi' is not defined.
  2. Baiki: parameter menjadi def kira_Isipadu_piramid(sisi,tinggi):.
  3. Uji atur cara utama: tiga pernyataan pertama tiada ralat.
  4. 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.

Argumen yang dihantar semasa memanggil function mesti nilai atau pemboleh ubah yang wujud (sisi dan tinggi), bukan a dan b yang tidak pernah ditakrifkan.

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.

Dalam kod buku, 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:

  1. Uji tambah(2,3): output 5, tiada ralat.
  2. Uji semak( ) dengan data ujian yang sesuai: tiada ralat.
  3. Semak jenis data: print(type(jawapan)) memberi <class 'str'>. Input sentiasa jenis str, tetapi jumlah berjenis int; "5" == 5 ialah PALSU.

Pembaikan: tukar input kepada integer.

jawapan = int(input())

Buku teks Asas Sains Komputer Tingkatan 3, ms. 197.

Buku (ms. 197, Jadual 4.21 Langkah 2) menulis output 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.
Kenal pasti jenis ralat: (a) 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
(a) ralat sintaks; (b) ralat masa larian (ZeroDivisionError); (c) ralat logik.

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.

Pengujian kiraPeratus( ) (Jadual 4.26)
Panggilan kiraPeratus( )PengiraanOutput
(2.50, 3.00)(3.00 - 2.50) / 2.50 x 100 = 20Keuntungan ialah 20.0 %
(1.50, 2.80)(2.80 - 1.50) / 1.50 x 100 = 86.67Keuntungan ialah 86.67 %
(2.75, 2.55)(2.55 - 2.75) / 2.75 x 100 = -7.27Kerugian ialah 7.27 %
(2.50, 2.50)0 / 2.50 x 100 = 0Kerugian 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 %.

Uji dengan pelbagai situasi termasuk kes sempadan (h1 sama dengan h2). Untuk menggunakan atur cara berulang kali, letakkan keseluruhan kod dalam gelung while.