SPM KMK 2216 cheat sheet
SPM KMK 2216 · Keep the key ideas within reach.
Kod dan Struktur Arahan / Instruction Code and Structure
Arahan (statement) ialah satu unit lengkap yang boleh dilaksanakan; ungkapan (expression) pula menghasilkan nilai dan tidak boleh berdiri sendiri sebagai arahan dalam kebanyakan bahasa pengaturcaraan.
Struktur jujukan dilaksanakan baris demi baris dari atas ke bawah; struktur pemilihan menggunakan syarat boolean; struktur ulangan mengulang blok selagi syarat dipenuhi atau sebanyak bilangan tertentu.
Kod sumber melalui fasa: penyuntingan → prapemprosesan (jika ada) → penterjemahan (kompilasi atau tafsiran) → pemautan (linking) → pelaksanaan. Ralat sintaks dikesan semasa penterjemahan, ralat logik hanya kelihatan semasa pelaksanaan.
Komen tidak dilaksanakan oleh mesin: // hingga hujung baris dan /* ... */ merentas baris dalam C/Java; # dalam Python; ' dalam BASIC. Komen digunakan untuk dokumentasi dan penyahpepijatan.
Kata kunci (keyword) ialah perkataan simpanan bahasa (if, while, return) yang tidak boleh digunakan sebagai pengecam; pengecam (identifier) menamakan pemboleh ubah, fungsi atau kelas.
Pernyataan tugasan (assignment) menilai sebelah kanan dahulu, kemudian menyimpan hasil ke lokasi di sebelah kiri; operator kesamaan perbandingan (==) berbeza daripada operator tugasan (=).
Blok kod ditentukan oleh kurungan kuih {} dalam C, Java dan JavaScript, atau oleh inden dalam Python; inden yang tidak konsisten dalam Python menyebabkan IndentationError.
Nilai boolean benar/palsu (true/false) dihasilkan oleh operator perbandingan (<, >, <=, >=, ==, !=) dan digabungkan dengan operator logik AND, OR, NOT.
Pemboleh Ubah, Jenis Data dan Operator / Variables, Data Types and Operators
Pemboleh ubah ialah nama yang merujuk kepada lokasi memori yang menyimpan nilai; dalam bahasa bertipe statik (C, Java) jenis ditetapkan semasa pengisytiharan, dalam bahasa bertipe dinamik (Python) jenis ditentukan oleh nilai.
Jenis data asas lazim: integer (nombor bulat), float/real (perpuluhan), boolean (true/false), char (satu aksara) dan string (jujukan aksara).
Keutamaan operator (tinggi ke rendah): kurungan → unari (+, -, !) → darab/bahagi/modulus → tambah/tolak → perbandingan → logik AND → logik OR → tugasan.
Pembahagian integer membuang bahagian perpuluhan (7 / 2 = 3 dalam C/Java); modulus % memberi baki (7 % 2 = 1) dan hanya sah untuk integer.
Penukaran jenis: penukaran implisit (coercion) berlaku automatik apabila jenis bercampur, contohnya int + float menghasilkan float; penukaran eksplisit (casting) ditulis oleh pengaturcara, contohnya (int)3.9 menghasilkan 3.
Pengisytiharan tanpa pemulaan meninggalkan nilai tidak tentu dalam C; dalam Java pemboleh ubah setempat mesti dimulakan sebelum digunakan, manakala medan kelas mendapat nilai lalai (0, false, null).
Operator logik menggunakan penilaian litar pintas (short-circuit): dalam A AND B, B tidak dinilai jika A palsu; dalam A OR B, B tidak dinilai jika A benar.
Rentetan aksara tidak boleh dibandingkan dengan == dalam Java kerana == membandingkan rujukan objek; gunakan equals() untuk membandingkan kandungan.
Kawalan Aliran: Jujukan, Pemilihan dan Ulangan / Control Flow: Sequence, Selection and Iteration
Pemilihan satu hala: if (syarat) { blok } - blok dilaksanakan hanya jika syarat bernilai benar. Pemilihan dua hala menambah else; pemilihan berantai menggunakan else if.
switch/case memilih satu cabang berdasarkan nilai pemalar; penyataan break menamatkan switch, tanpanya kawalan jatuh ke case seterusnya (fall-through). case default dilaksanakan jika tiada padanan.
Gelung while menyemak syarat sebelum badan gelung (gelung prasyarat) dan mungkin tidak dilaksanakan langsung; gelung do-while menyemak syarat selepas badan gelung, jadi badannya dilaksanakan sekurang-kurangnya sekali.
Gelung for sesuai apabila bilangan ulangan diketahui: for (awal; syarat; kenaikan). Ketiga-tiga bahagian boleh kosong, tetapi gelung for(;;) menjadi gelung tak terhingga.
break keluar serta-merta daripada gelung terdekat; continue melangkau baki lelaran semasa dan meneruskan dengan lelaran seterusnya. Kedua-duanya tidak menamatkan atur cara.
Gelung bersarang: gelung dalam menyelesaikan semua lelarannya bagi setiap satu lelaran gelung luar; jumlah lelaran ialah hasil darab bilangan lelaran kedua-dua gelung.
Gelung tak terhingga berlaku apabila syarat sentiasa benar dan pemboleh ubah kawalan tidak dikemas kini di dalam badan gelung.
Reka bentuk algoritma menggunakan struktur kawalan: jujukan, pemilihan dan ulangan, yang boleh digabungkan dan disarang untuk menyelesaikan masalah kompleks.
Struktur Data: Tatasusunan dan Senarai / Data Structures: Arrays and Lists
Tatasusunan (array) menyimpan elemen jenis sama dalam lokasi memori berturutan; saiznya tetap selepas diperuntukkan dalam C dan Java. Indeks bermula dari 0, jadi elemen terakhir berada pada indeks n-1.
Mengakses indeks di luar julat 0 hingga n-1 menyebabkan ralat masa jalan: ArrayIndexOutOfBoundsException dalam Java atau tingkah laku tidak tentu dalam C.
Tatasusunan satu dimensi diisytiharkan sebagai int a[5]; tatasusunan dua dimensi sebagai int m[3][4] dengan 3 baris dan 4 lajur; jumlah elemen ialah 3 × 4 = 12.
Senarai (list) seperti ArrayList dalam Java atau list dalam Python boleh membesar dan mengecil secara dinamik; operasi lazim termasuk add/append, remove, get dan size/len.
Gelung traversal tatasusunan menggunakan indeks 0 hingga panjang-1; panjang diperoleh melalui a.length (Java) atau len(a) (Python).
Carian linear memeriksa elemen satu demi satu dengan kerumitan O(n); carian binari memerlukan senarai tersusun dan membahagi julat carian separuh setiap langkah dengan kerumitan O(log n).
Isihan gelembung (bubble sort) membandingkan pasangan bersebelahan dan menukar kedudukan jika tidak tersusun; setiap pas menyusun satu elemen di hujung, dengan kerumitan O(n²) dalam kes terburuk.
Menyalin tatasusunan dengan tugasan biasa (b = a) menyalin rujukan, bukan kandungan; salinan sebenar memerlukan gelung elemen demi elemen atau kaedah salinan khusus.
Modul, Fungsi dan Prosedur / Modules, Functions and Procedures
Fungsi memulangkan satu nilai melalui penyataan return; prosedur melaksanakan tindakan tanpa memulangkan nilai (dalam C ditulis sebagai fungsi dengan jenis pulangan void).
Pemanggilan fungsi memindahkan kawalan ke definisi fungsi; selepas return, kawalan kembali ke titik pemanggilan bersama nilai pulangan.
Parameter formal ialah pemboleh ubah dalam definisi fungsi; argumen ialah nilai sebenar yang dihantar semasa pemanggilan. Bilangan dan jenis mesti sepadan.
Hantaran mengikut nilai (pass by value) menyalin nilai argumen, jadi perubahan dalam fungsi tidak menjejaskan pemboleh ubah pemanggil. Hantaran mengikut rujukan (pass by reference) membolehkan fungsi mengubah pemboleh ubah asal.
Pemboleh ubah setempat (local) hanya wujud dalam fungsi dan dimusnahkan selepas fungsi tamat; pemboleh ubah global boleh diakses oleh semua fungsi dan meningkatkan risiko kesan sampingan.
Rekursi ialah fungsi yang memanggil dirinya sendiri dan mesti mempunyai kes asas (base case) untuk mengelakkan rekursi tak terhingga dan limpahan tindanan (stack overflow).
Kelebihan menggunakan fungsi dan modul: mengelakkan pertindihan kod, memudahkan pengujian, menyembunyikan butiran pelaksanaan (enkapsulasi) dan membolehkan penggunaan semula.
Modul atau pustaka (library) mengumpulkan fungsi berkaitan; ia diimport atau disertakan menggunakan arahan seperti import, #include atau require sebelum digunakan.
Input/Output, Fail dan Pengendalian Ralat / Input/Output, Files and Error Handling
Input piawai dibaca melalui pembaca seperti scanf (C), Scanner (Java) atau input() (Python); output piawai ditulis melalui printf, System.out.println atau print.
Aliran fail mempunyai tiga langkah wajib: buka (open) dengan mod yang betul, baca atau tulis, kemudian tutup (close) untuk melepaskan sumber dan memastikan data disimpan.
Mod fail: 'r' membaca fail sedia ada, 'w' mencipta atau menimpa fail, 'a' menambah di hujung fail, 'r+' membaca dan menulis. Membuka fail yang tiada dengan mod 'r' menghasilkan ralat.
Ralat dikelaskan sebagai ralat sintaks (dikesan penterjemah), ralat masa jalan (contohnya pembahagian dengan sifar, indeks luar julat) dan ralat logik (atur cara berjalan tetapi hasilnya salah).
Blok try-catch mengendalikan pengecualian (exception): kod berisiko diletakkan dalam try, pengendali catch menerima objek pengecualian, dan blok finally sentiasa dilaksanakan sama ada pengecualian berlaku atau tidak.
Pengesahan input (validation) menyemak julat, jenis dan format data sebelum diproses; gelung while sering digunakan untuk meminta semula input sehingga sah.
Pembahagian dengan sifar integer dalam Java membuang ArithmeticException; dalam C tingkah lakunya tidak tentu. Pembahagian float dengan sifar menghasilkan Infinity atau NaN, bukan pengecualian.
Fail teks dibaca baris demi baris sehingga penanda akhir fail (EOF) dikesan; setiap baris perlu ditukar kepada jenis berangka dengan fungsi seperti parseInt atau int() sebelum pengiraan.