khirulnizam - content - pentaksir automatik latihan asas pengaturcaraan c menggunakan kaedah...

84
BAB I PENDAHULUAN 1.1 PENGENALAN Pengaturcaraan adalah satu kursus yang sangat penting dalam bidang sains komputer atau teknologi maklumat. Antara bahasa-bahasa pengaturcaraan yang digunakan untuk menerapkan konsep-konsep pengaturcaraan ialah C, C++, Java, Pascal, dan Basic. Dalam subjek ini pelajar perlu mempelajari sintaks dan had keupayaan sesuatu bahasa komputer dan dalam masa yang sama, untuk membangunkan proses kerja yang boleh digunakan untuk menyelesaikan masalah. Ia adalah satu mata pelajaran yang memerlukan pelbagai lapisan hierarki kemahiran diaktifkan dalam masa yang sama (Bloom, 1956). Pengaturcaraan adalah satu subjek berasaskan tugasan, bukan berasaskan pengetahuan (Shaffer, 2005). Dalam erti kata lain, pengaturcaraan adalah subjek praktikal bukan teori. Pelajar perlu melakukan tugasan atau latihan, bukan sekadar membaca dan mengingat. Dalam usaha untuk mahir dalam subjek ini, pelajar perlu menguntukkan banyak masa untuk membuat latihan dan membangunkan penyelesaian bagi menyiapkan latihan yang diberi. Pengaturcaraan bukan satu subjek yang dapat dipelajari tanpa latih-tubi yang intensif (Truong et al. , 2005). Memandangkan pelajar perlu membuat latihan yang banyak untuk subjek ini, pensyarah perlu mengambil inisiatif untuk menyediakan soalan dan masalah yang pelbagai. Pensyarah tidak boleh menyerahkan kepada pelajar untuk membuat latihan sendiri secara sukarela. Membuat latihan secara sukarela kurang diamalkan dikalangan pelajar. Ini kerana pelajar perlu menyiapkan banyak tugasan daripada subjek yang lain (Ala-Mutka et al., 2004). Semakin banyak latihan yang diberi, semakin banyak pula beban yang terpaksa

Upload: khirulnizam-abd-rahman

Post on 27-Jul-2015

2.252 views

Category:

Documents


2 download

DESCRIPTION

Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod Pseudo- http://kerul.net

TRANSCRIPT

Page 1: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

BAB I

PENDAHULUAN

1.1 PENGENALAN

Pengaturcaraan adalah satu kursus yang sangat penting dalam bidang sains komputer atau

teknologi maklumat. Antara bahasa-bahasa pengaturcaraan yang digunakan untuk

menerapkan konsep-konsep pengaturcaraan ialah C, C++, Java, Pascal, dan Basic.

Dalam subjek ini pelajar perlu mempelajari sintaks dan had keupayaan sesuatu

bahasa komputer dan dalam masa yang sama, untuk membangunkan proses kerja yang

boleh digunakan untuk menyelesaikan masalah. Ia adalah satu mata pelajaran yang

memerlukan pelbagai lapisan hierarki kemahiran diaktifkan dalam masa yang sama (Bloom,

1956).

Pengaturcaraan adalah satu subjek berasaskan tugasan, bukan berasaskan

pengetahuan (Shaffer, 2005). Dalam erti kata lain, pengaturcaraan adalah subjek praktikal

bukan teori. Pelajar perlu melakukan tugasan atau latihan, bukan sekadar membaca dan

mengingat. Dalam usaha untuk mahir dalam subjek ini, pelajar perlu menguntukkan banyak

masa untuk membuat latihan dan membangunkan penyelesaian bagi menyiapkan latihan

yang diberi. Pengaturcaraan bukan satu subjek yang dapat dipelajari tanpa latih-tubi yang

intensif (Truong et al. , 2005).

Memandangkan pelajar perlu membuat latihan yang banyak untuk subjek ini,

pensyarah perlu mengambil inisiatif untuk menyediakan soalan dan masalah yang pelbagai.

Pensyarah tidak boleh menyerahkan kepada pelajar untuk membuat latihan sendiri secara

sukarela. Membuat latihan secara sukarela kurang diamalkan dikalangan pelajar. Ini kerana

pelajar perlu menyiapkan banyak tugasan daripada subjek yang lain (Ala-Mutka et al.,

2004). Semakin banyak latihan yang diberi, semakin banyak pula beban yang terpaksa

Page 2: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

dipikul oleh pensyarah untuk memeriksa, memberi markah dan juga memberi timbal balas

(komen) kepada latihan-latihan yang dihantar oleh pelajar. Walau bagaimana pun, beban

pensyarah boleh dikurangkan sekiranya mereka dibekalkan dengan alatan atau sistem yang

boleh membantu mereka menyemak latihan pelajar secara automatik. Di sini kita akan

nampak kepentingan sistem penyemak automatik latihan aturcara.

Banyak cara penilaian yang dilakukan untuk menilai sejauh mana tahap kemajuan

pelajar dalam subjek ini. Antaranya soalan objektif, betul salah, betulkan program, dapatkan

output dan tugasan penyelesaian masalah dengan membangunkan aturcara. Tugasan

membangunkan aturcara adalah tugasan yang paling memakan masa untuk disemak dan

diberi markah. Lagi pula ia adalah rutin yang membosankan, berulang kali dilakukan dan

juga mengambil masa yang panjang (Venables dan Haywood, 2001).

1.2 PERNYATAAN MASALAH

Daripada pengalaman dan pemerhatian penulis sebagai tenaga pengajar subjek

pengaturcaraan di Kolej Universiti Islam Antarabangsa Selangor (KUIS), pelbagai cara

digunakan untuk menguruskan latihan aturcara pelajar. Kaedah yang biasa digunakan ialah

pelajar mencetak aturcara dan dihantar bersama dengan kod dalam bentuk digital (softcopy).

Ada juga sebahagian tenaga pengajar menggunakan kaedah penghantaran menggunakan

medium emel. Kedua-dua kaedah ini memerlukan tenaga pengajar mengumpulkan latihan-

latihan tersebut dan membuka satu persatu secara manual. Proses ini memerlukan masa

yang agak panjang dan berulang-ulang.

Di samping menguruskan tugasan pelajar yang banyak, pensyarah juga terpaksa

menguruskan pelajar-pelajar yang ramai. Terdapat juga tugas-tugas sampingan yang perlu

dijalankan seperti pengurusan jabatan atau fakulti; memberi markah dan lain-lain (Botev et

al., 2005). Apabila kerja-kerja sampingan seperti ini terpaksa dilakukan, perhatian kepada

pencapaian pelajar akan berkurangan. Pensyarah tidak akan dapat memberikan komen-

komen yang membina kepada hasil kerja pelajar. Pensyarah juga tidak akan dapat

mengembalikan semula tugasan-tugasan pelajar untuk tujuan ulang kaji dan sebagainya.

Walaupun terdapat banyak sistem penyemak aturcara automatik yang telah dikaji

dan digunakan, tetapi kebanyakan sistem tersebut menjurus kepada penyemakan melalui

pendekatan dinamik. Pendekatan ini memerlukan kod aturcara pelajar dilaksanakan dan

2

Page 3: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

diuji dengan set data ujian tertentu untuk menentukan kebetul-salahan aturcara. Kaedah ini

akan menambahkan beban pelayan yang mana boleh menyebabkan sistem tergendala dan

risiko kepada keselamatan sistem. Menurut Chu et al. (1997), penentuan kebetul-salahan

aturcara dengan menggunakan set data ujian adalah kaedah yang sangat mahal dan sukar

dilakukan.

Memandangkan pendekatan dinamik memerlukan pembangunan algoritma yang

lebih sukar, penulis mencadangkan pendekatan statik dengan membandingkan kod pseudo

aturcara pelajar dengan kod pseudo skema jawapan sebagai satu pendekatan yang mampu

menyemak aturcara pelajar tanpa perlu melaksanakan aturcara-aturcara tersebut.

Pendekatan ini dipilih memandangkan ianya lebih selamat kepada sistem dan juga

mengurangkan beban pemprosesan kepada pelayan sistem.

1.3 OBJEKTIF KAJIAN

Kajian ini akan menghasilkan aplikasi web yang mampu membandingkan satu jawapan

latihan aturcara C pelajar dengan beberapa model penyelesaian (skema) yang disediakan

oleh pengajar, dan akhirnya memberikan markah untuk latihan tersebut berdasarkan peratus

persamaan antara jawapan pelajar dengan model penyelesaian.

1.4 SKOP KAJIAN

Skop fungsi aturcara C yang dicadangkan dalam pembangunan prototaip pentaksir aturcara

automatik ini meliputi fungsi-fungsi yang terkandung di dalam bahagian kawalan program

aturcara C. Ianya meliputi perkara-perkara seperti jenis data (int, long, short, float dan

char), pembolehubah, pengisytiharan pembolehubah, umpukan, operator, rentetan, struktur

kawalan, dan pernyataan printf, scanf dan getch.

1.4.1 Jenis data

Terdapat tiga kategori jenis yang disokong oleh aplikasi ini. Jenis data tersebut merupakan

jenis data asas dalam bahasa C. Memandangkan rentetan dalam C dikendalikan oleh

tatasusunan, maka ia tidak disenaraikan dalam jenis data asas. Berikut adalah jenis data

yang disokong oleh aplikasi.

3

Page 4: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

a) Nombor Integer (int) – Untuk pengisytiharan pemboleh ubah berjenis nombor

bulat seperti 0, 12, -30, 100 dan sebagainya.

b) Nombor Nyata (float, double) – Untuk pengisytiharan pemboleh ubah berjenis

nombor nyata seperti 0.5, 1.2, -3.142, 100.0012323289 dan sebagainya. Dalam

realiti aturcara C yang sebenar, float dan double digunakan untuk mengisytiharkan

pemboleh ubah berjenis nombor nyata dalam julat nombor yang berbeza. Walau

bagaimanapun dalam aplikasi ini ia dianggap jenis data yang sama.

c) Aksara (char) – Jenis data ini digunakan untuk pemboleh ubah yang mampu

memegang aksara, sama ada aksara numerik (0, 1, 2, 3, …, 9), simbol khas (+, -, _,

&, *, $, dan sebagainya) dan huruf besar atau kecil (A-Z, a-z). Untuk

mengumpukkan nilai lateral aksara kepada suatu pemboleh ubah ia memerlukan

nilai tersebut dikurung dengan tanda kutip tunggal (‘).

1.4.2 Pembolehubah dan Pengisytiharan

Terdapat dua aspek pembolehubah yang terdapat dalam spesifikasi iaitu nama dan

pengisytiharan pembolehubah.

a) Nama pembolehubah – Pembolehubah didefinisikan sebagai apa-apa perkataan

dalam aturcara sumber yang memenuhi syarat-syarat berikut;

i. Bukan kata kunci.

ii. Tidak dimulakan dengan aksara nombor.

iii. Tidak mengandungi apa-apa aksara khas kecuali sempang di bawah ( _ ).

iv. Contoh perkataan yang boleh dikategorikan sebagai pemboleh ubah dalam

C ialah nombor, number, pelajar2, no_pelajar, noKadPengenalan, dan

sebagainya.

b) Pengisytiharan pembolehubah.

Pembolehubah mesti diisytiharkan dalam bahasa C dengan jenis data yang tetap.

Contohnya : int noPendaftaran;

Pengisytiharan ini menyatakan bahawa pembolehubah noPendaftaran adalah

pemboleh ubah yang akan hanya menyimpan nombor integer.

Sekiranya pengaturcara ingin mengisytiharkan banyak pemboleubah dalam baris

yang sama, ia boleh dilakukan dengan menggunakan koma sebagai pemisah.

4

Page 5: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Contohnya : int noPendaftaran, noIC, pemandu1;

1.4.3 Pernyataan umpukan dan nilai awal

Untuk mengumpukkan suatu nilai kepada pemboleh ubah, lakukan dengan menggunakan

tanda (=) sebagai simbol operasi tersebut.

Contoh:int nombor1, nombor2;

nombor1=5;nombor2=nombor1;

float PI, jejari, isipadu;PI=3.142;

char hurufVokal;hurufVokal=’a’;

Perhatikan pengisytiharan untuk pemboleh ubah jenis aksara memerlukan tanda kutip

tunggal sebagai pengurung kepada nilai lateral.

1.4.4 Komen

Aplikasi ini mampu mengenal pasti dua jenis komen iaitu;

a) komen satu baris (//…komen….), dan

b) komen blok (/*…….komen…..*/).

Tetapi memandangkan matlamat sebenar aplikasi ini ialah untuk mengkaji kod aturcara

sumber sahaja, maka sebarang komen yang ditemui dalam kod aturcara akan diabaikan.

1.4.5 Operator

a) Aritmetik - Operator aritmetik yang disokong dalam aplikasi ini ialah operator

tambah (+), tolak (-), darab (*), bahagi (/), modulo (%), dan pembuka dan penutup

kurungan ( ).

b) Tokok dan Susut (seperti i++ , i-- , --i dan ++i).

c) Hubungan/Perbandingan – Operator yang bertindak sebagai operator perbandingan

seperti sama dengan (==), tak sama dengan(!=), lebih kecil (<), lebih besar (>),

lebih kecil atau sama dengan (<=), lebih besar atau sama dengan (>=).

5

Page 6: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

d) Operator Boolean – Bagi ungkapan Boolean, berikut adalah operator-operator yang

disokong, DAN (&&), ATAU (||) dan TAK (!).

1.4.6 Struktur kawalan

Struktur kawalan terdiri daripada;

a) Struktur pemilihan (if…else dan switch…case)

b) Struktur pengulangan (do…while, while, dan for)

Aplikasi ini juga mampu mengenal pasti struktur tersarang seperti pemilihan di dalam

gelung atau sebaliknya.

1.4.7 Kawalan ralat

Sekiranya terdapat sebarang ralat semasa analisis leksikal dan analisis tatabahasa analisis

akan dihentikan. Aplikasi kemudian akan memberitahu kepada pengguna bahawa terdapat

ralat di dalam aturcara dan meminta ralat tersebut dinormalkan untuk meneruskan proses

seterusnya.

1.5 METODOLOGI

Kajian ini dimulakan dengan membuat tinjauan perpustakaan untuk melihat sejauh mana

penyelidikan seperti ini telah dibuat oleh penyelidik-penyelidik bidang pentaksir automatik

tugasan pengaturcaraan (PATP).

Dariapada kajian tersebut, penulis dapat mengenalpasti dua pendekatan utama yang

diguna pakai dalam PATP iaitu dinamik dan statik. Penulis mendapati kurang kajian dibuat

kepada pendekatan statik. Menyedari hakikat ini penulis cuba untuk mendalami teknik-

teknik yang digunakan dalam pendekatan statik. Penulis mengambil keputusan untuk

menyelidik lebih lanjut teknik perbandingan bukan-struktur yang dikategorikan dalam

pendekatan statik PATP.

Peringkat seterusnya adalah merekabentuk aplikasi yang akan dibangunkan dengan

skop yang ditetapkan.

6

Page 7: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Selepas pembangunan aplikasi dilaksanakan, satu ujian dibuat untuk mengetahui

kebolehan aplikasi untuk membandingkan tugasan aturcara pelajar dengan aturcara yang

disediakan oleh pensyarah mengikut skop yang telah ditetapkan.

1.6 REKA BENTUK PENYELESAIAN MASALAH

Terdapat dua pengguna utama yang perlu memasukkan aturcara masing-masing.. Pelajar

memasukkan jawapan aturcara untuk soalan yang diberi. Sebelum itu pengajar memasukkan

beberapa aturcara skema (untuk tujuan prototaip, aplikasi ini akan menerima hanya tiga

skema jawapan sahaja).

Aturcara jawapan pelajar akan melalui proses analisis leksikal, dan penjanaan kod

pseudo untuk menghasilkan kod pseudo bagi jawapan pelajar. Begitu juga yang berlaku

skema jawapan aturcara pengajar. Cuma proses analisis leksikal dan penjanaan kod pseudo

akan berlaku berulang-kali untuk kesemua skema jawapan yang telah disediakan.

Seterusnya kod pseudo jawapan pelajar akan dibandingkan dengan satu daripada

kod pseudo skema. Perbandingan ini akan menghasilkan peratus kesamaan antara kod

pseudo pelajar dengan satu kod pseudo skema. Peratus persamaan ini akan disimpan

sementara. Proses perbandingan kod pseudo pelajar dengan kod pseudo skema akan

berulang sehingga kod pseudo pelajar dibandingkan dengan kesemua kod pseudo skema.

Setiap proses perbandingan akan menghasilkan peratus kesamaan yang mungkin berbeza.

Kesemua peratus perbandingan yang diperoleh akan dibandingkan untuk mencari

peratus kesamaan yang paling tinggi. Seterusnya peratus kesamaan yang tertinggi akan

dipaparkan kepada pengajar sebagai markah kepada jawapan pelajar bagi soalan tersebut.

1.7 RINGKASAN HASIL DAN SUMBANGAN KAJIAN

Kajian ini akan menghasilkan beberapa sumbangan kepada bidang yang dikaji. Antara hasil

kajian tersebut ialah;

a) Menghasilkan kaedah yang boleh membandingkan jawapan aturcara pelajar

dengan jawapan-jawapan aturcara daripada pengajar. Kaedah yang dicadangkan

7

Page 8: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

juga akan mencari peratus persamaan yang tertinggi, sebagai markah kepada

jawapan pelajar tersebut.

b) Satu lagi kaedah dalam penyemakan automatik tugasan pengaturcaraan (PATP)

melalui pendekatan analisis statik dapat dicadangkan.

1.8 STRUKTUR TESIS

Tesis ini mempunyai lima bab perbincangan yang berkesinambungan antara satu dengan

yang lain. Setiap bab membincangkan topik-topik yang berkaitan dengan kajian yang

dibuat. Bab I merangkumi pengenalan kajian, pernyataan masalah, metodologi, objektif,

hasil dan sumbangan kajian. Bab ini merupakan ringkasan kepada keseluruhan kajian.

Bab II meliputi kajian kesusasteraan mengenai sistem penyemak aturcara yang

menggunakan pendekatan analisis statik. Kajian akan ditumpukan kepada analisis statik

memandangkan fokus kajian adalah kepada pendekatan ini. Antara perkara-perkara yang

dibincangkan ialah sedikit sejarah mengenai pembangunan PATP untuk tujuan akademik,

perbincangan tentang kelebihan dan kelemahan PATP, pendekatan yang biasa diguna pakai

dalam implementasi PATP, perbincangan lanjut tentang pendekatan statik, analisis-analisis

yang terdapat dalam kategori pendekatan statik, kelebihan dan kelemahan pendekatan

statik, kajian-kajian mengenai pendekatan statik, dan diakhiri dengan kesimpulan.

Bab III pula menerangkan reka bentuk terperinci aplikasi yang dibangunkan. Tiga

modul utama akan diperjelaskan dengan lebih terperinci. Modul-modul tersebut ialah

penganalisis leksikal, penjana kod pseudo dan pembanding kod pseudo. Perwakilan yang

digunakan ialah rajah UML untuk menerangkan hubungan antara kelas yang terlibat dalam

aplikasi. Manakala kod pseudo pula adalah perwakilan untuk menerangkan algoritma-

algoritma utama.

Bab VI adalah penjelasan mengenai implementasi dan pengujian. Dalam bab ini

penulis akan menerangkan bagaimana reka bentuk yang telah dirancang diimplementasikan

dalam pembangunan aplikasi. Aplikasi yang dibangunkan akan diuji dengan pelbagai

contoh aturcara untuk menentukan ketepatan perbandingan yang dibuat.

8

Page 9: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Bab V merupakan kesimpulan dan rancangan perluasan masa hadapan mengandungi

perbincangan tentang kelemahan dan ruang pembaikan yang boleh dilakukan terhadap

aplikasi yang dibangunkan.

9

Page 10: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

BAB II

KAJIAN LITERATUR: PENYEMAKAN AUTOMATIK

TUGASAN PENGATURCARAAN MENGGUNAKAN

PENDEKATAN ANALISIS STATIK

2.1 PENGENALAN

Penyemak automatik tugasan pengaturcaraan (PATP) adalah kaedah yang semakin popular

untuk menyemak, menilai dan memberi markah latihan aturcara pelajar. Seperti yang

dicadangkan oleh namanya, kaedah ini akan membuat penyemakan dan penilaian secara

automatik dengan berbantukan sistem komputer. Dengan ini dapat membantu (walaupun

bukan 100 peratus) pensyarah daripada melakukan kerja-kerja penyemakan latihan secara

manual.

Bidang ini telah lama dikaji semenjak 1960 lagi oleh Hollingsworth (1960). Dalam

kajiannya, beliau telah membangunkan PATP untuk menyemak dan menilai latihan aturcara

penghimpun pada kad tebuk. Semenjak itu, banyak penyemak automatik tugasan

pengaturcaraan dibangunkan untuk menyokong bahasa pengaturcaraan yang lain.

Bab ini akan membincangkan serba sedikit tentang pembangunan beberapa PATP

yang telah dibangunkan di dalam dan juga luar negara. Perbincangan meliputi sejarah,

kelebihan dan kelemahan PATP, dan juga pendekatan yang digunakan dalam PATP yang

terdahulu. Fokus diberikan kepada PATP yang menggunakan kaedah-kaedah yang

dikategorikan dalam pendekatan analisis statik. kaedah-kaedah tersebut ialah penentuan

gaya pengaturcaraan, pengesanan ralat aturcara (sintaksis atau semantik), penilaian metrik

perisian, penilaian struktur aturcara, penilaian bukan-struktur, penilaian dengan kata kunci,

pengesanan plagiarisme dan penilaian diagram.

10

Page 11: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

2.2 KELEBIHAN MENGGUNAKAN PATP

Berikut merupakan senarai kelebihan menggunakan penyemak automatik tugasan

pengaturcaraan;

a) Menjimatkan masa dan mengurangkan beban pengajar (Truong et. al., 2005).

Dengan menggunakan sistem ini, pensyarah tidak perlu menguntukkan masa yang

banyak untuk menyemak semua jawapan pelajar. Mereka hanya perlu

menguntukkan masa yang minimal untuk membuat pengesahan dan membaca

laporan yang dijana oleh sistem. Dengan ini mereka boleh memberikan lebih

perhatian kepada pelajar yang mendapat markah yang rendah daripada latihan yang

diberikan. Pengajar secara kebiasaannya terlibat dengan persediaan mengajar,

memberi kuliah, mengendali tutorial, menguruskan jabatan atau fakulti, membuat

penyelidikan, menulis artikel atau buku dan sebagainya. Ini menyukarkan mereka

untuk memberi tumpuan kepada aktiviti menyemak latihan yang banyak dan

berulang.

b) Mengelakkan penilaian berat sebelah (Norshuhani et. al., 2006). Terdapat

pensyarah yang memberi keistimewaan kepada pelajar tertentu atau pilih kasih.

Pelajar yang diberi perhatian yang lebih biasanya akan diberikan markah yang

tinggi berbanding dengan pelajar yang tidak diminati, walaupun jawapan yang

dihantar mempunyai kualiti yang lebih kurang sama. Dengan menggunakan sistem

ini, pensyarah tidak tahu jawapan siapa, kerana sistem akan menilai dan memberi

markah secara automatik.

c) Maklum balas yang lebih cepat (Truong et. al., 2005). Pelajar pengaturcaraan

perlukan maklum balas yang cepat dalam usaha untuk mengetahui kelemahan

mereka dan di mana kesilapan yang telah dilakukan. Dengan ini mereka boleh

memperbetulkan kesilapan tersebut dan tidak diulangi untuk latihan yang akan

datang. Memandangkan beban pensyarah yang sangat banyak, mereka mungkin

tidak dapat menyemak dan menilai latihan dengan kadar yang segera. Ini

menyebabkan pelajar tidak mendapat maklumat tentang setakat mana keupayaan

mereka dalam subjek pengaturcaraan tersebut.

11

Page 12: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

d) Mampu mengesan plagiat dengan lebih mudah (Wise, 1993). Terdapat sistem yang

mampu mengesan plagiarisme di dalam jawapan pelajar. Sekiranya plagiat dapat

dikesan dengan lebih awal, pensyarah berkesempatan untuk memanggil pelajar-

pelajar yang terlibat dan memberikan konsultasi.

e) Tugasan pelajar dapat diurus dengan lebih cekap (Ala-Mutka, 2005). Sekiranya

kaedah manual digunakan, pengajar perlu mengumpulkan jawapan dalam bentuk

cetakan pada kertas, atau ada pelajar yang menghantar dalam e-mel, mungkin

dalam bentuk salinan lembut dalam cakera keras atau disket. Medium yang

pelbagai ini sangat sukar untuk diselenggara dan sangat mudah untuk tersilap letak

atau tercicir. Dengan penggunaan sistem ini pengajar boleh mencapai semua

jawapan pelajar melalui satu medium sahaja.

Walaupun terdapat banyak kelebihan menggunakan PATP berbanding kaedah

manual, namun kaedah penyemakan aturcara bagi kebanyakan institut masih lagi

menggunakan kaedah manual (Charter, 2003). Keadaan mungkin disebabkan pembangunan

sistem PATP yang bersifat akademik dan tidak cukup ramah pengguna untuk digunakan

oleh kebanyakan pengajar. Antara faktor lain yang menjadi penyebab adalah kebanyakan

PATP yang dibangunkan tidak dapat menyokong semua bahasa pengaturcaraan. Oleh itu

usaha untuk membangunkan sistem PATP yang mudah diubahsuai untuk menyokong

pelbagai bahasa harus dipertingkatkan.

2.3 PENDEKATAN-PENDEKATAN YANG DIGUNA PAKAI DALAM

PENYEMAKAN ATURCARA

Walau apa jua bahasa pengaturcaraan yang disokong oleh sistem tersebut, dua pendekatan

yang biasanya diguna pakai; sama ada penyemakan secara dinamik atau statik.

Memandangkan tiada pendekatan tunggal yang mampu memuaskan penyemakan aturcara

secara menyeluruh, biasanya sistem penyemak automatik tugasan pengaturcaraan

menggabungkan beberapa pendekatan atau peralatan yang menyemak aturcara daripada

pelbagai aspek (Rohaida, 2003).

12

Page 13: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

2.3.1 Pendekatan Analisis Dinamik

Pendekatan dinamik melibatkan pelaksanaan aturcara program dengan menguji program

dengan set-set data ujian yang tertentu (Foxley et. al., 1996). Melalui kaedah ini, program

yang diuji perlu menghasilkan output, dan output tersebut akan dibandingkan dengan output

kawalan. Daripada perbandingan ini, sistem akan menentukan kebetul-salahan program

yang diuji.

Memandangkan kaedah ini memerlukan kod aturcara dilaksanakan, beban yang

berlebihan mungkin akan menyebabkan kegagalan kepada komputer pelayan. Program

perlu dipastikan tidak mengandungi gelung yang tidak berpenghujung (infinite loop) untuk

mengelakkan sistem tergantung. Kod aturcara perlu dipastikan tidak mengandungi program

yang berunsur virus (seperti virus Trojan horse atau serangan denial of service ) yang akan

mengganggu kelancaran sistem. Segala kemungkinan ini perlu ditangani supaya sistem

yang terhasil adalah selamat dan boleh digunakan secara konsisten. Ini akan menambahkan

kekompleksan sistem dan kos yang lebih tinggi.

Isu-isu berkaitan analisis dengan pendekatan dinamik telah diterangkan dengan

panjang lebar oleh Rohaida (2003). Melalui kajiannya, beliau mengkategorikan pengujian

dinamik kepada tiga, iaitu pengujian kotak hitam, pengujian kotak putih dan regresi.

2.3.2 Pendekatan Analisis Statik

Penilaian menggunakan pendekatan analisis statik adalah satu kaedah untuk mengumpulkan

maklumat mengenai kod aturcara tanpa perlu melaksanakannya (Ala-Mutka, 2005). Ini

adalah antara kaedah yang digunakan untuk mengesan ralat semantik dan sintaksis. Kaedah

ini juga berguna untuk mengesan gelung tak berpenghujung, pernyataan yang mungkin

tidak akan dilaksanakan, mengesan indentasi dalam aturcara, menilai gaya pengaturcaraan

dan sebagainya.

2.4 ANALISIS-ANALISIS MENGGUNAKAN PENDEKATAN STATIK

Kebanyakan sistem PATP menggunakan pendekatan dinamik dengan menggunakan set data

ujian untuk menentukan kebolehan program berfungsi dengan betul. Namun terdapat

beberapa ciri-ciri dalam penilaian aturcara yang hanya memerlukan implementasi

13

Page 14: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

menggunakan kaedah pendekatan statik. Antaranya ialah penentuan gaya pengaturcaraan,

pengesanan ralat aturcara, penilaian metrik perisian, penilaian struktur aturcara, penentuan

plagiarisme dan penilaian diagram.

2.4.1 Penentuan Gaya Pengaturcaraan

Terdapat keperluan untuk penulis aturcara menulis dengan gaya tertentu untuk memastikan

aturcara mudah dibaca dan diselenggara. Aturcara yang berkualiti mestilah mempunyai

indentasi supaya mudah dibaca. Pembolehubah dan pengecam yang digunakan mestilah

mempunyai maksud yang memudahkan orang lain untuk memahami apa yang dilakukan

oleh aturcara (Marini et. al. 2002). Faktor-faktor tersebut perlu diambil kira untuk

menentukan aturcara yang berkualiti. Antara sistem yang dibangunkan untuk menangani

keperluan penyemakan gaya pengaturcaraan ini ialah Style++ (Ala-Mutka et. al., 2004).

Semakan Style++ tertumpu kepada penggunaan komen, baris kosong, penerangan mengenai

program, penamaan pembolehubah, struktur program, skop pembolehubah, layout program

dan penggunaan pemalar.

2.4.2 Pengesanan Ralat Aturcara (Sintaksis atau Semantik)

Ralat sintaksis atau semantik boleh dikesan sebelum aturcara dihantar untuk proses

seterusnya. Kebiasaannya proses ini mampu dilakukan dengan berkesan menggunakan

pengkompil. Pengkompil masa kini sangat maju dan mampu menunjukkan di mana ralat

berlaku. Terdapat juga pengkompil yang mampu memberikan cadangan untuk

membetulkan ralat sintaksis atau semantik yang terdapat dalam aturcara.

Daripada segi semantik pula, terdapat PATP yang mampu mengesan struktur

aturcara yang mencurigakan seperti pengesan gelung yang tidak berkesudahan, dalam

Ceilidh (Foxley et. al., 1996).

Aplikasi seperti CAP (Code Analyzer for Pascal) dibangunkan oleh Schorsch (1995)

mampu mengesan ralat sintaksis, ralat logik dan juga ralat daripada segi gaya (style error)

untuk Pascal. Apa yang menarik dalam aplikasi ini ialah kedudukan ralat dan apa kesalahan

yang berlaku dinyatakan dengan terperinci. Terdapat juga cadangan pembetulan yang

sangat komprehensif untuk membantu pelajar. Aplikasi ini mempunyai objektif yang sangat

14

Page 15: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

besar iaitu ia cuba menggantikan pengajar atau tutor dalam usaha pelajar membuat latihan

aturcara.

2.4.3 Penilaian Metrik Perisian

Banyak sistem PATP telah dibangunkan untuk mengendali skop ini, Ceilidh, BOSS (Joy

dan Luck, 1998), Style++ (Ala-Mutka et. al., 2004), CAP dan banyak lagi. Terdapat

beberapa metrik perisian yang diimplementasikan dalam sistem mereka. Antaranya ialah

McCabe (1976) yang mencadangkan kekompleksan cyclomatic yang digunakan dalam

Assyst (Jackson dan Usher, 1997), ELP (Truong et. al., 2004) dan Verilog Logiscope

WinViewer (Mengel dan Yerramilli, 1999).

Beberapa metrik perisian yang digunakan dalam PATP untuk menyukat

kekompleksan aturcara disenaraikan dalam Jadual 2.1.

Jadual 2.1 Beberapa contoh metrik perisian

Metrik perisian Kegunaan Diperkenalkan oleh

1 Cyclomatic Complexity

menyukat jumlah logik keputusan dalam modul aturcara. Cyclometic Complexity ditentukan dengan e – n +2, di mana e adalah bilangan pinggir dan n adalah bilangan nod dalam graf aliran kawalan. Metrik ini dinilai untuk setiap kelakuan dalam kelas.

McCabe (1976)

2 Metrik Pengukuran Sains Perisian (Software Science Metrics)

n1 – bilangan operator unikn2 – bilangan operan unikN1 – jumlah bilangan kehadiran operatorN2 - jumlah bilangan kehadiran operan

Daripada empat pengukuran tersebut, lahir metrik pengukuran berikut;n = n1 + n2 – vocabulary programN = N1 + N2 – panjang programV = N.log2n – isipadu programV* = (2+ nJ)lo.g2(2+ nl) – isipadu potensi (potential volume)L = V*/V – taraf algoritmaE = V/L – kesusahan aturcara

Halstead (1977)

bersambung ...

15

Page 16: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

... sambungan

3 NOC (Number of Classes)

Menyukat bilangan kelas dalam aturcara Tegarden et. al. (1995).

4 SIZE2 (Number of properties)

Menyukat bilangan sifat (properties) Li and Henry (1993)

5 AC (Attributes Complexity)

OpCom (Operation Complexity of Classes)

Mengira nilai semua atribut dalam kelas berdasarkan nilai tertentu.

Menilai semua nilai kekompleksan untuk setiap kelakuan dalam kelas.

Chen dan Lu (1993)

2.4.4 Penilaian Struktur Aturcara

Melalui kaedah ini, kod aturcara yang dihantar akan ditentukan sama ada struktur program

menepati kehendak atau tidak. Cara yang biasa dilakukan adalah membandingkan kod

aturcara pelajar dengan model penyelesaian yang disediakan oleh pengajar.

Dalam kajian Truong et. al. (2004), kod aturcara pelajar diterjemahkan kepada

pohon sintaksis abstrak (Abstract Syntax Tree, AST) dalam bentuk perwakilan XML

(Badros, 2000). Struktur abstrak yang telah terhasil akan dibandingkan dengan struktur

abstrak model melalui kaedah analisis persamaan struktur (structural similarity analysis).

Daripada kaedah ini, aturcara pelajar akan ditentukan sama ada ia sepadan dengan abstrak

model atau tidak.

2.4.5 Penilaian Bukan-Struktur

Norshuhani et. al. (2006) pula mencadangkan kaedah analisis kesamaan bukan-struktur

(non-structural similarity analysis) untuk mencari persamaan antara aturcara pelajar dengan

aturcara model daripada pengajar. Kaedah ini mampu dilakukan dengan bantuan algoritma

pemetaan teks (text mapping) dan juga algoritma pencarian teks (text searching).

Memandangkan penilaian melalui perbandingan struktur atau bukan-struktur

aturcara memerlukan pengajar menyediakan model penyelesaian (satu atau lebih model

diperlukan untuk pemadanan yang lebih berkesan), pelbagai kemungkinan penyelesaian

perlu disediakan. Adalah mustahil untuk menyediakan kesemua kemungkinan penyelesaian

16

Page 17: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

untuk masalah yang lebih rumit. Jadi dua kaedah ini hanya sesuai untuk permasalahan

aturcara untuk peringkat permulaan sahaja, (Thruong et. al., 2004).

2.4.6 Penilaian Dengan Kata Kunci

Penilaian menerusi kaedah ini memerlukan sistem untuk mencari pernyataan dengan kata

kunci tertentu. Saikkonen (2001) telah membangunkan Scheme-robo untuk menilai latihan

aturcara yang ditulis dalam satu pengaturcaraan fungsian, Scheme. Terdapat latihan tertentu

yang tidak membenarkan pelajar menggunakan beberapa kata kunci dalam jawapan mereka.

2.4.7 Pengesanan Plagiarisme

Pengesan plagiarisme adalah aplikasi yang mampu untuk menentukan dua atau lebih kod

aturcara ditiru daripada satu aturcara lain. Plague adalah antara aplikasi yang awal yang

mampu mengesan plagiarisme yang berlaku pada kod aturcara menggunakan perbandingan

token menggunakan satu varian daripada kaedah Longest Common Subsequence (LCS). Ia

dibangunkan oleh Whale (1986) untuk menyokong bahasa Pascal, Prolog, Bourne Shell dan

Llama. Namun aplikasi ini dianggap tidak popular kerana terdapat kerumitan untuk

diimplementasi kepada bahasa pengaturcaraan yang lain (Granville 2002).

YAP (Yet Another Plague) adalah satu aplikasi pemadanan kod aturcara untuk

mengesan plagiat (Wise, 1994) yang menggunakan kaedah pemadanan metrik struktur

(Donaldson et. al., 1981). Dalam versi yang terkini, YAP3 menggunakan algoritma

pemadanan teks Running-Karp-Rabin Greedy-String-Tiling (RKR-GST). Algoritma ini

mampu untuk melakukan pemadanan teks dengan lebih berkesan dan cepat.

JPlag boleh diperoleh melalui halaman web http://wwwipd.ira.uka.de/jplag/

(Prechelt et. al., 2000). Aplikasi ini menggunakan Java sebagai bahasa pembangunan. Ia

mampu mengesan plagiarisme untuk bahasa Java, C, C++ dan Scheme. Pada dasarnya ia

menggunakan algoritma RKR-GST yang diasaskan oleh Wise (1994).

2.4.8 Penilaian Diagram

Terdapat juga beberapa PATP yang mampu melakukan fungsi-fungsi khas yang lain seperti

menyemak rajah carta alir, reka bentuk berasaskan objek dan juga menjalankan simulasi

17

Page 18: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

untuk rajah litar elektronik (Symeonidis, 1998). Semua peralatan penyemakan tersebut

terdapat di dalam sistem CourseMaster dan ia dilakukan secara analisis statik. Penyemak

carta alir tersebut akan menterjemah carta alir pelajar kepada bahasa BASIC sebelum

dihantar kepada peralatan penyemakan dinamik untuk dinilai. Penyemak reka bentuk objek

akan menilai reka bentuk yang dihasilkan pelajar. Pengujian akan menentukan

kesempurnaan, kebetulsalahan, ketepatan dan hubungan antara objek yang betul. Litar logik

elektronik juga boleh direka dan dihantar kepada sistem penyemak, CircuitSim. CircuitSim

akan melakukan simulasi untuk menentukan penggunaan komponen elektonik yang betul,

pendawaian yang sempurna dan juga pengaliran arus yang tepat. Sebarang penggunaan

komponen yang tidak diperlukan dan juga pendawaian yang tidak sempurna akan

menyebabkan markah dikurangkan.

2.5 KELEBIHAN DAN KELEMAHAN PENDEKATAN ANALISIS STATIK

Bahagian 2.5.1 merupakan ringkasan kelebihan dan bahagian 2.5.2 merupakan ringkasan

kelemahan dalam pendekatan analisis statistik.

2.5.1 Kelebihan

a) Implementasi yang lebih mudah dan murah (Truong et. al. , 2004) kerana tidak

memerlukan pengkompil dan pelaksana aturcara.

b) Kurang membebankan pelayan (Truong et. al., 2004) dengan ketiadaan

pengkompil dan pelaksana.

c) Boleh dijalankan walaupun terdapat ralat dalam aturcara (Rohaida, 2003).

d) Tidak memerlukan input ujian (Rohaida, 2003).

e) Memberikan lebih fleksibiliti kepada jawapan pelajar (Norshuhaini et. al., 2006).

2.5.2 Kelemahan

a) Perlu menyediakan banyak penyelesaian yang mungkin, untuk perbandingan

struktur atau bukan-struktur (Truong et. al., 2004).

b) Tidak dapat menentukan fungsi dan efisien program (Ala-Mutka, 2005).

18

Page 19: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

2.6 KAJIAN-KAJIAN LEPAS BERKAITAN PENGUJIAN MENGGUNAKAN

PENDEKATAN STATIK

Terdapat banyak kajian-kajian yang lepas yang menggunakan gabungan pendekatan

dinamik dan statik untuk membina sistem PATP. Hanya segelintir yang bergantung kepada

pendekatan statik semata-mata. Perbincangan hanya berkisar tentang bahagian penyemakan

dengan menggunakan pendekatan statik, walaupun pendekatan dinamik digunakan bersama

dalam sistem PATP tersebut. Penyelidikan-penyelidikan lepas yang dipilih ialah

Ceilidh/CourseMaster, ELP dan WAGS.

2.6.1 Ceilidh/CourseMaster

Sistem ini pada asalnya dibangunkan oleh Universiti Nottingham sejak 1988 untuk

menyokong bahasa C (Foxley et. al., 1996). Sekarang sistem ini dinamakan CourseMaster

dan diubahsuai supaya mampu menyokong penulisan aturcara melalui pendekatan

berasaskan objek. Sistem ini telah mengalami evolusi dengan penyertaan beberapa

universiti yang lain sehingga mampu menyokong bahasa C++, SQL, Pascal, SML, Fortran

dan lain-lain lagi.

Sistem ini menggunakan kedua-dua pendekatan, statik dan dinamik. Apa yang

dilakukan oleh sistem ini untuk penilaian statik ialah;

a) penilaian susunan(layout) dan struktur aturcara,

b) pengesanan indentasi,

c) pemilihan pengecam,

d) mudah dibaca,

e) metrik kompleksiti,

f) penggunaan denotasi,

g) amaran keserabutan (penggunaan goto yang merumitkan aturcara)

h) pengesan struktur yang mencurigakan (untuk mengelakkan gelung yang tak

berkesudahan – infinite loop).

2.6.2 ELP

Truong et. al., (2004), telah membangunkan satu sistem ELP (Environment to Learning

Programming) untuk menyokong bahasa pengaturcaraan Java can C#. Beliau menggunakan

19

Page 20: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

pendekatan analisis dinamik dan juga statik. Untuk bahagian analisis statik, perkara-perkara

berikut telah diambil kira dalam pembangunan sistem tersebut. Perkara-perkara tersebut

ialah analisis metrik kejuruteraan perisian dan analisis kesamaan struktur.

Dalam analisis metrik kejuruteraan perisian, perkara-perkara yang diambil kira oleh

penulis adalah seperti dalam Jadual 2.2.

Jadual 2.2 Penilaian metrik kejuruteraan perisian dalam ELP

Item KeteranganStatistik program Mengira bilangan pembolehubah, kenyataan dan

ungkapan.Pembolehubah bayangan Menentukan kehadiran pembolehubah yang sama

diisytihar dalam skop kelas dan skop metod.Kerumitan cyclomatic Mengira bilangan keputusan logik dalam aturcaraParameter tidak digunakan Memeriksa parameter yang tidak digunakan dalam

metod.Ungkapan logik berganda Mengesan ungkapan logik berganda seperti

“X==true”Pembolehubah yang tidak digunakan

Mengesan pembolehubah yang diisytihar tetapi tidak digunakan.

Nombor ajaib Pastikan penyelesaian pelajar tidak terlalu bergantung pada nilai literal.

Had capaian Menentukan pembolehubah dan metod menggunakan had capaian yang betul.

Pernyataan switch Memastikan pernyataan switch yang digunakan mengandungi default, dan setiap case diakhiri dengan break.

Bilangan aksara dalam baris Mengira bilangan aksara dalam satu baris (maksimum 80).

Tiada tab Memastikan ruang kosong (space) digunakan menggantikan tab sebagai indentasi.

Dalam proses analisis kesamaan struktur, beliau menggunakan kaedah perbandingan

abstrak kod pseudo. Kod pseudo abstrak adalah perwakilan kepada struktur asas algoritma

kepada aturcara. Aturcara pelajar yang dihantar melalui sistem tersebut akan diterjemahkan

kepada kod pseudo abstrak dan dibandingkan dengan skema kod pseudo abstrak yang

dibekalkan oleh pengajar. Beliau menegaskan bahawa kaedah ini hanya sesuai untuk

menganalisis aturcara mudah bagi peringkat pengenalan kepada bahasa pengaturcaraan

yang dipelajari. Kaedah ini tidak sesuai untuk digunakan kepada pengaturcaraan yang

melibatkan penulisan aturcara yang panjang. Ini kerana masalah yang lebih kompleks akan

memungkinkan beberapa kaedah penyelesaian yang berbeza dihantar oleh pelajar. Jadi

struktur aturcara yang lebih daripada satu diperlukan sebagai skema penyelesaian. Ada

20

Page 21: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

kemungkinan terdapat banyak kaedah penyelesaian yang mungkin tidak terfikir oleh

pengajar dalam menyediakan skema. Ini akan merumitkan proses perbandingan kod pseudo

(Rich dan Wills, 1990).

Kaedah yang diimplementasikan dalam sistem ini adalah penjanaan AST (Abstract

Syntax Tree) yang diwakilkan dalam format XML, seperti contoh dalam Rajah 2.1. Kaedah

ini dicadangkan oleh Parr (2006) dalam perisian yang dibangunkannya, ANTLR (boleh

diperoleh dari http://antlr.org/). AST aturcara pelajar akan dibandingkan dengan AST yang

dibekalkan oleh pengajar. Dengan membandingkan kedua-dua AST, sistem ini dapat

mengesan sekiranya aturcara pelajar ada kesamaan dengan jawapan pengajar atau pun tidak.

Tetapi sistem ini hanya dapat memberi salah satu daripada dua keputusan, struktur yang

dibandingkan sama atau tidak sahaja.

<gap><statements>

<assignment>1</assignment><methodCall>1</methodCall><loop><condition>

<trueBranch><methodCall>1</methodCall>

</trueBranch><falseBranch>

<methodCall>1</methodCall></falseBranch>

</condition><assignment>1</assignment><methodCall>1</methodCall></loop>

</statements></gap>

Rajah 2.1 AST dalam format XML yang dicadangkan oleh Parr (2006)

Antara kelemahan perbandingan menggunakan AST ialah struktur yang dijana oleh

sistem terlalu ringkas. Struktur AST yang terlalu ringkas ini tidak dapat digunakan untuk

menilai kod, operator dan sintaksis yang terdapat dalam aturcara yang disemak.

2.6.3 WAGS

WAGS adalah antara PATP yang menggunakan sepenuhnya penilaian melalui pendekatan

analisis statik. Produk ini dibangunkan oleh sekumpulan penyelidik di Universiti Teknologi

21

Page 22: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Petronas. Sistem ini mampu menyokong beberapa bahasa pengaturcaraan seperti Visual

Basic, C dan Java. Keistimewaan sistem ini ialah ia mampu membandingkan kod aturcara

yang dihantar oleh pelajar dengan kod aturcara skema, iaitu skema jawapan kepada latihan

tersebut. Untuk kes tugasan dengan kemungkinan jawapan yang lebih daripada satu,

pengajar perlu menyediakan beberapa skema jawapan. Aturcara pelajar akan dibandingkan

dengan semua skema yang dibekalkan, dan markah yang tertinggi akan diambil sebagai

markah akhir tugasan tersebut.

Kaedah di atas mampu dilakukan dengan algoritma dalam Rajah 2.2 yang

dicadangkan oleh pembangun sistem tersebut.

Rajah 2.2 Algoritma yang dicadangkan oleh Norshuhani et. al. (2005)

Melalui algoritma yang dicadangkan, aturcara pelajar akan melalui proses

penyaringan dalam langkah pra-pemprosesan. Ini untuk memastikan jawapan tersebut tidak

mengandungi elemen-elemen yang boleh menjejaskan operasi seterusnya. Peringkat ini

akan memformatkan semula aturcara tersebut kepada semua huruf kecil, membuang baris

kosong, trimming (membuang aksara tak nampak di pangkal dan hujung baris), membuang

kod yang dijana oleh sistem IDE, dan beberapa perkataan tertentu ditukar kepada perkataan

piawai.

Seterusnya dengan menggunakan algoritma perbandingan, aturcara pelajar akan

dibandingkan dengan model penyelesaian yang telah disediakan oleh pengajar. Sekiranya di

Skema jawapan 1

Skema jawapan 2

Skema jawapan n

Algoritma pra-pemprosesan

Algoritma pemetaan teks

Algoritma pencarian teks

Markah dan analisis

Jawapan pelajar

WAGS

i=1

i=i+1

i=N

:

22

Page 23: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

sepanjang proses pembandingan, terdapat struktur atau baris kod yang sama, markah akan

diberikan. Jika baris aturcara tidak sama dengan model penyelesaian, bahagian tersebut

akan ditandakan sebagai ralat, dan akan ditolak daripada markah terkumpul.

Untuk menangani kemungkinan model penyelesaian yang pelbagai, sistem ini akan

membandingkan aturcara jawapan pelajar dengan semua model penyelesaian yang

dibekalkan. Markah yang tertinggi daripada perbandingan untuk setiap model penyelesaian

akan dikira sebagai markah tugasan tersebut.

Antara kelemahan WAGS yang dapat dikenal pasti ialah ia tidak mengambil kira

tentang kedudukan pengisytiharan pembolehubah yang mungkin bertabur dalam kod

aturcara. Sekiranya pengisytiharan pembolehubah dapat dikumpulkan dan dilakukan

analisis yang berbeza, ketepatan perbandingan akan meningkat.

2.6.4 Sumbangan Aplikasi kepada Bidang Kajian

Ceilidh/CourseMaster, ELP dan WAGS adalah antara contoh-contoh aplikasi sedia ada

yang menggunakan pendekatan statik dalam mentaksir kod aturcara. Ceilidh/CourseMaster

memfokus kepada pengukuran metrik perisian, ELP lebih kepada struktur aturcara

keseluruhan dan WAGS terus kepada penilaian betul/salah kod aturcara. Aplikasi yang

dibangunkan ini cuba untuk meninjau pendekatan statik dengan menggunakan kod pseudo

sebagai fokus kajian.

2.7 RUMUSAN

Terdapat dua pendekatan utama dalam penilaian aturcara, dinamik dan statik. Penulis

mendapati bahawa pendekatan statik banyak digunakan untuk mengukur metrik perisian

tetapi kurang kepada matlamat untuk menentukan kebetul-salahan aturcara. Fokus

ditumpukan kepada pendekatan statik dengan membandingkan persamaan aturcara melalui

analisis perbandingan kesamaan bukan-struktur.

Motivasi di sebalik pemilihan ini ialah untuk memberi fleksibiliti kepada para

pelajar untuk menulis aturcara yang memungkinkan pelbagai jalan penyelesaian. Kaedah

yang dipilih ini dapat mengurangkan beban kepada pelayan dan dalam masa yang sama

23

Page 24: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

mengurangkan risiko sistem tergendala kerana kesilapan logikal semasa pelaksanaan

aturcara yang dihantar oleh pelajar.

24

Page 25: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

BAB III

REKA BENTUK APLIKASI

3.1 PENDAHULUAN

Bab ini akan menerangkan skop, keperluan perkakasan dan perisian dan reka bentuk

keseluruhan aplikasi ini dengan lengkap. Memandangkan pembangunan aplikasi ini adalah

menggunakan pendekatan berorientasikan objek, maka perwakilan reka bentuk akan

menggunakan UML (Unified Modeling Language). Dengan menggunakan perwakilan ini

hubungan antara kelas-kelas yang terlibat akan dapat diperjelaskan secara lebih berkesan.

Bab ini akan memfokus kepada reka bentuk keseluruhan aplikasi yang mengandungi

tiga kelas; iaitu kelas penganalisis leksikal, penjana kod-pseudo dan pembanding kod-

pseudo.

Bab ini akan menerangkan secara terperinci tentang rekabentuk apliksi yang dibangunkan.

Penulis memilih untuk menggunakan UML (Unified Modelling Language) untuk

menerangkan rekabentuk aplikasi, memandangkan pendekatan pengaturcaraan yang diguna

pakai dalam aplikasi ini adalah berasaskan objek. Penjelasan untuk algoritma penting yang

terdapat dalam aplikasi akan dijelaskan secara terperinci menggunakan kod pseudo dalam

bahagian 3.3.

3.2 REKA BENTUK UML

Reka bentuk dalam UML dipersembahkan dalam dua rajah iaitu melalui rajah kes

penggunaan (use case diagram), Rajah 3.1 dan juga rajah hubungan kelas yang

digambarkan melalui Rajah 3.2.

25

Page 26: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

3.2.1 Rajah Kes Penggunaan (use case)

Rajah kes penggunaan adalah ilustrasi yang digunakan untuk menunjukkan partisi sistem

dan juga pengguna pada peringkat analisis keperluan (Booch et. al., 1999). Rajah kes

penggunaan untuk aplikasi ini digambarkan seperti dalam Rajah 3.1.

Rajah 3.1 Rajah kes penggunaan

Orang lidi digambarkan sebagai pengguna yang terlibat dan bagaimana ia

menggunakan aplikasi melalui antaramuka yang sesuai. Pelajar akan menggunakan

antaramuka yang khas untuk mereka memasukkan jawapan soalan-soalan yang

dikemukakan. Pengajar akan menggunakan antara muka yang disediakan khas untuk

mereka menyediakan soalan-soalan dan memasukkan jawapan-jawapan skema. Pengajar

juga akan mendapat keputusan perbandingan jawapan pelajar dengan skema-skema yang

telah disediakan.

26

Page 27: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

3.2.2 Rajah Hubungan Kelas

Terdapat lima kelas utama dalam aplikasi ini iaitu kelas antara muka, kelas penganalisis

leksikal, kelas penjana kod pseudo, dan kelas pembanding kodpseudo. Penerangan lanjut

tentang kelas penganalisis leksikal terdapat dalam kod pseudo pada Rajah 3.10 – 3.29, kelas

penjana kodpseudo Rajah 3.30 – 3.46 dan kelas pembanding kodpseudo Rajah 3.47 – 3.51

Kelas-kelas yang lain merupakan kelas-kelas sokongan untuk membantu kelas-kelas utama.

Rujuk Rajah 3.2 untuk rajah hubungan kelas.

Setiap kelas mempunyai beberapa atribut dan metod yang setiap satunya dijelaskan

secara terperinci dalam Lampiran A. Penerangan dalam bahagian ini menjurus kepada

peranan setiap kelas dan hubungan antara kelas-kelas yang terdapat dalam aplikasi ini.

Rajah 3.2 Rajah hubungan kelas

27

Page 28: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

3.2.3 Kelas Antaramuka Input

Kelas AntaramukaInput merupakan kelas yang menjadi perantara antara pengguna (pelajar

dan pengajar) dengan aplikasi ini. Pengajar boleh memasukkan semua skema jawapan

aturcara untuk setiap soalan yang dikemukakan. Manakala pelajar akan memasukkan

jawapan aturcara masing-masing. Kesemua aturcara ini kemudiannya dihantar kepada kelas

PenganalisisLeksikal untuk proses yang seterusnya.

3.2.4 Kelas Penganalisis Leksikal

Kelas penganalisis leksikal (atau penjana token) terdiri daripada kelas PenganalisisLeksikal

yang mana dibantu oleh kelas SenaraiToken (yang dibantu oleh kelas Token) dan kelas

KataKunci. Kelas PenganalisisLeksikal adalah kelas utama yang pertama dalam proses

keseluruhan. Ia menerima input rentetan kod aturcara, dan akan menghasilkan senarai

token. Kelas ini berfungsi untuk menjana senarai token yang dikenal pasti daripada kod

aturcara seperti yang digambarkan pada Rajah 3.3.

Rajah 3.3 Kod sumber diproses menjadi senarai token melalui kelas PenganalisisLeksikal

Manakala spesifikasi token dalam format Backus-Naur untuk analisis leksikal yang

dilakukan oleh kelas ini terdapat dalam Rajah 3.4. Spesifikasi token ini diubah suai daripada

Penganalisis Leksikal

main(){ float salary,tax; scanf("%f",&salary); if(salary<=1000){ tax=salary*0.04; } else{ tax=salary*0.08; } printf("Your tax is : RM.2%f\n",tax);}

main(){floatsalary,tax...);}

28

Page 29: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

spesifikasi token bahasa C yang dicadangkan oleh Dennis Ritchie (1975) berdasarkan skop

yang telah ditetapkan oleh penulis pada Bab I, bahagian 1.4.

InputElement → Whitespace | Comment | TokenWhitespace → \b | \t | \r | \f | \rNewline | NewLine

NewLine → \nComment → LineComment | BlockComment

LineComment → // any string ended by \r or \n or \r\nBlockComment → /* any string */

Token → Variable | Keyword | Literal | Operator | SeparatorVariable → Letter(Letter | Digit | _ )*

Literal → Number | Character | StringNumber → Integer | RealInteger → -?Digit+

Real → -?Digit+(\.Digit+)?Character → ‘Letter’ | ‘Digit’ | ‘SpecialCharacter’ | ‘WhiteSpaces’

String → “gabungan satu atau lebih Character”Letter → [A,…,Z,a,…,z]Digit → [0,…,9]

SpecialCharacter → ` | ~ | ! | @ | # | $ | % | ^ | & | * | ( | )| _ | + | - | = |; |’ |: |” |, |. | / | < | > |? | [|]| \ | { | } | |

Keyword → asm | auto | break | case | const | continue | default | do | else | enum | extern | for | goto | if | register | return | signed | sizeof | static | struct | switch | typedef | union | unsigned | void | volatile | while | main | printf | scanf| DataType

DataType → double | int | float | char | long | shortOperator → ArithmetikOperator | LogicalOperator | RelationalOperator

| AssignOperator | AssignOperatorX | CompoundOperator | UnaryOperator

ArithmetikOperator → * | / | % | + | -LogicalOperator → && | ||UnaryOperator → !

RelationalOperator → == | != | <| > | >= | <=

AssignOperator → =AssignOperatorX → *= | /= | %= | += | -=

CompoundOperator → -- | ++Separator → , | ; | { | } | [ | ] | ( | ) | :

AddressOperator → &UnknownToken → Selain daripada token yang disenaraikan

Rajah 3.4: Spesifikasi token (sintak leksikal) dalam format Backus-Naur yang dicadangkan

oleh penulis

29

Page 30: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Dalam usaha untuk menjalankan tugasnya, kelas PenganalisisLeksikal dibantu oleh

beberapa kelas lain. Kelas Token merupakan nod asas dalam struktur data pengaturcaraan

ini. Struktur data yang dibina adalah seperti dalam Rajah 3.5. Token merupakan terminal

seperti yang terdapat dalam spesikasi token (Rajah 3.4), manakala kategori token pula ialah

jenis-jenis token yang didefinisikan dalam Rajah 3.4 (perkataan yang disendengkan). Setiap

satu nod asas ini menyimpan maklumat token-token yang diambil dari kod aturcara sumber.

Kelas ini akan digunakan oleh kelas SenaraiToken untuk membina senarai terpaut nod-nod

token.

Rajah 3.5 Struktur data yang digunakan dalam kelas Token

Kelas KataKunci membantu kelas PenganalisisLeksikal dalam proses membentuk

senarai token. Apa yang dibuat oleh kelas ini ialah ia menyimpan senarai kata kunci yang

telah dikenal pasti dalam nahu bahasa ini dan boleh mengenal pasti sama ada perkataan

yang dihantar kepadanya termasuk dalam kategori kata kunci atau tidak. Kelas

SenaraiToken pula merupakan kelas yang akan membina dan mengurus senarai berjujukan

nod daripada token-token yang terdapat dalam kod sumber. Kelas ini akan berfungsi untuk

mewujudkan senarai berjujukan yang baru, menyelitkan nod yang baru dicipta, dan juga

menyediakan kemudahan untuk menyelusur jujukan nod yang terhasil. Kelas ini akan

digunakan oleh kelas PenganalisisLeksikal dalam proses pembinaan senarai terpaut token.

Penyelidik juga mencadangkan penamaan semula pembolehubah untuk

menyeragamkan penamaan pembolehubah. Sekiranya token dalam kategori pembolehubah

(Variable) dikenalpasti, pembolehubah tersebut akan dirujuk kepada jadual senarai

pembolehubah. Sekiranya pembolehubah tersebut telah dijumpai sebelum ini, maka nama

baru yang telah diberi akan diguna pakai. Tetapi sekiranya pembolehubah tersebut belum

ada, ia akan didaftar dalam jadual senarai pembolehubah dan nama baru akan diberikan. Ini

dapat meminimumkan variasi dalam penamaan pembolehubah. Sila rujuk contoh dalam

Jadual 3.2.

token kategori token seterusnya

30

Page 31: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Jadual 3.1 Contoh penamaan semula pembolehubah

Sebelum penamaan semula Selepas penamaan semulafloat number1, number2, number3;

float sum, average;

sum=number1+number2+number3;

average=sum/3;

float v1, v2, v3;

float v4, v5;

v4=v1+v2+v3;

v5=v4/3;

3.2.5 Kelas Penjana Kod pseudo

Kelas ini merupakan kelas yang kedua dalam keseluruhan proses. Apa yang dilakukan oleh

kelas ini adalah menjana kod pseudo daripada senarai berjujukan token yang terhasil

daripada kelas PenganalisisLeksikal seperti yang digambarkan pada Rajah 3.5. Spesifikasi

kod pseudo yang digunakan adalah seperti yang dicadangkan oleh Robertson (2002)

terdapat dalam Jadual 3.2. Rajah 3.6 merupakan senarai peraturan-peraturan yang telah

ditetapkan oleh penulis dalam penukaran kod aturcara C kepada kod pseudo.

Kelas ini mengandungi metod-metod yang akan menukar kod aturcara sumber

kepada kod pseudo. Pernyataan-pernyataan seperti pengisytiharan pembolehubah,

umpukan, struktur kawalan pilihan dan pengulangan diproses oleh metod masing-masing.

31

Page 32: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Rajah 3.6 Kod aturcara C diterjemah kepada kod pseudo melalui kelas penjana kod pseudo

Program → [void] main ( ) { Declarations Statements }{ START Declarations Statements END }

Declarations → ε | Declarations DeclarationDeclaration → DataType Variable ;

| DataType Variables ;{DECLARE Variable AS INTEGER | CHARACTER | DECIMAL}

Variables → Variable | Variables, VariableExpression → Variable | Constant

| -Expression | !Expression| Expression Operator Expression| CompoundExpression

CompoundExpression → ++ Variable | -- Variable| Variable ++ | Variable --

Statements → Statement | Statements StatementStatement → ; | Block | Assignment | AssignmentX

| IfStatement | ElseIfStatement | ElseStatement| WhileStatement | DoWhileStatement | ForStatement | PrintfStatement | ScanfStatement | SwitchStatement | CaseStatement| DefaultStatement| break ; | continue ; | return ; | getch ( ) ;

Block → { Statements }Assignment → Variable AssignOperator Expression ;

AssignmentX → Variable AssignOperatorX Expression ;… bersambung

main(){ int i=1; float salary,tax;

do{ printf("Staff no : %d\n",i); printf("Key in the salary\n"); scanf("%f",&salary); if(salary<=1000){ tax=salary*0.04; } else{ tax=salary*0.08; }printf("Your tax is : RM.2%f\n",tax); i++; }while (i<=5);}

START declare v1 as integer v1=1 declare v2 as float declare v3 as float DO display value of v1 display "text" get user data for v2 IF v2 < 1000 calculate v3 = v2*0.04 ELSE calculate v3 = v2*0.08 ENDIF display the value of v2 display the value of v3 i=+1 WHILE i < 5END

Penjana Kodpseudo

32

Page 33: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

… sambungan

IfStatement → if ( Expression ) Block { IF Expression Block }

ElseIfStatement → else if ( Expression ) Block{ ELSEIF Expression Block }

ElseStatement → else ( Expression ) Block{ ELSE Expression Block ENDIF }

WhileStatement → while ( Expression ) Block{ WHILE ( Expression ) Block}

DoWhileStatement → do Block while ( Expression){ DO Block WHILE Expression }

ForStatement → for ( Expression ; Expression ; Expression) Block{Expression1DOBlockExpression3WHILE Expression2 }

SwitchStatement → switch (Expression ) Block ;{IF Expression Block}

CaseStatement → case Constant : Statement| case Constant : Statements{ ELSEIF Expression Block}

DefaultStatement → default : Statements| default : Statement{ ELSE Expression Block}

PrintfStatement → printf ( String ) ;| printf ( String , Variables ) ;{ DISPLAY “text” } | { DISPLAY value of Variables }

ScanfStatement → scanf ( String, Variables ){ GET Variables }

Rajah 3.7: Spesifikasi tatabahasa dalam format Backus-Naur yang dicadangkan oleh penulis

Jadual 3.2 Peraturan terjemahan kod aturcara kepada kod pseudo

Jenis pernyataan Contoh Terjemahan Pengisytiharan pembolehubah

DataType v1; DECLARE num1 as DataType

Pengisytiharan pemboleh ubah pelbagai

DataType v1, v2, v3; DECLARE v1 as DataType.DECLARE v2 as DataType.DECLARE v3 as DataType.

bersambung ...

33

Page 34: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

... sambungan

Pengisytiharan pemboleh ubah dengan nilai awal

DataType v1=3; DECLARE v1 as DataType.Set DataType with 3

PrintfStatement printf() DISPLAYScanfStatement scanf() INPUTPernyataan if if(conditions){

…}else if(conditions){…}else{…}

IF conditions…ELSEIF conditions…ELSE…

Pernyataan switch…case

switch(…){ case 1: … case 2: … case n: … default: …}

IF conditions…ELSEIF conditions…ELSE…

Pernyataan do…while do {…}while (conditions);

DO …WHILE conditions

Pernyataan while while(conditions){ …}

WHILE conditions …

Pernyataan for for(statemet1;statement2; statement3){ …}

statement1 DO … statement3WHILE statement2

Operator perbandingan

= = =!= Dikekalkan<, >, <=, >= Dikekalkan

Operator logik &&||!

ANDORNOT

Operator aritmetik +, -, *, /, % Semua operator dikekalkanPernyataan majmuk A++;

B--;C+=3;D-=3;E*=3;F/=3;G%=3;

A=A+1B=B+1C=C+3D=D-3E=E*3F=F/3G=G%3

Sumber: Robertson (2002)

34

Page 35: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

3.2.6 Kelas Pembanding Kodpseudo

Kelas ini adalah kelas yang ketiga, di mana kodpseudo daripada aturcara pelajar dan

juga kod pseudo daripada aturcara model penyelesaian dibandingkan untuk mendapatkan

peratus kesamaan. Terdapat dua proses yang diwakili oleh dua kelas. Proses pertama ialah

proses memisahkan pengisytiharan pemboleh ubah daripada kod pseudo yang lain (berlaku

dalam kelas PemisahPembolehubah). Sebelum proses perbandingan, semua pengisytiharan

pembolehubah dalam kod pseudo akan dipisahkan. Proses ini berlaku kepada kesemua kod

pseudo jawapan pelajar dan juga skema.

a. Perbandingan Pembolehubah

Kedudukan pengisytiharan pembolehubah boleh dilakukan dipelbagai baris kod aturcara,

Sekiranya tidak dihimpunkan di tempat yang lain, proses perbandigan akan dipengaruhi

oleh pernyataan-pernyataan pengisytiharan pembolehubah yang pelbagai. Dengan

mengasingkan pengisytiharan pembolehubah, proses perbandingan dapat dilakukan dengan

lebih baik.

Seterusnya kod pseudo yang telah dipisahkan pernyataan pengisytiharan

pembolehubah akan menjalani proses perbandingan. Proses seterusnya dalam kelas

PembandingkodPseudo ialah membandingkan kod pseudo pelajar dengan kod pseudo

skema. Kod pseudo pelajar akan dibandingkan dengan salah satu daripada kod pseudo

skema. Dalam proses ini, kod pseudo telah dipisahkan kepada dua bahagian. Bahagian

pertama adalah pengisytiharan pembolehubah, dan bahagian kedua adalah pernyataan lain

yang bukan pengisytiharan pembolehubah.

Perbandingan yang pertama adalah perbandingan antara senarai pembolehubah kod

pseudo pelajar dengan senarai pembolehubah kod pseudo skema. Lima peratus (5%)

diperuntukkan untuk perbandingan senarai pembolehubah. Penyelidik mencadangkan 5%

diperuntukkan kepada markah pembolehubah kerana bahagian pengisytiharan adalah

bahagian yang sedikit dalam penulisan kod aturcara. Walaubagaimanapun, aplikasi tersebut

boleh diubahsuai agar peratus yang ditentukan oleh instruktor.

Terdapat tiga kategori pembolehubah yang utama iaitu;

i) integer (daripada jenis data int dan long),

35

Page 36: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

ii) decimal (daripada jenis data float dan double) dan

iii) aksara (daripada jenis data char).

Perbandingan dilakukan dengan mengira bilangan pembolehubah mengikut tiga

kategori yang ditetapkan seperti di atas. Jumlah pembolehubah setiap kategori dibandingkan

antara yang terdapat dalam kod pseudo pelajar dengan kod pseudo skema. Setiap satu

kategori pembolehubah dibandingkan. Sekiranya jumlah pembolehubah kod pseudo pelajar

(dalam satu-satu kategori) kurang daripada jumlah pembolehubah dalam kod pseudo

skema, tiada markah diberikan. Sekiranya jumlah pembolehubah lebih besar atau sama

maka satu markah akan diberikan. Sekiranya terdapat kategori pembolehubah yang sama

jumlah sifar (0), maka kategori pembolehubah tersebut tidak akan diambilkira dalam

pengiraan. Pengiraan adalah seperti formula berikut;

Persamaan pembolehubah = Nb x 5

Nt

Di mana Nb adalah bilangan kategori yang betul, dan Nt adalah bilangan kategori yang

terlibat.

Jadual 3.3 Contoh pengiraan kesamaan pengisytiharan pembolehubah

Kategori Bilangan pembolehubah dalam kod pelajar

Bilangan pembolehubah dalam kod skema

Kategori betul

Bilangan kategori terlibat

integer 3 4 0 1decimal 2 2 1 1character

0 0 0 0

Jumlah 1 2

Berdasarkan contoh dalam Jadual 3.3, berikut adalah pengiraan kesamaan pengisytiharan

pembolehubah.

= Nb x 5

Nt

= (1/2) x 5 = 2.5

36

Page 37: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

b. Perbandingan Proses

Seterusnya adalah perbandingan antara kod pseudo pernyataan bukan pengisytiharan

pembolehubah yang terdapat dalam kod pseudo pelajar dengan kod pseudo skema.

Bahagian ini dibandingkan menggunakan salah satu fungsi perbandingan rentetan yang

terdapat dalam pustaka PHP, iaitu similar_text (php.net, 2007). Sila rujuk 3.2.6 (c) untuk

penerangan lanjut tentang fungsi similar_text.

Peratus persamaan = peratus persamaan daripada similar_text X 95/100

Setiap proses yang berlaku dalam kelas pembanding kod pseudo ini akan berlaku

berulang-kali untuk perbandingan kod pseudo pelajar dengan kod pseudo skema yang

berikutnya, sehingga kesemua kod pseudo skema dibandingkan. Ringkasan dalam bentuk

visual mengenai proses pembandingan tersebut terdapat dalam Rajah 3.5.

Rajah 3.8 Proses pembandingan kod pseudo pelajar dengan kod skema

37

Kod pseudo pelajar

%kesamaan tertinggi

Kod pseudo

skema 1

Kod pseudo

skema 2

Kod pseudo skema n

% kesamaan 1

% kesamaan 2

% kesamaan n

Perbandingan Kod Pseudo

Page 38: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

c. Fungsi similar_text

Fungsi similar_text adalah antara fungsi piawai yang terdapat dalam pustaka PHP. Ia telah

dibangunkan oleh salah seorang penyumbang untuk bahasa PHP menggunakan kaedah

perbandingan rentetan aksara demi aksara (php.net, 2007). Fungsi ini menerima dua

rentetan dan mengembalikan peratus aksara yang sama berdasarkan algoritma yang

dicadangakan oleh Oliver (1993). Kompleksiti algortima ini adalah O(N3) di mana N ialah

saiz rentetan yang terpanjang.

Terdapat juga satu fungsi lain dalam pustaka PHP yang mampu mendapatkan

persamaan antara dua rentetan, iaitu levenshtein. Fungsi ini mengira bilangan aksara yang

minimum untuk ditukar, dimasukkan atau dibuang untuk menukarkan rentetan pertam

kepada rentetan kedua (php.net, 2008), berdasarkan algoritma yang dicadangkan oleh

Levenshtein (1966). Kompleksiti algoritma fungsi ini ialah O(M*N), yang mana lebih baik

daripada fungsi similar_text. Walaubagaimanapun, fungsi ini hanya mampu memproses

rentetan yang saiznya adalah tidak kurang daripada 255 aksara (php.net, 2008). Sekiranya

salah satu rentetan bersaiz lebih daripada 255 aksara, fungsi akan mengembalikan -1.

Berdasarkan kekangan ini, maka penulis memilih untuk menggunakan similar_text. Ini

kerana besar kemungkinan kod pseudo yang dihasilkan daripada kod sumber nanti akan

bersaiz lebih besar daripada 255 aksara.

Jadual 3.4 Perbandingan kualitatif antara fungsi similar_text dengan levenshtein yang

terdapat dalam pustaka PHP

Fungsi / kriteria similar_text levenshteinKompleksiti O(N3) O(M*N)Had panjang rentetan tiada 255

3.2.7 Kelas Antara muka Output

Kelas ini menyediakan antara muka untuk memaparkan senarai peratus persamaan yang

diperoleh daripada perbandingan aturcara pelajar dengan setiap satu aturcara skema. Nilai-

nilai tersebut diperoleh daripada kelas PembandingKodPseudo. Antara muka juga akan

memaparkan nilai peratus yang tertinggi.

38

Page 39: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

3.3 ALGORITMA-ALGORITMA PENTING

Berikut adalah algoritma yang terlibat dalam pelaksanaan aplikasi ini. Penulis hanya akan

memfokus kepada tiga proses penting; penganalisa leksikal, penjanaan kod pseudo dan

perbandingan kod pseudo.

Kod pseudo dalam Rajah 3.6 adalah ringkasan proses yang berlaku dalam

perbandingan kod sumber pelajar dengan kod sumber instruktor.

Dapatkan jawapan pelajarTukar kod aturcara pelajar kepada senarai token menggunakan Penganalisis LeksikalTukar senarai token aturcara pelajar kepada kod pseudo menggunakan ... Penjana KodpseudoSelagi masih ada skema jawapan

Dapatkan salah satu skema jawapanTukar kod aturcara skema kepada kod pseudo Bandingkan kod pseudo pelajar dengan kod pseudo skema jawapan ...

Menggunakan Pembanding KodpseudoSimpan peratus persamaanProses skema jawapan berikutnya

Dapatkan peratus persamaan yang tertinggi

Rajah 3.9 Kod pseudo bagi ringkasan proses

3.3.1 Algoritma Penganalisis Leksikal

Bagi setiap perkataan yang disendengkan dalam kod pseudo Rajah 3.10-3.29, sila rujuk

kepada sintak leksikal (Rajah 3.4) untuk penjelasan lanjut.

Fungsi PENGANALISISLEKSIKALDapatkan rentetan kodSumberDapatkan panjang rentetan kodSumber, bilanganAksaraKodSumber

Set pembilang sebagai 0Selagi pembilang < bilanganAksaraKodSumber

Dapatkan satu aksara dari kodSumber, sebagai aksaraSemasaJika aksara tak nampak, atau WhiteSpace

Abaikan aksaraSemasaProses aksara seterusnya

Jika aksaraSemasa adalah Letter, mungkin Variable atau KeywordPergi ke fungsi Katakunci

bersambung ......sambungan

39

Page 40: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Jika aksaraSemasa adalah DigitPergi ke fungsi Nombor

Jika aksaraSemasa adalah “ ‘ ”Pergi ke fungsi NilaiLiteralAksara

Jika aksaraSemasa adalah “ “ ”Pergi ke fungsi NilaiLiteralRentetan

Jika aksaraSemasa adalah “/”Pergi ke fungsi ProsesOperatorBahagi

Jika aksaraSemasa adalah “*”Pergi ke fungsi ProsesOperatorDarab

Jika aksaraSemasa adalah “%”Pergi ke fungsi ProsesOperatorModulo

Jika aksaraSemasa adalah “+”Pergi ke fungsi ProsesOperatorTambah

Jika aksaraSemasa adalah “-”Pergi ke fungsi ProsesOperatorTolak

Jika aksaraSemasa adalah “=”Pergi ke fungsi ProsesOperatorSama

Jika aksaraSemasa adalah “>”Pergi ke fungsi ProsesOperatorBesar

Jika aksaraSemasa adalah “<”Pergi ke fungsi ProsesOperatorKecil

Jika aksaraSemasa adalah “&”Pergi ke fungsi ProsesOperatorDan

Jika aksaraSemasa adalah “|”Pergi ke fungsi ProsesOperatorAtau

Jika aksaraSemasa adalah “!”Pergi ke fungsi ProsesOperatorTak

Jika aksaraSemasa adalah Separator Tambah aksaraSemasa kepada senaraiToken, kategori Separator

Jika aksaraSemasa adalah DigitPergi ke fungsi Number

Jika aksaraSemasa adalah “\n”Tambah aksaraSemasa kepada senaraiToken, kategori NewLine

Selain daripada ituToken tidak dapat dikenalpastiTambah token kepada senaraiToken, kategori Unknown

Dapatkan aksara seterusnyaTamat ulangan (pembilang < bilanganAksaraKodSumber)

Tamat Fungsi PENGANALISISLEKSIKAL

Rajah 3.10 Kod pseudo bagi fungsi PENGANALISISLEKSIKAL

Fungsi KatakunciTambah aksaraSemasa kepada tokenSementara

40

Page 41: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Selagi aksara seterusnya Digit atau “_”Proses aksara seterusnyaTambah aksaraSemasa kepada tokenSementara

Jika semua aksara dalam tokenSementara adalah hurufUji tokenSementara dengan senarai KeywordJika tokenSementara adalah Keyword

Tambah tokenSementara kepada senaraiTokenSelain daripada itu, tokenSementara adalah Variable

Pergi ke fungsi PembolehubahTamat Fungsi Katakunci

Rajah 3.11 Kod pseudo bagi fungsi Katakunci

Fungsi PembolehubahHantar tokenSementara kepada fungsi PenamaanSemulaPembolehubahTambah namaPembolehubah kepada senaraiToken, kategori Variable

Tamat Fungsi Pembolehubah

Rajah 3.12 Kod pseudo bagi fungsi Pembolehubah

Fungsi PenamaanSemulaPembolehubah (pembolehubahSemasa)Jika tiada senarai dalam JadualPembolehubah

Set namaBaruPembolehubah sebagai “v1”Simpan pembolehubahSemasa dan namaBaruPembolehubah ...

dalam JadualPembolehubahKembalikan namaBaruPembolehubah

Jika ada senarai dalam JadualPembolehubahSemak pembolehubahSemasa dengan JadualPembolehubahJika pembolehubahSemasa telah wujud dalam JadualPembolehubah

Dapatkan namaBaruPembolehubah dari JadualPembolehubahKembalikan namaBaruPembolehubah

Jika pembolehubahSemasa tidak wujud dalam JadualPembolehubahKira bilangan dalam senarai JadualPembolehubah, sebagi bilSet namaBaruPembolehubah sebagai “v”bilSimpan pembolehubahSemasa dan namaBaruPembolehubah ...

dalam JadualPembolehubahKembalikan namaBaruPembolehubah

Tamat fungsi PenamaanSemulaPembolehubah

Rajah 3.13 Kod pseudo bagi fungsi PenamaanSemulaPembolehubah

Fungsi NomboraksaraSemasa adalah Digit

41

Page 42: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Set tokenSementara sebagai aksaraSemasaSelagi aksaraSemasa ialah Digit atau “.”

Tambah aksaraSemasa kepada tokenSementaraJika aksaraSemasa adalah “.”

Nombor bukan integerDapatkan aksara seterusnya

Jika nombor bukan integerTambah tokenSementara kepada senaraiToken, kategori Real

Selain daripada ituTambah tokenSementara kepada senaraiToken, kategori Integer

Tamat Fungsi Nombor

Rajah 3.14 Kod pseudo bagi fungsi Nombor

Fungsi NilaiLiteralAksaraNilai aksaraSemasa adalah “ ‘ ”Set tokenSementara sebagai aksaraSemasaDapatkan aksara seterusnyaSelagi aksaraSemasa bukan “ ‘ ”

Tambah aksaraSemasa kepada tokenSementaraDapatkan aksara seterusnya

Tambah tokenSementara kepada senaraiToken, kategori CharacterTamat Fungsi NilaiLiteralAksara

Rajah 3.15 Kod pseudo bagi fungsi NilaiLiteralAksara

Fungsi NilaiLiteralRentetanNilai aksaraSemasa adalah “ “ ”Set tokenSementara sebagai aksaraSemasaDapatkan aksara seterusnyaSelagi aksaraSemasa bukan “ “ ”

Tambah aksaraSemasa kepada tokenSementaraDapatkan aksara seterusnya

Tambah tokenSementara kepada senaraiToken, kategori StringTamat Fungsi NilaiLiteralRentetan

Rajah 3.16 Kod pseudo bagi fungsi NilaiLiteralRentetan

Fungsi ProsesOperatorBahagiJika aksara seterusnya adalah “/”

42

Page 43: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Pergi kepada fungsi KomenBarisJika aksara seterusnya adalah “*”

Pergi kepada fungsi KomenBlokJika aksara seterusnya adalah “=”

Dapatkan aksara seterusnya sebagai aksaraSemasa Tambah aksaraSemasa kepada tokenSementara Nilai tokenSementara ialah “/=” Tambah tokenSementara kepada senaraiToken, kategori BinaryOperatorSelain daripada itu

tokenSemasa adalah “/”, Tambah tokenSementara kepada senaraiToken, kategori BinaryOperator

Tamat Fungsi ProsesOperatorBahagi

Rajah 3.17 Kod pseudo bagi fungsi ProsesOperatorBahagi

Fungsi ProsesOperatorDarabSet tokenSementara sebagai “*”Jika aksara seterusnya adalah “=”

Dapatkan aksara seterusnya sebagai aksaraSemasa Tambah aksaraSemasa kepada tokenSementara Nilai tokenSementara ialah “*=” Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX

Dapatkan aksara seterusnyaSelain daripada itu

Nilai token sementara adalah “*” Tambah tokenSementara kepada senaraiToken, kategori ArithmeticOperatorTamat Fungsi ProsesOperatorDarab

Rajah 3.18 Kod pseudo bagi fungsi ProsesOperatorDarab

Fungsi ProsesOperatorModuloSet tokenSementara sebagai “%”Jika aksara seterusnya adalah “=”

Dapatkan aksara seterusnya sebagai aksaraSemasa Tambah aksaraSemasa kepada tokenSementara Nilai tokenSementara ialah “%=” Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX

Dapatkan aksara seterusnyaSelain daripada itu

Nilai token sementara adalah “%” Tambah tokenSementara kepada senaraiToken, kategori ArithmeticOperatorTamat Fungsi ProsesOperatorModulo

Rajah 3.19 Kod pseudo bagi fungsi ProsesOperatorModulo

43

Page 44: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi ProsesOperatorTambah Set tokenSementara sebagai “+”

Jika aksara seterusnya adalah “=”Dapatkan aksara seterusnya sebagai aksaraSemasaTambah aksaraSemasa kepada tokenSementaraNilai tokenSementara ialah “+=”Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX

Jika aksara seterusnya adalah “+”Dapatkan aksara seterusnya sebagai aksaraSemasaTambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “++”Tambah tokenSementara kepada senaraiToken, kategori

CompoundOperatorSelain daripada itu

Nilai token sementara adalah “+” Tambah tokenSementara kepada senaraiToken, kategori ArithmeticOperatorTamat Fungsi ProsesOperatorTambah

Rajah 3.20 Kod pseudo bagi fungsi ProsesOperatorTambah

Fungsi ProsesOperatorTolak Set tokenSementara sebagai “-”

Jika aksara seterusnya adalah “=”Dapatkan aksara seterusnya sebagai aksaraSemasaTambah aksaraSemasa kepada tokenSementaraNilai tokenSementara ialah “-=”Tambah tokenSementara kepada senaraiToken, …

kategori ArithmeticOperatorX Jika aksara seterusnya adalah “-”

Dapatkan aksara seterusnya sebagai aksaraSemasaTambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “--”Tambah tokenSementara kepada senaraiToken, …

kategori CompoundOperatorSelain daripada itu

Nilai tokenSementara adalah “-” Tambah tokenSementara kepada senaraiToken, …

kategori ArithmeticOperatorTamat Fungsi ProsesOperatorTolak

Rajah 3.21 Kod pseudo bagi fungsi ProsesOperatorTambah

Fungsi KomenBarisSelagi aksaraSemasa bukan “\n”, iaitu baris baru

Dapatkan aksara seterusnyaTiada token dijana daripada fungsi iniSemua aksara yang diproses akan diabaikan

Tamat Fungsi KomenBaris

Rajah 3.22 Kod pseudo bagi fungsi KomenBaris

44

Page 45: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi KomenBlokSelagi aksaraSemasa bukan “*” dan diikuti oleh “\”

Dapatkan aksara seterusnyaTiada token dijana daripada fungsi iniSemua aksara yang diproses akan diabaikan

Tamat Fungsi KomenBlok

Rajah 3.23 Kod pseudo bagi fungsi KomenBlok

Fungsi ProsesOperatorSama Set tokenSementara sebagai “=”

Dapatkan token seterusnyaJika aksaraSemasa adalah “=”

Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “==”Tambah tokenSementara kepada senaraiToken, …

kategori RelationalOperatorSelain daripada itu

Nilai tokenSementara adalah “=” Tambah tokenSementara kepada senaraiToken, …

kategori AssignOperatorTamat Fungsi ProsesOperatorSama

Rajah 3.24 Kod pseudo bagi fungsi ProsesOperatorSama

Fungsi ProsesOperatorBesar Set tokenSementara sebagai “>”

Dapatkan token seterusnyaJika aksaraSemasa adalah “=”

Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “>=”Tambah tokenSementara kepada senaraiToken, …

kategori RelationalOperatorSelain daripada itu

Nilai tokenSementara adalah “>” Tambah tokenSementara kepada senaraiToken, …

kategori RelationalOperatorTamat Fungsi ProsesOperatorBesar

Rajah 3.25 Kod pseudo bagi fungsi ProsesOperatorBesar

45

Page 46: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi ProsesOperatorKecil Set tokenSementara sebagai “<”

Dapatkan token seterusnyaJika aksaraSemasa adalah “=”

Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “<=”Tambah tokenSementara kepada senaraiToken, …

kategori RelationalOperatorSelain daripada itu

Nilai tokenSementara adalah “<” Tambah tokenSementara kepada senaraiToken, …

kategori RelationalOperatorTamat Fungsi ProsesOperatorKecil

Rajah 3.26 Kod pseudo bagi fungsi ProsesOperatorKecil

Fungsi ProsesOperatorTak Set tokenSementara sebagai “!”

Dapatkan token seterusnyaJika aksaraSemasa adalah “=”

Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “<=”Tambah tokenSementara kepada senaraiToken, …

kategori RelationalOperatorSelain daripada itu

Nilai tokenSementara adalah “!” Tambah tokenSementara kepada senaraiToken, …

kategori UnaryOperatorTamat Fungsi ProsesOperatorTak

Rajah 3.27 Kod pseudo bagi fungsi ProsesOperatorTak

Fungsi ProsesOperatorDan Set tokenSementara sebagai “&”

Dapatkan token seterusnyaJika aksaraSemasa adalah “&”

Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “&&”Tambah tokenSementara kepada senaraiToken, …

kategori LogicalOperatorSelain daripada itu

Nilai tokenSementara adalah “&” Tambah tokenSementara kepada senaraiToken, …

kategori AddressOperatorTamat Fungsi ProsesOperatorDan

Rajah 3.28 Kod pseudo bagi fungsi ProsesOperatorDan

46

Page 47: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi ProsesOperatorAtau Set tokenSementara sebagai “|”

Dapatkan token seterusnyaJika aksaraSemasa adalah “|”

Tambah aksaraSemasa kepada tokenSementaraNilai tokenSementara adalah “||”Tambah tokenSementara kepada senaraiToken, …

kategori LogicalOperatorSelain daripada itu

Nilai tokenSementara adalah “|” Tambah tokenSementara kepada senaraiToken, …

kategori UnknownTokenTamat Fungsi ProsesOperatorAtau

Rajah 3.29 Kod pseudo bagi fungsi ProsesOperatorAtau

3.3.2 Algoritma Penjanaan Kod Pseudo

Bagi setiap perkataan yang disendengkan dalam kod pseudo Rajah 3.30-3.46, sila rujuk

kepada spesifikasi tatabahasa (Rajah 3.7) untuk penjelasan lanjut.

Fungsi PENJANAKODPSEUDOSelagi terdapat token dalam senarai

Jika jumpa ‘main’ dalam senarai tokenBuang kepala fungsi ‘main’ beserta simbol-simbol ‘(’, ‘)’ dan ‘{’

Set “START” dalam senaraiKodPesudoSet blokSemasa sebagai “main”

Proses token seterusnya

Selain itu, jika token adalah DataType, sama ada int, char,float atau doublePergi ke fungsi DeclarationStatement

Selain itu, jika token adalah pembolehubahDapatkan token seterusnyaJika token adalah ‘=’

Pergi ke fungsi AssignmentOperationJika token adalah AssignOperatorX

Pergi ke fungsi AssignmentOperationXSelain itu, jika token adalah CompoundOperator

Pergi ke fungsi CompoundExpressionSelain itu, jika token adalah “printf”

Pergi ke fungsi PrintfStatementSelain itu, jika token adalah “scanf”

Pergi ke fungsi ScanfStatementSelain itu, jika token adalah “else”

Jika token seterusnya adalah “if”Pergi ke fungsi IfElseStatement

bersambung ...

47

Page 48: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

... sambungan

Selain ituPergi ke fungsi ElseStatement

Selain itu, jika token adalah “switch”Pergi ke fungsi SwitchStatement

Selain itu, jika token adalah “case”Pergi ke fungsi CaseStatement

Selain itu, jika token adalah “default”Pergi ke fungsi DefaultStatement

Selain itu, jika token adalah “do”Pergi ke fungsi DoWhileStatement

Selain itu, jika token adalah “while”Pergi ke fungsi WhileStatement

Selain itu, jika token adalah “for”Pergi ke fungsi ForStatement

Selain itu, jika token adalah CompoundOperatorPergi ke fungsi CompoundExpression

Selain itu, jika token adalah “}”Jika blokSemasa = “main”

Tambah “END”dalam senaraiKodPesudoKeluarkan “main” daripada timbunan blokSemasa

Jika blokSemasa = “switch”Tambah “ENDIF”dalam senaraiKodPesudoKeluarkan “switch” daripada timbunan blokSemasa

Jika blokSemasa = “if”Tambah “ENDIF”dalam senaraiKodPesudoKeluarkan “if” daripada timbunan blokSemasa

Selain daripada itu,Token tidak di ketahuiPaparkan mesej kod sumber ada ralat

Dapatkan token seterusnyaSenarai token tamat

Tamat Fungsi PENJANAKODPSEUDO

Rajah 3.30 Kod pseudo bagi fungsi PENJANAKODPSEUDO

Fungsi DeclarationStatementSet jenisDataSemasaPergi ke token seterusnyaSelagi token bukan “;”

Dapatkan nama pembolehubah pada tokenTambah “DECLARE Variable AS jenisDataSemasa” ...

... kepada senaraiKodPesudoDapatkan token seterusnyaJika token adalah “=”

Pergi ke fungsi DirectAssignmentDapatkan token seterusnya

bersambung ...

48

Page 49: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

... sambungan

Jika token adalah “;”Tamat Fungsi DeclarationStatement

Selain itucontinue

Jika token adalah “,”Dapatkan token seterusnya, abaikan token “,” continue

Tamat gelungTamat Fungsi DeclarationStatement

Rajah 3.31 Kod pseudo bagi fungsi DeclarationStatement

Fungsi AssignmentOperationDapatkan token seterusnyaJika tokenSemasa adalah nilai Literal

Jika fungsi dipanggil dari ForStatementTamat Fungsi AssignmentOperation

Tambah “Variable = Literal” kepada senaraiKodPesudoSelain itu, jika tokenSemasa adalah Variable

Set “Variable = “ ke dalam kodpseudoAssignDapatkan token seterusnyaSelagi tokenSemasa bukan “;” , atau “)” yang diikuti oleh “{”

Tambah tokenSemasa kepada kodpseudoAssignProses token seterusnya

Jika fungsi dipanggil dari ForStatementKembalikan kodpseudoAssign

Selain ituTambah kodpseudoAssign kepada senaraiKodPesudo

Tamat Fungsi AssignmentOperation

Rajah 3.32 Kod pseudo bagi fungsi AssignmentOperation

Fungsi DirectAssignmentSelagi token bukan “,” atau “;”

Tambah token kepada senaraiKodPesudoTamat Fungsi DirectAssignment

Rajah 3.33 Kod pseudo bagi fungsi DirectAssignment

49

Page 50: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi CompoundStatementJika token adalah “++”

Jika fungsi dipanggil dari ForStatement Kembalikan “Variable = Variable + 1”

Tamat Fungsi CompoundStatementSelain itu

Tambah “Variable = Variable + 1” kepada senaraiKodPesudoJika token adalah “--”

Jika fungsi dipanggil dari ForStatement Kembalikan “Variable = Variable - 1”

Tamat Fungsi CompoundStatementSelain itu

Tambah “Variable = Variable - 1” kepada senaraiKodPesudoTamat Fungsi CompoundStatement

Rajah 3.34 Kod pseudo bagi fungsi CompoundStatement

Fungsi AssignmentOperationXJika token adalah “+=”

Sediakan kodpseudoX “Variable=Variable+”Jika token adalah “-=”

Sediakan kodpseudoX “Variable=Variable-”Jika token adalah “*=”

Sediakan kodpseudoX “Variable=Variable*”Jika token adalah “/=”

Sediakan kodpseudoX “Variable=Variable/”Jika token adalah “%=”

Sediakan kodpseudoX “Variable=Variable%”Dapatkan token seterusnyaSelagi token bukan “;” , atau “)” yang diikuti oleh “{”

Sambung kodpseudoX dengan token semasaDapatkan token seterusnya

Tamat gelungJika fungsi dipanggil dari ForStatement

Kembalikan kodpseudoXJika tidak

Tambah kodpseudoX kepada senaraiKodPesudoTamat Fungsi AssignmentOperationX

Rajah 3.35 Kod pseudo bagi fungsi AssignmentOperationX

50

Page 51: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi PrintfStatementSet kodpseudoPrintf sebagai “DISPLAY ”Dapatkan token seterusnya, abaikan token “(” Dapatkan token seterusnyaJika ada Variable

Tambah “the value of ” kepada kodpseudoPrintfSelagi token bukan “)”

Tambah token semasa kepada kodpseudoPrintfJika tiada Variable

Tambah token semasa kepada kodpseudoPrintf//contoh “DISPLAY ‘text’”,

//kerana sebarang rentetan akan ditukar kepada ‘text’Tambah kodpseudoPrintf kepada senaraiKodPesudo

Tamat Fungsi PrintfStatement

Rajah 3.36 Kod pseudo bagi fungsi PrintfStatement

Fungsi ScanfStatementSet kodpseudoScanf sebagai “INPUT ”Selagi token bukan “)”

Jika token adalah Variable Tambah token semasa kepada kodpseudoScanf

Jika token adalah “,”Tambah token semasa kepada kodpseudoScanf

Dapatkan token seterusnyaTambah kodpseudoScanf kepada senaraiKodPesudo

Tamat Fungsi ScanfStatement

Rajah 3.37 Kod pseudo bagi fungsi ScanfStatement

Fungsi IfStatementTambah “if” kepada timbunan blokSemasaSet kodpseudoUngkapanIf sebagai “IF”Dapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”Selagi token bukan “)” dan diikuti “{”, untuk proses ungkapan if

Tambah token semasa kepada kodpseudoUngkapanIfDapatkan token seterusnya

Tambah kodpseudoUngkapanIf kepada senaraiKodPesudoPergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK

Tamat Fungsi IfStatement

Rajah 3.38 Kod pseudo bagi fungsi IfStatement

51

Page 52: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi IfElseStatementSet blokSemasa sebagai “elseif”Set kodpseudoUngkapanElseIf sebagai “ELSEIF”Dapatkan token seterusnyaDapatkan token seterusnya, abaikan “else”Selagi token bukan “)” dan diikuti “{”, untuk proses ungkapan else ... if

Tambah token semasa kepada kodpseudoUngkapanElseIfDapatkan token seterusnya

Tambah kodpseudoUngkapanElseIf kepada senaraiKodPesudoPergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK

Tamat Fungsi IfElseStatement

Rajah 3.39 Kod pseudo bagi fungsi IfElseStatement

Fungsi ElseStatementTambah “else” kepada timbunan blokSemasaTambah “ELSE” kepada senaraiKodPesudoDapatkan token seterusnyaDapatkan token seterusnya, abaikan “{”Pergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK

Tamat Fungsi ElseStatement

Rajah 3.40 Kod pseudo bagi fungsi ElseStatement

Fungsi SwitchStatementTambah “switch” kepada timbunan blokSemasaSet ungkapanSwitch kepada “”Dapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”

Selagi token bukan “)” dan dikuti “{”Tambah token kepada ungkapanSwitch Dapatkan token seterusnya

Dapatkan token seterusnyaTamat Fungsi SwitchStatement

Rajah 3.41 Kod pseudo bagi fungsi SwitchStatement

Fungsi CaseStatementTambah “case” kepada timbunan blokSemasaDapatkan nilai ungkapanSwitchSelagi benar

Dapatkan nilai Literal selepas “case :”Set kodpseudoSyarat ungkapanSwitch = LiteralDapatkan token seterusnya Dapatkan token seterusnya, abaikan “:”

bersambung ...

52

Page 53: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

... sambunganJika token semasa adalah “case”

Tambah “OR” kepada kodpseudoSyaratSelain daripada itu

Henti ulangan, untuk proses “case” seterusnya

Jika “case” adalah yang pertama dalam ungkapan “switch”Tambah “IF kodpseudoSyarat” kepada senaraiKodPseudo

Jika bukan “case” yang pertamaTambah “ELSEIF kodpseudoSyarat” kepada senaraiKodPseudo

Pergi ke fungsi PENJANAKODPSEUDOTamat Fungsi CaseStatement

Rajah 3.42 Kod pseudo bagi fungsi CaseStatement

Fungsi DefaultStatementTambah “ELSE” senaraiKodPseudoDapatkan token seterusnya, abaikan “:”Pergi ke fungsi PENJANAKODPSEUDO

Tamat Fungsi DefaultStatement

Rajah 3.43 Kod pseudo bagi fungsi DefaultStatement

Fungsi DoWhileStatementTambah “do” kepada timbunan blokSemasaTambahkan “DO ” kepada senaraikodPseudoDapatkan token seterusnya, abaikan “{”Pergi ke fungsi PENJANAKODPSEUDO, untuk memproses BlockSelepas kembali dari fungsi PENJANAKODPSEUDO, ...

dapatkan token seterusnyaSet ungkapanWhile kepada “WHILE”Dapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”Selagi token bukan “)” dan diikuti oleh “;”

Tambah nilai token kepada ungkapanWhileDapatkan token seterusnya

Tambahkan ungkapanWhile kepada senaraikodPseudoTamat Fungsi DoWhileStatement

Rajah 3.44 Kod pseudo bagi fungsi DoWhileStatement

53

Page 54: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi WhileStatementTambah “while” kepada timbunan blokSemasaTambah “WHILE ” kepada senaraiKodPseudoDapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”Set ungkapanWhile sebagai “”Selagi token bukan “)” diikuti oleh “{”

Tambah nilai token kepada ungkapanWhileDapatkan token seterusnya

Tambah ungkapanWhile kepada senaraiKodPseudoPergi ke fungsi PENJANAKODPSEUDO

Tamat Fungsi WhileStatement

Rajah 3.45 Kod pseudo bagi fungsi WhileStatement

Fungsi ForStatement dalam Rajah 3.43 menukarkan arahan for kepada bentuk

do...while. for mempunyai format berikut;

for (nilaiMula; syarat; langkah){

Statements;

}

Arahan for di atas akan ditukar kepada bentuk do...while, seperti berikut

nilaiMula

do {

Statements;

langkah

}while (syarat);

Fungsi ForStatementDapatkan token seterusnyaDapatkan token seterusnya, abaikan “(”

//Proses seterusnya adalah untuk mendapatkan nilaiMulaJika token adalah DataType

Pergi ke fungsi DeclarationStatementJika token adalah Variable

Pergi ke fungsi AssignmentOperationnilaiMula diperolehiProses token seterusnya, untuk abaikan “;”//Proses seterusnya adalah untuk mendapatkan syaratSelagi token bukan “;”

Tambah nilai token kepada syaratForDapatkan token seterusnya

bersambung ...

54

Page 55: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

... sambungan

Jika nilaiMula bukan NULLTambah nilaiMula kepada senaraiKodPseudo

Tambah “WHILE” kepada senaraiKodPseudo//Proses seterusnya adalah untuk mendapatkan langkahForDapatkan token seterusnya, abaikan “;”Set langkah for kepada “”Selagi token bukan “)”

Jika token ialah Variable dan diikuti oleh “=”Pergi ke fungsi AssignmentOperation

Jika token ialah Variable dan diikuti oleh AssignOperatorXPergi ke fungsi CompoundStatement

Jika token ialah AssignOperatorX dan diikuti oleh VariablePergi ke fungsi CompoundStatement

Dapatkan token seterusnyaSimpan langkahFor dalam timbunanLangkahForDapatkan token seterusnya, untuk abaikan “)”Dapatkan token seterusnya, untuk abaikan “{”Tambah “for” kepada timbunan blokSemasaPergi ke fungsi PENJANAKODPSEUDO

Tamat Fungsi ForStatementRajah 3.46 Kod pseudo bagi fungsi ForStatement

3.3.3 Algoritma Perbandingan Kod Pesudo

Fungsi ini menerima dua kod pseudo iaitu satu kod pseudo jawapan instruktor dan satu lagi

kod pseudo skema pengajar. Dalam algoritma ini, input adalah dalam bentuk satu rentetan

panjang. Rajah 3.47 hingga 3.51 merupakan kod pseudo yang menerangkan proses-proses

yang berlaku dalam kelas Perbandingan Kod Pseudo.

Fungsi PEMBANDINGKODPSEUDO (kodPseudoPelajar, kodPseudoInstruktor)Tukar setiap baris dalam kodPseudoPelajar kepada bentuk tatasusunan ...

dengan menghantar kepada fungsi TukarKepadaTatasusunanTukar setiap baris dalam kodPseudoInstruktor kepada bentuk tatasusunan ...

dengan menghantar kepada fungsi TukarKepadaTatasusunanDapatkan isytiharanPembolehubahPelajar dan prosesPelajar dengan ...

hantar kodPseudoPelajar ke fungsi PemisahIsytiharPembolehubahDapatkan isytiharanPembolehubahInstruktor dan prosesInstruktor dengan ...

hantar kodPseudoInstruktor ke fungsi PemisahIsytiharPembolehubahDapatkan markahPembolehubah dengan panggil ...

fungsi BandingPembolehubah Dapatkan markahProses dengan panggil fungsi BandingProses

markahPersamaan = markahPembolehubah + markahProsesTamat Fungsi PEMBANDINGKODPSEUDO

Rajah 3.47 Kod pseudo bagi fungsi PEMBANDINGKODPSEUDO

55

Page 56: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Fungsi TukarKepadaTatasusunan (kodPseudo)kodPseudoTatasusunan adalah NULLDapatkan panjangKodPseudo dengan mengira bilangan rentetan kodPseudoSet pembilang kepada 0Set satuBarisKodpseudo kepada NULLSelagi pembilang <= panjangKodPseudo

Dapatkan aksara seterusnya daripada kodPseudoJika aksaraSemasa bukan “\n”

Tambahkan aksaraSemasa kepada satuBarisKodpseudoSelain itu, jika aksaraSemasa adalah “\n”

Tambahkan aksaraSemasa kepada satuBarisKodpseudoTambahkan satuBarisKodpseudo kepada ...

kodPseudoTatasusunanSet satuBarisKodpseudo kepada NULL

Kembalikan kodPseudoTatasusunanTamat Fungsi TukarKepadaTatasusunan

Rajah 3.48 Kod pseudo bagi fungsi TukarKepadaTatasusunan

Fungsi PemisahIsytiharPembolehubah (kodPseudo)Set senaraiPembolehubah sebagai NULLSet barisProses sebagai NULLUntuk setiap baris dalam kodPseudo

Semak barisSemasaJika terdapat rentetan “DECLARE” dalam barisSemasa

Semak jenis data pembolehubahJika jenis data adalah “integer” atau “long”

Tambah “integer” kepada senaraiPembolehubahJika jenis data adalah “float” atau “double”

Tambah “real” kepada senaraiPembolehubahJika jenis data adalah “char”

Tambah “character” kepada senaraiPembolehubahSelain daripada itu

Tambah barisSemasa kepada barisProsesKembalikan senaraiPembolehubah dan barisProses

Tamat Fungsi PemisahIsytiharPembolehubah

Rajah 3.49 Kod pseudo bagi fungsi PemisahIsytiharPembolehubah

Fungsi BandingPembolehubah (senaraiPembolehubahPelajar, senaraiPembolehubahInstruktor)

Kira bilanganInteger dari senaraiPembolehubahPelajarKira bilanganReal dari senaraiPembolehubahPelajarKira bilanganChar dari senaraiPembolehubahPelajar

Kira bilanganInteger dari senaraiPembolehubahInstruktorKira bilanganReal dari senaraiPembolehubahInstruktor

bersambung ...

56

Page 57: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

... sambungan

Kira bilanganChar dari senaraiPembolehubahInstruktor

Jika bilanganInteger pelajar >= bilanganInteger instruktormarkahInteger =1

Selain itumarkahInteger =0

Jika bilanganReal pelajar >= bilanganReal instruktormarkahReal =1

Selain itumarkahReal =0

Jika bilanganChar pelajar >= bilanganChar instruktormarkahChar =1

Selain itumarkahChar =0

markahPembolehubah = (markahInteger + markahReal + markahChar)/3*5Tamat Fungsi BandingPembolehubah

Rajah 3.50 Kod pseudo bagi fungsi BandingPembolehubah

Fungsi BandingProses (barisProsesPelajar, barisProsesInstruktor)persamaanRentetan = similar_text (barisProsesPelajar, barisProsesInstruktor )markahProses = persamaanRentetan/95*100Kembalikan markahProses

Tamat Fungsi BandingProses

Rajah 3.51 Kod pseudo bagi fungsi BandingProses

Penerangan tentang fungsi similar_text boleh diperolehi dari bahagian 3.2.6 (c).

3.4 RUMUSAN

Objektif utama bab ini adalah untuk menerangkan tentang reka bentuk aplikasi yang

menyeluruh supaya memudahkan penyelidik untuk melakukan proses seterusnya; iaitu

implementasi dan pengujian aplikasi. Pendekatan pengaturcaraan berasaskan objek dipilih

supaya penyenggaraan kod dapat dibuat dengan lebih mudah pada masa hadapan. Rajah

perhubungan kelas dengan menggunakan UML dapat menerangkan kaitan antara satu kelas

dengan kelas yang lain dengan lebih jelas. Reka bentuk yang baik akan menghasilkan

aplikasi yang lebih mudah untuk dibangun dan disenggarakan.

57

Page 58: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

BAB VI

IMPLEMENTASI DAN PENGUJIAN

1.6 PENDAHULUAN

Bab VI menerangkan tentang hasil implementasi daripada reka bentuk yang dibincangkan

dalam bab sebelum ini. Juga menerangkan kaedah pengujian yang telah dibuat, serta

keputusan yang diperolehi.

1.7 KEPERLUAN IMPLEMENTASI

Memandangkan aplikasi ini dibangunkan dalam persekitaran web, jadi terdapat dua

keperluan yang perlu dipenuhi oleh dua belah pihak; iaitu pihak pengguna (klien) dan pihak

pelayan (server).

a) Keperluan Pelayan

a) Komputer dengan keperluan minimum ingatan primer sebanyak 256MB sekurang-

kurangnya.

b) Ruang ingatan sekunder sekurang-kurangnya 5MB untuk menyimpan fail-fail

aplikasi dan fail-fail aturcara.

c) Hubungan kepada Internet ataupun Intranet (rangkaian setempat). Supaya pengguna

daripada komputer/terminal yang lain dapat mengakses aplikasi.

d) Sebarang sistem pengoperasi (Windows/Unix/Linux/MacOS).

e) Sebarang pelayan web yang boleh berinteraksi dengan penterjemah PHP boleh

digunakan. Contohnya IIS atau Apache.

f) Penterjemah PHP (versi 5 ke atas).

58

Page 59: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

b) Keperluan Pengguna (Klien)

a) Komputer peribadi dengan keperluan minimum ingatan primer sebanyak 256MB

sekurang-kurangnya.

b) Mempunyai hubungan dengan komputer pelayan (secara Internet atau Intranet).

c) Sebarang peluncur web (web browser) seperti Microsoft Internet Explorer atau

Mozilla Firefox, atau Opera yang mampu menyokong aplikasi klien (JavaScript).

1.8 ANTARA MUKA APLIKASI

Aplikasi ini difokuskan kepada pembangunan algoritma dan enjin untuk membuat

perbandingan antara kod pseudo. Tiada sistem pangkalan data yang menguruskan

keseluruhan sistem termasuk interaksi pengguna mahupun penyimpanan maklumat

pengguna dan soalan-soalan latihan serta jawapan. Fail-fail aturcara dimuat-naik secara

manual untuk tujuan pengujian.

Berikut adalah antara muka untuk memuat naik fail-fail jawapan pelajar dan juga

model-model penyelesaian.

a) Antaramuka Input.

Antara muka dalam Rajah 4.1 merupakan antara muka yang akan digunakan oleh pengajar

untuk memilih fail-fail aturcara jawapan pelajar dan juga aturcara skema. Satu fail jawapan

aturcara pelajar dipilih dan tiga (maksimum) aturcara skema dipilih. Di sebelah kanan

antara muka tersebut terdapat kemudahan untuk memaparkan kandungan yang terdapat

dalam setiap fail aturcara yang dipilih. Selepas memilih semua fail-fail yang terlibat,

pengendali perlu mengklik butang ‘Compare’.

59

Page 60: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Rajah 4.1 Antara muka untuk memuat naik fail-fail aturcara

b) Antaramuka Output.

Rajah 4.2 adalah contoh output keputusan yang dipaparkan kepada pengajar. Halaman ini

memaparkan kod pseudo yang telah diterjemahkan oleh aplikasi daripada kod aturcara.

Sebelah kiri adalah senarai keputusan peratus kesamaan untuk semua perbandingan yang

telah dibuat. Markah akhir yang akan diambil kira adalah markah yang tertinggi.

60

Page 61: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Rajah 4.2 Antara muka untuk memaparkan keputusan perbandingan

1.9 PENGUJIAN

a) Objektif Pengujian

Berikut merupakan objektif-objektif pengujian yang ingin dicapai;

a) Menentukan aplikasi dapat mengendalikan aturcara-aturcara C pelajar yang

mengandungi pernyataan-pernyataan seperti yang ditetapkan dalam bahagian 3.2

dalam Bab III.

b) Menentukan aplikasi yang dibangunkan dapat menterjemahkan kod aturcara C

pelajar dan juga aturcara skema dapat diterjemahkan kepada kod pseudo seperti

spesifikasi yang ditetapkan dalam Jadual 3.1, Bab III.

c) Menentukan aplikasi dapat membandingkan kod pseudo pelajar dengan semua kod

pseudo model penyelesaian.

61

Page 62: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

d) Menentukan aplikasi dapat menghasilkan analisa markah untuk semua perbandingan

dan menentukan pemberat yang tertinggi yang diperolehi, melalui algoritma yang

dicadangkan dalam Rajah 3.10, Bab III.

e) Membandingkan markah yang ditentukan oleh aplikasi dengan markah yang diberi

oleh pengajar sebagai penyemak (kaedah manual).

b) Kaedah Pengujian

Untuk mencapai objektif-objektif yang telah disenaraikan, penyelidik telah;

a) Menyediakan soalan-soalan latihan yang merangkumi semua jenis pernyataan yang

terkandung dalam skop aplikasi (bahagian 3.2, Bab III). Soalan-soalan tersebut

(berserta jawapan-jawapan pelajar) boleh dirujuk pada Lampiran A.

b) Meminta beberapa orang pelajar semester 3, Diploma Teknologi Maklumat, Kolej

Universiti Islam Antarabangsa Selangor yang sedang mengikuti subjek

Pengaturcaraan C untuk membuat latihan tersebut. Pelajar diberi tempoh selama satu

minggu untuk menyiapkan latihan tersebut dan mereka telah menghantar jawapan

latihan dalam bentuk salinan digital.

c) Kod aturcara pelajar perlu dipastikan supaya tidak mengandungi ralat sintaks.

d) Beberapa orang pensyarah telah diminta untuk menyediakan model penyelesaian

untuk setiap soalan. Di sini penyelidik hanya menghadkan tiga model penyelesaian

untuk setiap soalan.

e) Salah seorang (hanya seorang) tenaga pengajar diminta untuk menyemak dan

memberi markah kepada semua latihan yang dibuat oleh semua pelajar tersebut

secara manual. Penyelidik memilih hanya seorang penyemak untuk memastikan

keseragaman pemarkahan kepada setiap jawapan pelajar.

f) Penyelidik menguji aplikasi dengan memilih tiga jawapan pelajar yang

dikategorikan sebagai cemerlang, baik dan sederhana. Ini bertujuan untuk menguji

aplikasi dengan jawapan pelajar yang hampir sama dengan skema jawapan dan juga

jawapan pelajar yang sangat berbeza dengan skema jawapan.

g) Jawapan dikategorikan cemerlang adalah jawapan yang mendapat markah 9-10,

jawapan yang baik pula mendapat markah 7-9. Manakala jawapan sederhana

mendapat markah 7-4.

h) Tiga kategori jawapan ini dipilih untuk menguji aplikasi dalam membandingkan

skema dengan jawapan pelajar yg hampir sempurna, baik dan jawapan yang

sederhana.

62

Page 63: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

i) Ujian dilakukan ke atas aplikasi dan markah yang ditentukan oleh aplikasi dengan

markah yang ditentukan secara manual oleh pengajar dibandingkan. Perbandingan

dilakukan menggunakan kaedah seperti yang dicadangkan oleh Norshuhani et. al.

(2006).

c) Soalan-soalan Dalam Pengujian

Berikut adalah soalan-soalan yang telah dikemukakan kepada pelajar yang terbabit.

Terdapat enam soalan kesemuanya.

a) Soalan 1 : Pemboleh ubah dan Operasi aritmetik.

Bina satu aturcara C yang lengkap dan tanpa ralat untuk pengguna mengira purata

tiga nombor. Isytihar tiga pemboleh ubah untuk menerima ketiga-tiga nombor dan

satu lagi untuk menyimpan nilai purata. Program perlu mengarahkan pengguna

untuk memasukkan tiga input nombor tersebut, program akan mengira purata dan

memaparkan nilai purata yang diperolehi. Gunakan formula berikut;

Purata=(nombor_pertama + nombor_kedua + nombor_ketiga)/3.

Justifikasi : Soalan ini dikemukakan untuk menguji keupayaan aplikasi untuk

menyemak jawapan pelajar yang mengandungi elemen-elemen pengisytiharan

pembolehubah dan operasi-operasi arithmetik.

b) Soalan 2 : Penggunaan if... else if…else.

Anda diberikan jadual berikut untuk mencari gred bagi markah yang diperolehi

pelajar dalam subjek pengaturcaraan C. Isytihar dua pemboleh ubah, yang pertama

untuk memegang markah pengguna, dan satu lagi pemboleh ubah untuk menyimpan

gred. Program akan meminta pengguna memasukkan nilai markah (dalam julat 0 -

100). Berdasarkan jadual di bawah, program akan menentukan gred yang diperolehi.

Jika markah berada di luar julat 1-100, paparkan mesej “Markah tidak sah”.

Paparkan gred yang diperolehi pada akhir aturcara.

63

Page 64: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Jadual 4.1 Panduan gred untuk markah yang diperolehi bagi soalan 2

Markah Gred80-100 A60-79 B50-59 C40-49 D0-39 F

Justifikasi : Soalan ini dikemukakan untuk menguji keupayaan aplikasi untuk

menyemak jawapan pelajar yang mengandungi salah satu elemen pilihan iaitu if…

else if…else.

c) Soalan 3 : Penggunaan switch…case.

Tulis program untuk menerima input daripada pengguna nombor kepada bulan

pilihan (julat antara 1 hingga 12). Dengan menggunakan pernyataan switch…case,

paparkan nama bulan yang bertepatan dengan nombor yang dimasukkan,

berdasarkan Jadual 4.2. Contohnya: sekiranya pengguna memasukkan nombor 3,

maka perkataan “Mac” akan dipaparkan oleh aturcara.

Justifikasi : Soalan ini dikemukakan untuk menguji keupayaan aplikasi untuk

menyemak jawapan pelajar yang mengandungi salah satu lagi elemen pilihan iaitu

swicth … case.

Jadual 4.2 Panduan nombor dan nama bulan bagi soalan 3

Nombor Bulan1 Januari2 Februari3 Mac4 April5 May6 Jun7 Julai8 Ogos9 September10 Oktober11 November12 Disember

64

Page 65: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

d) Soalan 4 : Penggunaan do…while.

Tulis aturcara C untuk memaparkan nombor dari 100 hingga 1 menggunakan gelung

do…while.

Justifikasi : Soalan ini dikemukakan untuk menguji keupayaan aplikasi untuk

menyemak jawapan pelajar yang mengandungi salah satu elemen pengulangan iaitu

do…while.

e) Soalan 5 : Penggunaan for.

Tulis aturcara C untuk memaparkan nombor dari 1 hingga 100 menggunakan gelung

for.

Justifikasi : Soalan ini dikemukakan untuk menguji keupayaan aplikasi untuk

menyemak jawapan pelajar yang mengandungi satu lagi elemen pengulangan iaitu

for.

f) Soalan 6 : Penggunaan pernyataan pengulangan dan pilihan dalam satu aturcara.

Anda diberi tugas untuk membangunkan aplikasi mudah untuk mengira cukai yang

akan dibayar oleh lima orang pekerja di syarikat anda bekerja. Program akan

menerima maklumat gaji dari 5 orang pekerja. Program anda akan mengira cukai

berdasarkan syarat-syarat berikut. Sekiranya gaji pekerja adalah kurang atau sama

dengan RM1000.00 (<=10000) maka kadar cukai ialah 4% (cukai=gaji*4/100).

Manakala sekiranya gaji pekerja adalah lebih besar dariapda RM1000 (>1000),

cukai yang dikenakan ialah 8% (cukai=gaji*8/100). Program perlu memaparkan

cukai yang dikenakan. Ulang proses tersebut (menerima input gaji, mengira kadar

cukai dan memaparkan cukai yang dikenakan) untuk lima orang pekerja.

Justifikasi : Soalan ini dikemukakan untuk menguji keupayaan aplikasi untuk

menyemak jawapan pelajar yang mengandungi elemen pengulangan dan juga

pilihan dalam satu aturcara. Pelajar tidak dihadkan untuk menggunakan pernyataan

tertentu sahaja untuk menyelesaikan masalah. Ia terbuka kepada sebarang

penggunaan pernyataan pengulangan dan pilihan.

65

Page 66: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

d) Keputusan Pengujian.

Rujuk Jadual 4.3 hingga 4.5, persamaan markah yang ditentukan oleh aplikasi dengan

markah yang diberi oleh pengajar dikira dibandingkan dan diberi peratus persamaan.

Kaedah pengiraan adalah seperti berikut;

Peratus persamaan = (Mi/Ma) * 100.

Dimana Mi adalah markah yang diberi instruktor/pengajar dan Ma adalah markah yang

dikira oleh aplikasi.

Jadual 4.3 Markah pelajar 1

Kod aturcara

Aplikasi(10 markah)

Pengajar(10 markah)

Persamaan(%)

Soalan 1 9.8 10 98Soalan 2 9.9 10 99Soalan 3 10 10 100Soalan 4 9.7 10 97Soalan 5 10 10 100Soalan 6 9 10 90

Purata 97.3

Jadual 4.3 merujuk kepada markah yang diperolehi untuk jawapan pelajar yang

dikategorikan sebagai sempurna (penyemak memberi markah secara manual 100%). Secara

purata persamaan markah yang dihasilkan oleh aplikasi dan pengajar adalah 97.3 peratus.

Pengujian untuk pelajar pertama ini menghasilkan keputusan yang sangat baik.

Jadual 4.4 Markah pelajar 2

Kod aturcara

Aplikasi(10 markah)

Pengajar(10 markah)

Persamaan (%)

Soalan 1 8.5 9 94Soalan 2 10 10 100Soalan 3 8.9 9 99Soalan 4 8.7 10 97Soalan 5 8.0 9 89Soalan 6 9.0 10 90

Purata 95

66

Page 67: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Jadual 4.4 merujuk kepada markah untuk jawapan latihan daripada pelajar yang

dikategorikan sebagai baik (markah purata lebih 9 markah), cuma terdapat kesilapan minor

pada beberapa jawapan. Secara purata persamaan markah yang dihasilkan oleh aplikasi dan

pengajar adalah 95 peratus. Pengujian untuk pelajar kedua menghasilkan keputusan yang

baik.

Jadual 4.5 Markah pelajar 3

Kod aturcara

Aplikasi(10 markah)

Pengajar(10 markah)

Persamaan (%)

Soalan 1 7.5 8 94Soalan 2 5.2 6 87Soalan 3 3.4 5 68Soalan 4 2.2 5 44Soalan 5 2.3 5 46Soalan 6 2 4 50

Purata 65

Jadual 4.5 merujuk kepada markah jawapan latihan daripada pelajar yang

dikategorikan sebagai lemah (markah purata kurang daripada 5). Secara purata persamaan

markah yang dihasilkan oleh aplikasi dan pengajar adalah 65 peratus. Terdapat perbezaan

markah yang agak jauh pada soalan 3, 4, 5 dan 6. Pengujian untuk pelajar yang ketiga

menghasilkan keputusan kurang yang baik.

e) Rumusan Pengujian.

Daripada keputusan dalam Jadual 4.3, didapati aplikasi dapat berfungsi dengan baik bagi

jawapan aturcara pelajar yang betul atau pun dengan kesalahan minor (Jadual 4.4).

Memandangkan konsep asal yang diguna-pakai oleh aplikasi ialah perbandingan

persamaan, maka ia mampu memberi markah yang hampir sama dengan pengajar.

Walau bagaimana pun untuk jawapan pelajar yang bermasalah (mendapat markah

daripada pengajar yang sedikit) penilaian yang dilakukan oleh aplikasi kurang tepat, iaitu

hanya mendapat purata kesamaan 65%. Ini terjadi kerana pengajar memberi markah

berdasarkan kepada beberapa pernyataan yang boleh diambil kira berbanding dengan skema

yang diberi. Manakala aplikasi hanya mencari peratus kesamaan antara jawapan pelajar

dengan model-model penyelesaian. Masalah ini mungkin dapat diatasi sekiranya aplikasi

mampu untuk menilai aturcara pelajar dengan membandingkan jawapan pelajar dengan

67

Page 68: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

model-model penyelesaian secara token demi token, berbanding apa yang dilakukan pada

masa ini, perbandingan aksara demi aksara.

Boleh disimpulkan bahawa aplikasi tidak mampu berfungsi dengan baik sekirannya

terdapat kesalahan yang major pada jawapan pelajar. Contoh kesalahan major adalah seperti

dalam Rajah 4.3. Contoh dalam Rajah 4.3 adalah jawapan yang diambil untuk soalan 4,

iaitu soalan yang berkaitan dengan penggunaan gelung do...while. Jika diperhatikan

jawapan pelajar pada sebelah kanan, pelajar tidak menggunakan struktur gelung do...while

yang sepaptutnya, tetapi hanya mengulangi arahan printf yang memang akan menghasilkan

output yang sama. Walaubagaimanapun, jawapan pelajar adalah tidak bertepatan sama

sekali dengan arahan dalam soalan 4.

Rajah 4.3 Jawapan pelajar di sebelah kanan mengandungi kesalahan major

1.10 KESIMPULAN

Aplikasi ini telah dibangunkan dan telah diuji dengan contoh-contoh aturcara yang dibina

oleh para pelajar, berdasarkan soalan-soalan yang disediakan. Terdapat beberapa kelemahan

dalam perbandingan kod pseudo, terutama perbandingan dengan jawapan pelajar yang

//jawapan pelajar

#include <stdio.h>#include <conio.h>int main(){

printf ("10\n");printf ("9\n");printf ("8\n");printf ("7\n");printf ("6\n");printf ("5\n");printf ("4\n");printf ("3\n");printf ("2\n");printf ("1\n");

getch (); return 0;}

//skema jawapan

#include <stdio.h>#include <conio.h>

main(){ int i=10; do{ printf("%d\n",i); i--; }while(i>=1); getch();}

68

Page 69: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

terdapat kesalahan major. Tetapi secara keseluruhan, aplikasi ini dapat berfungsi

berdasarkan skop yang telah ditentukan. Ia mampu menerima input aturcara pelajar dan

model-model penyelesaian pengajar seterusnya dapat melakukan perbandingan kod pseudo

sehingga terhasilnya markah yang diperolehi untuk setiap latihan pelajar.

69

Page 70: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

BAB V

KESIMPULAN

1.11 PENDAHULUAN

Sistem yang dibangunkan ini adalah satu eksperimen untuk mengenal pasti keupayaan

perbandingan kod pseudo dalam menyemak latihan aturcara pelajar subjek bahasa

pengaturcaraan C. Bab ini membincangkan tentang dapatan dan sumbangan kajian kepada

bidang penyemakan automatik aturcara. Di samping itu ia juga membincangkan tentang

kelemahan aplikasi yang dicadangkan, dan juga perkara-perkara yang boleh diperluaskan

pada masa akan datang.

1.12 HASIL KAJIAN

Berikut adalah hasil daripada kajian;

a) Menghasilkan satu kaedah untuk menterjemah kod aturcara C kepada kod pseudo.

b) Menghasilkan kaedah untuk membuat penyemakan latihan aturcara C pelajar secara

automatik menggunakan kaedah perbandingan kod pseudo.

c) Menghasilkan aplikasi untuk menerima aturcara C pelajar dan beberapa model

penyelesaian untuk dibuat perbandingan. Aplikasi tersebut dapat menentukan

peratus kesamaan aturcara pelajar dengan model penyelesaian dan memaparkan

markah yang diperoleh.

1.13 SUMBANGAN KAJIAN

a) Kod aturcara C pelajar dapat disemak secara automatik menggunakan aplikasi yang

dibina.

70

Page 71: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

b) Menambahkan satu lagi kaedah iaitu perbandingan kod pseudo dalam penyemakan

automatik aturcara yang menggunakan pendekatan analisis statik.

c) Satu kertas kerja berkenaan kajian ini telah dibentangkan dalam satu seminar

(Khirulnizam et. al., 2007). Perkongsian ini diharap dapat membantu penyelidik lain

yang mengkaji bidang yang sama seperti ini.

1.14 PERLUASAN KAJIAN PADA MASA HADAPAN

Penyelidik mengenal pasti beberapa kelemahan dalam aplikasi yang dibangunkan, serta

penambahbaikan yang boleh dilakukan pada masa hadapan. Antaranya ialah:

a) Perbandingan yang dibuat adalah berdasarkan kaedah perbandingan aksara. Adalah

lebih baik sekiranya perbandingan dapat dilakukan menggunakan kaedah

perbandingan token demi token. Kaedah perbandingan berasaskan perbandingan

token perlu dibangunkan untuk mengatasi kelemahan ini.

b) Aplikasi ini hanya merupakan salah satu komponen utama dalam penghasilan sistem

penyemakan aturcara automatik. Untuk memudahkan implementasi dengan interaksi

daripada pengguna, satu sistem pengurusan pangkalan data yang lengkap perlu

dibina.

c) Setakat ini, aplikasi hanya mampu menyemak aturcara asas C. Kajian seterusnya

perlu menambah baik aplikasi supaya mampu menyemak aturcara C yang lebih

rumit yang melibatkan tatasusunan, fungsi, sistem fail dan struktur data.

d) Memandangkan banyak subjek bahasa pengaturcaraan yang lain, sistem perlu

mengambil kira sokongan terhadap bahasa-bahasa tersebut supaya lebih diterima

ramai.

1.15 RUMUSAN

Melalui pemerhatian penulis walaupun terjemahan kod aturcara kepada kod pseudo dapat

memudahkan penambahbaikan aplikasi ini untuk menyokong bahasa aturcara lain, namun

terdapat juga kelemahan lain. Antaranya ialah, aturcara yang ingin disemak tidak boleh

mempunyai ralat sintaksis mahupun semantik. Ini kerana semasa proses penukaran kod

aturcara kepada kod pseudo, ia mesti dilakukan dengan menggunakan nahu bahasa

pengaturcaraan C yang betul. Sekiranya berlaku ralat sintaksis atau semantik, proses itu

71

Page 72: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

akan mengalami gangguan dan tidak akan berfungsi dengan baik. Ia juga boleh

menyebabkan proses tergendala. Untuk mengelakkan keadaan ini (pada masa akan datang),

penyelidik mencadangkan bahawa proses pemetaan teks yang digunakan oleh Norshuhani

et. al., (2006) merupakan proses yang lebih baik untuk perbandingan aturcara melalui

kesamaan bukan-struktur.

Walaupun begitu, kaedah yang dicadangkan oleh penyelidik, iaitu menukarkan kod

aturcara kepada kod-pseudo adalah lebih baik untuk mengurangkan model penyelesaian

yang perlu disediakan. Ini kerana pernyataan yang fungsinya lebih kurang sama (seperti

while…do dengan for, switch…case dengan if…elseif…else) dapat diseragamkan dengan

menterjemahkan kepada kod-pseudo.

Kajian ini mencadangkan satu lagi kaedah dalam pendekatan analisis statik dalam

penyemakan automatik tugasan pengaturcaraan. Ia telah berjaya membuktikan bahawa kod

aturcara boleh diterjemahkan kepada kod pseudo dan perbandingan antara kod pseudo

pelajar dengan kod pseudo model penyelesaian boleh dilakukan.

72

Page 73: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

RUJUKAN

Ala-Mutka, K., Uimonen T., Järvinen H. M. 2004. Supporting Students in C++ Programming Courses with Automatic Program Style Assessment. Journal of Information Technology Education 3. http://jite.org/documents/Vol3/v3p245-262-135.pdf [24 Jun 2007]

Ala-Mutka, Kirsti M. 2005. A Survey of Automated Assessment Approaches for Programming Assignments. Computer Science Education 15 (June 2005): 83-102.

Badros, Greg. 2000. JavaML : An XML-based Source Code Representation for Java Programs. Proceedings of the 9th International World Wide Web Conference. http://www9.org/w9cdrom/342/342.html [24 Jun 2007]

Bloom, B.S. . 1956. Taxonomy of Educational Objectives: Handbook I: Cognitive Domain: Longmans, Green and Company.

Botev C., Chao H., Chao T., Cheng Y., Doyle R., Grankin S., Guarino J., Guha S, Lee P. C., Perry D., Re C, Rifkin I., Yuan T., Abdullah D., Carpenter K., Gries D., Kozen D., Myers A., Schwartz D., Shanmugasundaram J.. 2005. Supporting Workflow In A Course Management System. ACM SIGCSE Bulletin 37(1), hlm. 262-266.

Chen, J. Y. and Lu, J. F. 1993. A New Metric for Object-oriented Design. Journal of Information Software Technology 35 (April 1993): 232–240.

Coleman M., Pratt S. 1989. Software Engineering for Students: Chartwell-Bratt Ltd.

David P. Tegarden , Steven D. Sheetz , David E. Monarchi. 1995. A Software Complexity Model of Object-oriented Systems. Decision Support System 13, hlm. 241-262.

Dennis Ritchie. 1975. C Programming Manual. Bell Labs. http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf [20 Oktober 2008]

Donaldson, John L., Ann-Marie Lancaster and, and Paula H. Sposato. 1981. A Plagiarism Detection System. Proceedings of 12th SIGCSE Technical Symposium, hlm. 21-25.

Foxley, E. Higgins, C, & Gibbon, C. 1996. The Ceilidh System : A General Overview. http://www.cs.nott.ac.uk/CourseMarker/more_info/html/Overview96.htm [24 Jun 2007]

Booch, G., Rubargh, J., Jacobson, I. 1999. The Unified Modeling Language User Guide: Addison Wesley.

Granville, A. 2002. Detecting Plagiarism in Java Code, Tesis Sarjanamuda Sains Komputer, University of Sheffield.

Chu H. D., Dobson, J. E. and Liu, I.C.. 1997. FAST-A Framework for Automating Statistic-based Testing. http://citeseer.nj.com/73306.html [30 Jun 2006]

Halstead, M. H. 1977. Elements of Software Science. North-Holland: Elsevier.

73

Page 74: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Hollingsworth, J. 1960. Automatic Graders for Programming Classes. Communication of the ACM 3 (10), hlm. 528-529.

Jackson, D. & Usher, M. 1997. Grading Student Programs Using ASSYST. ACM SIGCSE Bulletin29(1), hlm. 335-339.

Joy M & Luck M. 1998. The BOSS System for On-line Submission and Assessment. http://www.ulster.ac.uk/cticomp/joy.html [24 Jun 2007]

Khirulnizam Abd Rahman, Md Jan Nordin, Che Wan Shamsul Bahri Che Wan Ahmad, Juzlinda Mohd Ghazali. 2007. Development of an Automated Assessment for C Programming Exercises using Pseudocodes Comparison Technique. Proceedings of Conference on IT Research & Application 2007, hlm. 119-126.

Levenstein , V. I.. 1966. Binary Codes Capable of Correcting Deletions, Insertions and Reversals. Soviet Physics Doklady, Vol. 10, hlm.707-710.

Mahmud Ab Rahman. 2006. Persekitaran Pembangunan Bersepadu Pintar Bahasa Pengaturcaraan C Berasaskan Web bagi Pengaturcara Baru. Tesis Sarjana Teknologi Maklumat, Universiti Kebangsaan Malaysia.

Marini Abu Bakar, Norleyza Jailani, Sufian Idris. 2002. Pengaturcaraan C. Kuala Lumpur: Prentice Hall.

McCabe, T. J. 1976. A Complexity Measure. IEEE Transaction of Software Engineering 4 (SE-2), hlm. 308-320.

Parr, Terence, & Klaren, Ric. ANTLR - Complete Language Translation Solutions.http://www.antlr.org/ [01 Jun 2006]

Truong, N., Roe, P., Bancroft, P.. 2003. A Web Based Environment for Learning to Program. Proceedings of the 26th Australasian Computer Science Conference, hlm. 255-264.

Truong, N., Roe, P., Bancroft, P.. 2004. Static Analysis of Students’ Java Programs. Proceedings of 6th Australian Computing Education Conference (ACE2004), hlm. 317-325.

Truong, N., Roe, P., Bancroft, P. 2005. Automated Feedback for “Fill in the Gap” Programming Exercises. Proceedings of 7th Australasian Computing Education, hlm. 117-126.

Norshuhani Zamin, Emy Elyanee Mustapha, Savita K.Sugathan, Mazlina Mehat, Ellia, and Anuar. 2006. Development Of A Web-Based Automated Grading System For Programming Assignments Using Static Analysis Approach. Proceedings of International Conference on Electrical and Informatics, Bandung, Indonesia.

Norshuhani Zamin, Savita K.Sugathan, Mazlina Mehat, Emy Elyanee Mustapha, Ellia Anuar. 2006. WAGS: A Web-Based Automated Grading System For Programming Assignments From Users’ Perspectives. Proceedings of International Conference on Science & Technology: Application in Industry & Education (2006).

php.net. 2007. PHP Manual. http://php.net/similar_text [01 Jun 2007].

74

Page 75: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

php.net. 2008. PHP Manual. http://php.net/lahvenstein [19 Oktober 2008].

Prechelt L, Malpohl G., Philippsen M. 2000. Finding plagiarisms among a set of programs with JPlag. Journal of Universal Computer Science. 8(11), hlm. 1016 - 1038.

Rich, C. and Wills, L. M. . 1990. Recognizing a Program's Design: A Graph-Parsing Approach. IEEE Software. 7 (1), hlm. 82-89.

Robertson, L. A. 2004. Simlple Program Design: A Step by Step Approach: Thomson Course Technology.

Rohaida Romli, Mazni Omar, Cik Fazilah Hibadullah. 2004. Automatic Correctness Assessment Program for Java Programming Assignment. M2USIC 2004, Malaysia. http://m2usic.mmu.edu.my/main/Proceeding2004/Paper%20276.pdf [24 Jun 2007]

Rohaida Romli. 2003. Penjanaan Data Ujian untuk Penaksiran Automatik Tugasan Aturcara C, Tesis Sarjana Teknologi Maklumat, Universiti Kebangsaan Malaysia.

Saikkonen, R., Malmi, L., and Korhonen A., 2001. Fully Automatic Assessment of Programming Exercises. Proceedings of the 6th Annual Conference on Innovation and Technology in Computer Science Education, hlm. 133-136.

Schorsch, Tom. 1995. CAP: An Automated Self-Assessment Tool To Check Pascal Programs For Syntax, Logic And Style Errors. Proceedings of the 6th Annual Conference on Innovation and Technology in Computer Science Education, hlm. 133-136.

Shafer, S. C. 2005. LUDWIG: An Online Programming Tutoring and Assessment System. inroads – The SIGCSE Bulletin. 37 (June 2005), hlm. 56-60.

Symeonidis, P. 1998. An in-depth Review of CourseMaster’s Marking Subsystem. http://www.cs.nott.ac.uk/CourseMarker/more_info/pdf/AnIn-depthReviewofCourseMastersMarkingSubsystem.pdf [06 Jun 2006]

Venables A., Haywood L. 2003. Programming students NEED instant feedback! Conferences in Research and Practice in Information Technology. Proceedings of the 5th Australasian Conference on Computing Education. 20, hlm. 267 - 272.

Wei Li, Sallie Henry. 1993. Object-oriented Metrics that Predict Maintainability. Journal of Systems and Software 23, hlm. 111-122.

Whale, Geoff. 1986. Detection of Plagiarism in Student Programs. 9th Australian Computer Science Conference, Canberra.

Wise, M. J. 1992. Detection of Similarities in Student Programs: YAP’ing maybe preferable to Plague’ing. ACM SIGCSE Bulletin. 24, March, hlm. 268-271.

Wise, M. J. 1993. String Similarity via Greedy String Tiling and Running-Karp-Rabin Matching. ftp://ftp.cs.su.oz.au/michaelw/doc/RKR_GST.ps [24 Jun 2007].

75

Page 76: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Yerramilli, Susan, Mengel A., Vinay. 1999. A Case Study Of The Static Analysis Of The Quality Of Novice Student Programs. ACM SIGCSE Bulletin. 31(1), hlm. 78-82.

Zin, A.M. and Foxley, E. 1991. Automatic Program Quality Assessment System. Proceedings of the IFIP Conference on Software Quality, S P University, Vidyanagarm India, March 1991.

Zin, M. A. & Foxley, E. 1994. Automatic Program Assessment System. http://www.cs.nott.ac.uk/~ceilidh/papers/ASQA.html [24 Jun 2007].

76

Page 77: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

LAMPIRAN A

SENARAI METOD DAN ATRIBUT SEMUA KELAS TERLIBAT

1. Kelas Penganalisis Leksikal

a) Kelas TokenToken

-typeE-tokenE-next-previous+Token+setDataType+getDataType+getType+getToken+getValue+getLine+changeValue+goNext

Data-data yang disimpan dalam kelas ini ialah; typeE – maklumat berkenaan jenis token yang dipegang. tokenE – token yang dipegang. next – penunjuk kepada token yang seterusnya dalam senarai jujukan token. previous – penunjuk kepada nod sebelumnya dalam senarai jujukan token.

Metod-metod yang terdapat dalam kelas Token dan peranan masing-masing. Token – konstruktor kepada kelas ini. getType – mengembalikan jenis token. getToken – mengembalikan token yang dipegang oleh nod. goNext – mengembalikan alamat nod yang seterusnya.

b) Kelas KataKunci KataKunci

-listkw-wordToMatch+Keyword+findMatchKeyword

Data-data yang disimpan dalam kelas ini ialah; listkw – menyimpan senarai semua kata kunci (dalam bentuk tatsusunan) yang

ditentukan dalam nahu atur cara yang diproses. wordToMatch – menyimpan perkataan yang akan dibandingkan dengan senarai

kata kunci.

Metod-metod yang terdapat dalam kelas KataKunci dan peranan masing-masing. Keyword – konstruktor kepada kelas ini. findMatchKeyword – mengembalikan true jika perkataan yang diproses adalah

kata kunci, dan false jika sebaliknya.

77

Page 78: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

c) Kelas SenaraiTokenSenaraiToken

-firstNode-currentNode-lastNode-head-currentToken+ListToken+isEmpty+getCurrentToken+insertNode+goNext+goFirst+setHead+getHead+traverse

Data-data yang disimpan dalam nod ini ialah; firstNode – nod yang pertama dalam senarai jujukan tersebut. currentNode – kedudukan nod semasa. lastNode – nod terakhir dalam senarai jujukan. head – penunjuk kepada nod kepala yang juga seperti nod pertama. currentToken – token semasa dalam proses penyelusuran.

Metod-metod yang terdapat dalam kelas SenaraiToken dan peranan masing-masing. ListToken – konstruktor kepada objek ini. isEmpty – mengembalikan true/benar sekiranya senarai jujukan tiada nod. getCurrentToken – mengembalikan token semasa dalam proses penyelusuran. insertNode – menyelitkan nod token yang baru dibina. goNext – pergi kepada nod seterusnya. goFirst – pergi ke nod pertama dalam senarai jujukan. setHead – menyimpan alamat nod pertama atau nod kepala. getHead – mengembalikan alamat nod pertama. traverse – berfungsi melakukan proses menyelusur senarai jujukan nod.

d) Kelas PenganalisisLeksikalPenganalisisLeksikal

-input-tempToken-lineno-inputlength-c-charC-tokenList-keys+Lexer+isSeparator+isBeginOperator+lexList+traverseLexList+returnHeadTokenList

78

Page 79: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Data-data yang disimpan dalam kelas ini ialah; input – menyimpan kod atur cara sumber. tempToken – menyimpan nod token sementara sebelum diselit ke dalam senarai

jujukan. inputlength – mengandungi maklumat tentang panjang aksara dalam kod atur

cara sumber. c – satu aksara daripada kod atur cara sumber. tokenList – memegang objek (berasal dari kelas ListToken) yang akan

menyediakan kemudahan menyenaraikan token. keys – objek kepada kelas Keyword.

Metod-metod yang terdapat dalam kelas PenganalisisLeksikal dan peranan masing-masing. Lexer – konstruktor kepada kelas ini. isSeparator – mengembalikan true sekiranya aksara yang dihantar termasuk

daripada kategori separator (pemisah). Antara aksara yang dikategorikan sebagai pemisah ialah “,”, “;”, “{”, “}” ,“[” ,“]”, “(”,“)” dan “:”.

lexList – metod ini adalah yang terpenting dalam kelas ini, ia berfungsi untuk membuat analisis leksikal kepada kod atur cara sumber dan menjana senarai jujukan token.

traverseLexList – berfungsi melakukan proses menyelusur senarai jujukan token yang telah dihasilkan oleh metod lexList.

returnHeadTokenList – mengembalikan alamat token pertama yang juga menjadi kepada senarai berjujukan token.

79

Page 80: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

2. Kelas Penjana Kod-Pseudo

a) Kelas PenjanaKodPseudo

PenjanaKodPseudo-pseudolist-indentation-nod-tokenList-block-forStepStack-forConditionStack-currentDataType-switchLeftStmt-evaluation-firstCase+PseudoCodeGenerator+pseudocodegen+getPseudolist+getArrayLastItem+isDataType+isLiteralValue+printPseudoList+stringPseudoList-printIndentation+goNextNod+isSemicolonOrComa+isExpressionOps-directAssignment-declarationStatements-assignmentOperations-printfStatement-scanfStatement-ifStatement-ifElseStatement-elseStatement-compoundStatement-switchStatement-caseStatement-defaultStatement-doWhileStatement-whileStatement-forStatement

Data-data yang disimpan dalam kelas ini ialah; pseudolist – senarai kod pseudo dalam tatasusunan. Setiap satu baris kod pseudo

merupakan satu item dalam tatasusunan ini. indentation – mengandungi maklumat berapa jarak indentasi untuk satu baris kod

pseudo. Indentasi berbeza mengikut blok di mana baris kod pseudo berada. nod – ini adalah objek daripada kelas token. Ia menyimpan maklumat token

semasa yang berada dalam senarai jujukan token yang sedang diproses.

80

Page 81: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

tokenList – merupakan objek daripada ListToken yang menyimpan maklumat senarai jujukan token.

block – menyimpan maklumat di dalam blok mana kod atur cara sumber sedang diproses. Kedudukan blok (seperti blok fungsi main, atau dalam struktur kawalan if…else, do…while, for, dan switch…case) perlu diketahui kerana proses yang berbeza akan dilakukan kepada kod atur cara yang berada dalam blok berbeza.

forStepStack – pernyataan penerusan dalam gelung for. forConditionStack – pernyataan ujian dalam gelung for. currentDataType – jenis data semasa bagi pemboleh ubah yang diproses. switchLeftStmt – ungkapan atau pemboleh ubah pada pernyataan switch. firstCase – true jika switch…case yang diproses adalah case yang pertama, false

jika sebaliknya.

Metod-metod yang terlibat; PseudoCodeGenerator – konstruktor kepada kelas ini. Ia akan menerima kod

atur cara dalam bentuk rentetan memanggil metod pseudocodegen untuk membentuk kod pseudo.

getPseudolist – mengembalikan tatasusunan yang mengandungi kod pseudo. getArrayLastItem – mengembalikan nilai item yang terakhir dalam suatu

tatasusunan tanpa menghapuskan item tersebut. isDataType – mengembalikan true sekiranya suatu nilai string itu tergolong

dalam senarai berikut “int”, “float”, “double”, “char”, “long”, “short” dan “signed”.

isLiteralValue – mengembalikan true sekiranya token tergolong dalam nilai lateral untuk integer, nomber perpuluhan, aksara atau rentetan. Integer dan nombor perpuluhan tidak dikurung oleh apa-apa simbol. Contoh nilai 9 dan 3.142. Manakala untuk aksara dan rentetan, nilai lateral dikurung masing-masing dengan simbol berikut: ‘h’dan “nama”.

printPseudoList – memaparkan senarai kod pseudo yang terhasil dalam textarea dalam halaman HTML. Contoh: <textarea>Di sini kod pseudo yang telah dihasilkan</textarea>

stringPseudoList – mengembalikan kod pseudo dalam bentuk string. printIndentation – menyelitkan indentasi sebelum satu baris kod pseudo

dimasukkan ke dalam senarai kod pseudo (pseudolist). Panjang indentasi berbeza mengikut kedudukan baris dalam blok atur cara.

goNextNod – proses nod token yang seterusnya dalam senarai berjujukan token. isSemicolonOrComa – mengembalikan true sekiranya aksara adalah

semicolon(;) atau koma (,). isExpressionOps – mengembalikan true jika rentetan tergolong dalam kategori

operator Boolean ataupun operator perbandingan.Operator Boolean : TAK “!”, DAN “&&” dan ATAU “||”.Operator perbandingan : sama dengan “==”, tak sama dengan “!=”, lebih kecil “<”, lebih besar “>”, lebih kecil atau sama dengan “<=”, dan lebih besar atau sama dengan “>=”.

directAssignment – memproses operasi umpukan di mana pernyataan di sebelah kanan tidak mengandungi operasi arithmetik. Aliran proses akan masuk ke metod ini sekiranya token yang diproses ialah “=”.

declarationStatements – memproses pernyataan pengisytiharan pemboleh ubah. Aliran proses akan masuk ke metod ini sekiranya token semasa yang diproses ialah token yang mengandungi jenis data (iaitu “int”, “float”, “double”, “char”, “long”, “short” dan “signed”). Untuk setiap nama pembolehubah yng dijumpai, masing-masing akan diubah kepada v1, v2, v3 dan seterusnya vN mengikut mana dahulu yang dijumpai. Di sini penulis membuat sedikit perubahan daripada

81

Page 82: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

cadangan Norshuhaini et. al. (2006) yang mana setiap pembolehubah yang dijumpai akan diganti dengan perkataan ”var”.

assignmentOperations – memproses operasi umpukan di mana pernyataan di sebelah kanan mengandungi operasi arithmetik. Aliran proses akan masuk ke metod ini sekiranya token yang diproses ialah “=” dan diikuti dengan operasi arithmetik.

printfStatement – menukar arahan printf() yang terdapat dalam C kepada pernyataan DISPLAY. Rentetan yang terdapat dalam kurungan “??????” akan diubah kepada “teks”, seperti yang dicadangkan oleh Norshuhaini et. al. (2006). Ini dilakukan untuk menambahkan kesamaan dengan model penyelesaian. Memandangkan mesej yang cuba disampaikan dalam arahan printf() adalah pelbagai, maka penulis mencadangkan supaya rentetan mesej diseragamkan kepada “teks”.

scanfStatement – menukar arahan scanf() kepada INPUT diikuti dengan senarai pemboleh ubah yang terbabit.

ifStatement – metod ini akan mengendalikan penukaran pernyataan if kepada format yang dicadangkan oleh Robertson (2002).

ifElseStatement – metod menukarkan if…else kepada IF…ELSE. elseStatement – metod menukarkan pernyataan else kepada ELSE. compoundStatement – pernyataan kompaun merujuk kepada switchStatement – metod akan menukarkan pernyataan switch yang dijumpai

dalam atur cara sumber kepada IF. caseStatement – metod menukarkan pernyataan case kepada IF atau IF…ELSE

bergantung pada kes yang ke berapa. defaultStatement – metod menukarkan pernyataan default dalam switch…case

kepada ELSE. doWhileStatement – metod menukarkan pernyataan do…while kepada DO…

WHILE. whileStatement – metod menukarkan pernyataan while kepada WHILE. forStatement – metod menukarkan pernyataan for kepada WHILE. pseudocodegen – metod utama dalam kelas ini. Metod ini mengawal penelusuran

senarai jujukan token dan menentukan metod yang akan dipanggil untuk menentukan aliran proses.

3. Kelas Pembanding Kod-Pseudo

b) Kelas PemisahPembolehubahPemisahPembolehubah

-pseudocodelist-listVarDeclaration-listflow-variableTable+VarDeclarationSeparator-separateVarDecFromCode+getVarDecList+getFlowList+stringVarDecList+stringFlowList+stringVariableTable

Maklumat yang disimpan dalam kelas ini ialah; pseudocodelist – senarai kod pseudo dalam tatasusunan. Setiap satu baris kod

pseudo merupakan satu item dalam tatasusunan ini.

82

Page 83: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

listVarDeclaration – semua pengisytiharan pemboleh ubah dikumpulkan di sini dalam bentuk tatasusunan.

listflow – semua pernyataan selain daripada pengisytiharan pemboleh ubah dikumpulkan di sini.

variableTable – senarai pemboleh ubah yang diperolehi daripada kod pseudo.

Metod-metod yang terdapat dalam kelas PemisahPembolehubah dan peranan masing-masing.

VarDeclarationSeparator – konstruktor kelas ini. Menerima kod pseudo dalam bentuk satu rentetan panjang.

separateVarDecFromCode – memisahkan kod pseudo yang mengandungi pengisytiharan pemboleh ubah daripada pernyataan yang lain. Dua senarai akan terbentuk (dalam tatasusunan) iaitu senarai pengisytiharan pemboleh ubah dan senarai kod pseudo bukan pengisytiharan pemboleh ubah.

getVarDecList – mengembalikan senarai kod pseudo yang mengandungi pengisytiharan pemboleh ubah sahaja (dalam tatasusunan).

getFlowList – mengembalikan senarai kod pseudo yang mengandungi selain daripada pengisytiharan pemboleh ubah (dalam tatasusunan).

stringVarDecList – mengembalikan senarai kod pseudo yang mengandungi pengisytiharan pemboleh ubah sahaja (dalam bentuk rentetan).

stringFlowList – mengembalikan senarai kod pseudo yang mengandungi selain daripada pengisytiharan pemboleh ubah (dalam bentuk rentetan).

stringVariableTable – mengembalikan senarai pemboleh ubah (dalam bentuk rentetan).

c) Kelas PembandingKodPseudoPembandingKodPseudo

-pseudostudent-pseudoschema-pseudostudentArray-pseudoschemaArray-markvardec-markflow-totalmark-vdsStudent-vdsSchema-flowStudent-flowSchema-stdVarTable-schemaVarTable-highest+ComparePseudocodes-pseudocodeToArrayLine-compareDeclaration-compareFlow-analyseVar-calculateHighestMark+getTotalMark+getFlowMark+getVariableMark+getStringFlowStudent+ getStringFlowSchema+getHighestMark

83

Page 84: Khirulnizam - Content - Pentaksir Automatik Latihan Asas Pengaturcaraan C Menggunakan Kaedah Perbandingan Kod-Pseudo

Data-data yang disimpan dalam kelas ini ialah; pseudostudent – input kod pseudo jawapan pelajar (dalam bentuk rentetan). pseudoschema – input kod pseudo model penyelesaian(dalam bentuk rentetan). pseudostudentArray – kod pseudo jawapan pelajar (dalam bentuk tatasusunan). pseudoschemaArray – kod pseudo model penyelesaian (dalam bentuk

tatasusunan). markvardec – markah untuk pemboleh ubah. markflow – markah untuk kod pseudo aliran aturcara. totalmark – markah perbandingan (markvardec + markflow). vdsStudent – kod pseudo pengisytiharan pemboleh ubah pelajar (dalam bentuk

tatasusunan). vdsSchema – kod pseudo pengisytiharan pemboleh ubah model penyelesaian

(dalam bentuk tatasusunan). flowStudent – kod pseudo aliran kerja pelajar (dalam bentuk tatasusunan). flowSchema – kod pseudo aliran kerja model penyelesaian (dalam bentuk

tatasusunan). stdVarTable – memegang senarai pemboleh ubah terdapat dalam kod-pseudo

jawapan pelajar. schemaVarTable – memegang senarai pemboleh ubah terdapat dalam kod-

pseudo skema jawapan. highest – memegang markah yang paling tinggi antara semua markah

perbandingan. schemanumber – bilangan model penyelesaian yang dibekalkan.

Metod-metod yang terdapat dalam kelas PembandingKodPseudo dan peranan masing-masing.

ComparePseudocodes – konstruktor kelas ini. Menerima dua kod pseudo; iaitu kod pseudo pelajar dan kod pseudo model penyelesaian. Keduanya dalam bentuk rentetan. Selepas kedua-dua kod pseudo diubah format, kelas ini akan memanggil metod compareFlow, compareDeclaration dan mengira markah keseluruhan.

pseudocodeToArrayLine – metod ini akan mengubah kod pseudo daripada bentuk rentetan kepada bentuk tatasusunan.

compareDeclaration – compareFlow – membuat perbandingan antara kod pseudo aliran kerja pelajar

aturcara dan kod pseudo aliran kerja model penyelesaian. Peratus kesamaan antara keduanya diperolehi dengan menggunakan fungsi similar_text (Manual PHP, 2007) yang terdapat dalam pustaka PHP.

getTotalMark – mengembalikan markah keseluruhan. getFlowMark – mengembalikan markah peratus kesamaan untuk kod pseudo

aliran kerja. getVariableMark – mengembalikan markah untuk kesamaan senarai

pembolehubah. getStringFlowStudent – mengembalikan kod pseudo aliran kerja pelajar (dalam

bentuk rentetan). getStringFlowSchema – mengembalikan kod pseudo aliran kerja model

penyelesaian (dalam bentuk rentetan). analyseVar – membuat analisis tentang berapa bilangan pemboleh ubah berjenis

integer, nombor nyata dan juga aksara. calculateHighestMark – menentukan markah mana yang tertinggi antara semua

perbandingan. getHighestMark – mengembalikan peratus kesamaan yang paling tinggi.

84