BAB II STUDI LITERATUR

Ukuran: px
Mulai penontonan dengan halaman:

Download "BAB II STUDI LITERATUR"

Transkripsi

1 BAB II STUDI LITERATUR Pada Bab ini, akan dibahas hasil studi literatur maupun eksplorasi yang akan dipakai untuk membangun aplikasi pendeteksi plagiarisme yang menggunakan metode structure-based. Studi literatur yang dilakukan terbatas pada cakupan plagiarisme source code program saja. Bab ini diawali dengan pembahasan mengenai perkembangan deteksi plagiarisme otomatis pada source code, kemudian dilanjutkan dengan pembahasan mengenai algoritma pembandingan yang dapat menangani masalah yang dihadapi sistem deteksi plagiarisme otomatis dan sistem-sistem deteksi plagiarisme yang sudah pernah dikembangkan. 2.1 Perkembangan Deteksi Plagiarisme Otomatis pada Source Code Pada Subbab ini diberikan pembahasan mengenai perkembangan deteksi plagiarisme otomatis pada source code, mulai dari keadaan lingkungan pendidikan yang mendorong perkembangan deteksi plagiarisme otomatis sampai dengan metode deteksi plagiarisme otomatis yang telah diterapkan Plagiarisme Source Code di Kelas Pemrograman Banyak sekali bentuk-bentuk dari ketidakjujuran ditemukan pada lingkungan pendidikan, khususnya kuliah pemrograman. Plagiarisme di kuliah pemrograman ini terjadi ketika siswa mengumpulkan tugas yang dibuat untuk memenuhi kewajiban akademis, namun mengandung ide atau kata-kata milik orang lain yang diakui sebagai kreasi pribadi, sehingga pengajar atau pemeriksa tidak mengetahui bahwa pekerjaan tersebut mengandung bagian yang disadur dari kreasi orang lain. Bentuk-bentuk plagiarisme pada kelas pemrograman yaitu [JOY99] : a. Mahasiswa yang lemah secara akademik kerja sama dengan teman untuk mengerjakan suatu tugas. Jenis kerja sama di sini berbeda maknanya dengan kerja sama pada pengerjaan tugas kelompok. Dalam tugas-tugas tertentu mahasiswa diharuskan mengumpulkan hasil yang dikerjakan secara individual, namun dengan adanya diskusi, hasil yang dikumpulkan pun akan cenderung sama. 1

2 II-2 b. Mahasiswa yang lemah secara akademik menyalin kemudian melakukan modifikasi pada source code milik teman dengan berharap bahwa hal tersebut tidak akan diketahui oleh penilai atau pengajar. Kemungkinan besar mahasiswa tidak terlalu mengerti source code yang dimodifikasinya, sehingga kesamaan antara kedua buah source code cenderung besar. c. Mahasiswa yang motivasinya rendah tapi belum tentu lemah secara akademik melakukan plagiarisme dengan maksud agar bobot pekerjaan lebih ringan atau agar waktu pengerjaan lebih singkat. Bisa saja mahasiswa tersebut sangat mengerti topik tugas yang diberikan sehingga modifikasi yang dilakukan cukup rumit. Plagiarisme seperti ini lebih sulit diidentifikasi. Praktek plagiarisme merupakan bentuk kecurangan akademik yang sangat buruk. Pada Pasal 8.1 Peraturan Akademik ITB terdapat larangan untuk melakukan kecurangan akademik, termasuk menggunakan kata-kata atau karya orang lain sebagai kata-kata atau karya sendiri dalam suatu kegiatan akademik tanpa menyebutkan acuan yang dipakai [PPA06]. Setiap mahasiswa layak mendapatkan nilai atau penghargaan berdasarkan suatu hasil nyata yang telah dikerjakannya, yang kemudian akan dipakai untuk menentukan posisi di universitas, seleksi beasiswa, seleksi pekerjaan, dan lainlain. Jika pekerjaan tersebut bukan merupakan hasil kreasi mahasiswa yang bersangkutan, maka sebetulnya mahasiswa tersebut tidak pantas untuk mendapatkan nilai atau penghargaan yang lebih daripada mahasiswa lain yang jujur namun mendapatkan hasil yang lebih buruk. Praktek plagiarisme harus dicegah karena setiap perbuatan plagiat akan mempengaruhi seluruh elemen kehidupan akademik. Plagiarisme di kelas pemrograman sudah sangat umum, dan tidak cukup jika penilai hanya memperingatkan siswa saja. Beberapa siswa akan terus melakukan plagiarisme walaupun pengajar berusaha keras untuk mencegahnya. Oleh karena itu harus ada suatu usaha deteksi plagiarisme dan sistem pemberian hukuman sebagai akibat dari melakukan ketidakjujuran. Deteksi juga tidak hanya ditujukan untuk mendeteksi bagian hasil plagiarisme, tapi juga harus meyakinkan pengguna bahwa bagian tersebut bukan suatu kesamaan yang tidak disengaja. Deteksi manual tidak efektif dan mudah gagal terutama karena jumlah peserta kelas yang biasanya mencapai ratusan, karena itulah kebutuhan akan sistem yang dapat mendeteksi plagiarisme secara otomatis pun meningkat.

3 II Karakteristik Plagiarisme di Kelas Pemrograman Plagiarisme yang dilakukan oleh mahasiswa kelas pemrograman mempunyai perbedaan mendasar dari plagiarisme lain, yaitu lebih mudah dilakukan dan lebih sulit dideteksi [WAG00]. Biasanya mahasiswa pemrograman bekerja di lingkungan yang sama dan soal yang diberikan pun sama, sehingga program yang dihasilkan pun akan mirip. Output yang dihasilkan dari eksekusi program kemungkinan akan sama, dan mahasiswa bisa menyalin kemudian melakukan modifikasi-modifikasi yang tidak mempengaruhi eksekusi program. Selain itu, suatu source code bisa saja merupakan gabungan hasil penyalinan dari beberapa source code lainnya, atau gabungan dari hasil pengerjaan sendiri dan hasil penyalinan dari orang lain. Hal itu juga meningkatkan kesulitan dalam mendeteksi bagian program yang merupakan hasil plagiarisme. Modifikasi-modifikasi yang biasa dilakukan oleh mahasiswa pemrograman bisa diklasifikasikan sebagai berikut [JOY99] : a. Lexical change Menurut Joy dan Luck [JOY99], lexical change merupakan modifikasi yang bisa dilakukan dengan text editor tanpa memakai pengetahuan pemrograman. Contohcontoh modifikasi yang dapat dilakukan yaitu menghilangkan atau menambah komentar dan mengubah nama identifier. b. Structural change Modifikasi jenis ini membutuhkan pengetahuan lebih mengenai pemrograman yang cukup untuk melakukan parse terhadap program. Modifikasi ini sangat language-dependent. Plagiarisme yang dilakukan dengan melakukan modifikasi seperti ini lebih sulit untuk dideteksi. Contoh-contoh perubahan yang sering dilakukan yaitu : 1) Mengganti jenis iterasi, misalnya dari sintaks do-while menjadi for. 2) Mengganti jenis statement kondisional, misalnya mengganti sintaks if dengan case. 3) Mengganti urutan statement yang tidak menimbulkan perubahan hasil eksekusi program. 4) Prosedur diganti dengan fungsi atau sebaliknya. 5) Pemanggilan prosedur diganti dengan body prosedur tersebut.

4 II-4 6) Menambah statement yang tidak mempunyai efek yang tidak terlihat ketika program dijalankan, sehingga bagian tertentu dari source code menjadi redundan. 7) Mengganti ekspresi ke bentuk ekuivalen, misalnya x < y menjadi y >= x. Faidhi dan Robinson[FAI87] mengklasifikasikan modifikasi-modifikasi tersebut ke dalam enam level modifikasi program yang digambarkan pada spektrum plagiarisme (lihat Gambar II-1). Semakin tinggi level, semakin sulit untuk mendeteksi dan membuktikan adanya plagiarisme. Gambar II-1. Spektrum Plagiarisme [FAI87] Manfaat Sistem Manfaat dari sistem deteksi plagiarisme otomatis adalah untuk membantu deteksi manual dalam hal melakukan pembandingan antara jumlah source code yang banyak dalam waktu yang lebih singkat. Sistem juga tidak boleh tertipu oleh berbagai modifikasi yang dilakukan mahasiswa untuk menyembunyikan praktek plagiarisme. Sistem harus dapat membedakan source code hasil plagiarisme dan source code yang bukan merupakan kasus plagiarisme, sehingga sedapat mungkin meminimalisasi kesalahan hasil deteksi dalam hal menentukan apakah itu hanya kesamaan yang tidak disengaja ataukah merupakan hasil praktek plagiarisme.

5 II-5 Aspek-aspek utama yang harus diperhatikan dari pembangunan sistem deteksi plagiarisme otomatis yaitu [CLO03] : a. Deskriminator yang cocok untuk menunjukkan adanya plagiarisme. b. Membangun metode yang cocok untuk membandingkan diskriminator tersebut. c. Pengukuran similarity yang sesuai Metode Deteksi Plagiarisme Otomatis Dua pendekatan utama yang telah dipakai untuk metode-metode deteksi plagiarisme otomatis yaitu attribute-counting dan structure-based [CLO00]. Pada metode attribute-counting, yang dibandingkan adalah ukuran kuantitatif beberapa metriks program. Sedangkan pada metode structure-based, yang dibandingkan adalah representasi dari struktur program, misalnya representasi linier berupa string, parse tree, data flow, dan lain-lain. Kedua pendekatan tersebut akan dijelaskan pada Subbab dan Subbab Metode Attribute-counting Sistem-sistem deteksi plagiarisme otomatis generasi awal memakai metode ini untuk membandingkan program-program. Setiap program mempunyai suatu angka yang merupakan analisis kuantitatif dari beberapa fitur program (metriks) yang kemudian akan dibandingkan. Contoh metriks yang paling sederhana yaitu ukuran program, misalnya jumlah baris. Kemudian teknik ini terus dikembangkan agar lebih mampu menangani berbagai modifikasi program yang dapat menipu sistem agar dianggap bukan hasil plagiat. Berbagai metode attribute-counting yang menggunakan metriks lain terus bermunculan, misalnya perhitungan jumlah operator dan operands oleh Halstead, metode cyclomatic complexity dari McCabe yang mengukur aliran kontrol program dengan menghitung jumlah execution path, dan metode pengukuran scope number. Pada sistem yang dibangun setelah itu, berbagai metriks dikombinasikan sehingga terdapat beberapa angka yang mewakili setiap program. Program dianggap sama jika hampir semua atau semua angka tersebut sama. Perkembangan selanjutnya untuk tuning sistem tersebut adalah dengan menentukan bobot untuk setiap parameter, sehingga metriks yang lebih penting akan lebih berpengaruh pada tingkat similarity program. Walaupun berbagai tuning sudah dilakukan untuk memperbaiki metode ini,

6 II-6 sistem-sistem attribute-counting hanya berhasil melakukan deteksi dengan efektif untuk plagiarisme yang dilakukan oleh amatir dengan modifikasi-modifikasi sederhana. Sistem-sistem tersebut masih belum mampu untuk mendeteksi praktek plagiarisme yang lebih kompleks, misalnya plagiarisme parsial yang terjadi ketika hanya sebagian kode saja yang disalin dari kode milik mahasiswa lain Metode Structure-based Penelitian telah membuktikan bahwa metode attribute-counting tidak bisa menggambarkan struktur program secara baik untuk membedakan source code hasil plagiarisme dan source code yang bukan merupakan kasus plagiarisme [FAI87, WIS92]. Hal inilah yang mendorong dikembangkannya metode berbasis struktur yang lebih rumit daripada attribute-counting dan memerlukan pengetahuan lebih mengenai bahasa pemrograman yang menjadi target deteksi. Metode ini tidak membandingkan representasi kuantitatif dari atribut program seperti pada metode attribute-counting, melainkan membandingkan suatu representasi dari struktur program. Contoh-contoh sistem yang menggunakan metode structure-based yaitu Plague, YAP [WIS92], MOSS [AIK94], SIM, JPlag [LUT00] dan SID [CHE03]. Sistem-sistem tersebut telah digunakan luas dan terbukti efektif dalam mendeteksi plagiarisme. Secara umum proses pendeteksian pada sistem yang menggunakan metode berbasis struktur terbagi menjadi dua tahap sebagai berikut: 1. Tokenization, yaitu parsing kode program menjadi kumpulan token yang disebut token sequence atau profile. Token adalah elemen tunggal dari bahasa pemrograman. Contohnya reserved words, tanda baca, dan operator [TEC06]. Sedangkan parser adalah program yang memecah kode menjadi komponenkomponen fungsional [MIL05]. 2. Membandingkan setiap pasangan profile atau token sequence. Untuk n program yang dikumpulkan aplikasi akan melakukan n*(n 1)/2 pembandingan.

7 II Penanganan Lebih Dari Satu Bahasa Pemrograman Salah satu kebutuhan yang muncul mengenai sistem deteksi plagiarisme otomatis adalah penanganan lebih dari satu bahasa pemrograman. Sistem deteksi plagiarisme generasi awal seperti Plague membutuhkan banyak waktu dan usaha untuk membuat setiap versi yang menangani bahasa pemrograman yang berbeda, dimulai dari konstruksi parser dan penentuan ulang parameter-parameter program [CLO00]. Sebenarnya pada metode structure-based, hanya proses perubahan source code menjadi representasi program saja yang mempunyai ketergantungan pada bahasa pemrograman. Oleh karena itu, dengan mengenkapsulasi komponen detektor yang bertugas untuk transformasi source code, tidak perlu membangun ulang keseluruhan detektor untuk setiap bahasa pemrograman. Berdasarkan hipotesis tersebut, terdapat dua solusi utama untuk menangani masalah tersebut yang secara umum dipakai oleh sebagian besar sistem yang mendukung deteksi multi-language [ARW06]: 1. Dengan menggunakan parser yang memproduksi token string Token string merupakan representasi dari struktur program, sehingga proses produksi token string tergantung pada bahasa pemrograman source code yang dideteksi. Oleh karena itu jika suatu sistem dirancang untuk menangani lebih dari satu bahasa pemrograman, hanya bagian parser saja yang berbeda untuk setiap versi. Setelah tahap parsing, program akan membandingkan token string yang dihasilkan tersebut. 2. Dengan membandingkan intermediate code yang dihasilkan oleh compiler suite. Compiler suite merupakan compiler yang mendukung lebih dari satu bahasa. Pendekatan yang kedua dapat mendukung lebih banyak bahasa pemrograman daripada pendekatan pertama, namun sangat bergantung pada komponen compiler suite generik yang sudah tersedia.

8 II Algoritma Pembandingan pada Sistem Deteksi Plagiarisme Otomatis Bagian paling penting dari metode deteksi plagiarisme otomatis pada source code adalah pada saat pembandingan kode-kode program. Untuk proses tersebut dibutuhkan suatu algoritma pembandingan yang mampu menemukan bagian-bagian yang sama pada kode program yang dibandingkan. Pada Subbab ini, akan dijelaskan mengenai algoritma Greedy String Tiling (GST), kemudian algoritma Tuned Greedy String Tiling yang dikembangkan untuk menurunkan kompleksitas algoritma GST, dan algoritma Running Karp-Rabin Greedy String Tiling [WIS92, WIS93a, WIS93b] Algoritma Greedy String Tiling Algoritma Greedy String Tiling (GST) diusulkan dengan tujuan menentukan tingkat kesamaan dua buah token string. GST menggunakan pembandingan one-to-one, dan dapat menangani transformasi subrutin [WIS93a, WIS93b]. Ada beberapa istilah dan definisi yang harus diketahui sebelum algoritma Greedy String Tiling dapat dijelaskan. a. Token, token string, substring dan mark. Token merupakan representasi elemen-elemen source code. Yang dimaksud dengan token string yaitu bukan array of character melainkan array of token, sehingga substring merupakan deretan tokens yang merupakan bagian dari suatu token string. Dua buah token string dikatakan sama persis jika setiap token yang terdapat pada token string yang satu juga terdapat pada token string yang dibandingkan dengannya, dengan syarat bahwa setiap token mempunyai posisi dan urutan yang sama pada kedua token string. Pada Kode II-1, token direpresentasikan sebagai suatu tipe bentukan yang terdiri dari string yang menyimpan isi token dan boolean yang berfungsi sebagai mark. Mark akan bernilai true jika token sudah menjadi bagian dari suatu tile. b. Maximal-match Sebuah maximal-match menyimpan posisi dan panjang sebuah substring yang sama pada kedua token string yang dibandingkan. Cara membentuk maximalmatch yaitu ketika pasangan token yang sama ditemukan, tokens pada posisi berikutnya dibandingkan terus sampai salah satu dari tiga kondisi berikut ini

9 II-9 ditemui, yaitu jika pasangan token yang tidak cocok ditemukan, atau jika pada salah satu token string ditemukan token yang sudah ditandai (marked), atau jika tidak ada token yang bisa dibandingkan lagi pada salah satu token string (akhir token string dicapai). Notasi maximal-match pada algoritma di Kode II-1 yaitu match(p,t,s), dengan p dan t merupakan posisi token pertama pada masingmasing token string dan s merupakan jumlah token pada substring tersebut. Maximal-match bersifat temporer dan ada kemungkinan bukan merupakan asosiasi unik, karena substring yang menjadi bagian dari suatu maximal-match bisa saja merupakan bagian dari maximal-match yang lain. c. Tile Sebuah tile menyimpan posisi dan panjang sebuah substring yang sama pada kedua token string yang dibandingkan. Tile dibentuk dari maximal-match. Dalam proses membentuk tile dari sebuah maximal-match, token-token yang merupakan elemen dari maximal-match tersebut ditandai (marked). Bedanya dengan maximalmatch, tile bersifat permanen dan unik, karena substring yang menjadi bagian dari suatu tile tidak boleh menjadi bagian tile yang lain karena sudah ditandai. d. Minimum-match-length Dalam proses pembandingan seringkali muncul maximal-match yang ukurannya pendek. Maximal-match yang berukuran pendek tersebut dapat diabaikan karena dianggap tidak signifikan. Maximal-match dengan panjang satu atau dua token saja tidak akan berarti ketika membandingkan dua buah source code. Karena itu, ditentukan sebuah nilai yang disebut minimum-match-length. Semua maximalmatch yang mempunyai panjang di bawah minimum-match-length tidak akan dibentuk menjadi tile. Nilai minimum-match-length dapat mewakili tingkat sensitivitas deteksi. Biasanya minimum-match-length menjadi parameter program. Objektif dari algoritma ini adalah membentuk tiles dari kedua token string tanpa overlapping dengan memaksimalkan jumlah token yang ditandai. Tanpa overlapping yang dimaksud di sini yaitu sebuah token pada token string hanya merupakan elemen dari sebuah tile saja. Tile yang panjang lebih diutamakan daripada tile yang lebih pendek karena tile yang panjang lebih mencerminkan kecocokan dan kecil kemungkinan bahwa kecocokan tersebut hanyalah kebetulan saja.

10 II-10 Untuk memenuhi objektif tersebut, digunakan algoritma greedy 1 yang melakukan iterasi pada kedua token string. Setiap iterasi mempunyai dua fase sebagai berikut: 1. Fase scanpattern Fase ini bertujuan untuk mengumpulkan maximal-match dengan panjang yang lebih dari atau sama dengan ukuran tertentu. Ukuran ini disebut search length. Pada Kode II-1 search length dinyatakan dengan variabel maxmatch. Di awal fase scanpattern search length selalu diinisialisasi dengan nilai minimum-matchlength. 2. Fase markstrings Pada tahap ini, setiap maximal-match yang telah ditemukan akan diuji untuk mengetahui apakah token-token yang menjadi bagian dari maximal-match tersebut sudah ditandai (marked). Jika sudah ditandai, maka bagian dari maximalmatch tersebut sebenarnya sudah menjadi bagian dari tile yang lain. Jika semua token pada maximal-match belum ditandai, maka sebuah tile akan dibentuk dari maximal-match tersebut. Algoritma Greedy String Tiling dalam notasi algoritmik dapat dilihat di Kode II-1. Algoritma tersebut diadopsi dari pseudocode yang terdapat pada literatur tentang algoritma GST [WIS93a,WIS93b]. Contoh penerapan algoritma GST untuk menemukan substring yang sama pada dua buah token string dapat dilihat pada Lampiran A. Walaupun algoritma GST telah dibuktikan optimal, untuk kasus terburuk algoritma tersebut mempunyai kompleksitas O(n 3 ) [WIS93b]. Oleh sebab itu, dilakukan tuning terhadap algoritma GST (lihat Subbab 2.2.2) untuk memperbaiki kompleksitas ratarata algoritma GST. 1 Algoritma Greedy adalah algoritma apapun yang mengikuti metaheuristik pemecahan masalah yang membuat pilihan optimum lokal pada setiap langkahnya dengan harapan menemukan optimum global [COR01].

11 II-11 function GreedyStringTiling (P[0..M],T[0..N] : tokenstring, minimum_match_length: integer) integer {membandingkan setiap token pada P dan T} {jika ditemukan sederetan token yang bernilai sama dan panjangnya lebih besar dari minimum-match-length, maka token tersebut akan ditandai } {mengembalikan jumlah token yang sudah ditandai} KAMUS length_of_tokens_tiled : integer {jumlah token yang sudah ditandai} maxmatch : integer {search-length} p: integer {posisi token pada pattern string} t: integer {posisi token pada text string} match_list : list of match {List yang berisi maximal-matches} j: integer ALGORITMA length_of_tokens_tiled 0 repeat {mulai fase scanpattern} maxmatch minimum_match_length for p position of first unmarked token in P[0..M] to M do for t position of first unmarked token in T[0..N] to N do j 0 while p+j<m and t+j<n and P[p+j]= T[t+j] and unmarked(p[p+j]) and unmarked(t[t+j]) do j j+1 add match(p,t,j) to match_list if j > maxmatch then maxmatch j {mulai fase markstrings} for each match(p,t,maxmatch) in match_list do if all tokens in match(p,t,maxmatch) are unmarked then for j 0 to maxmatch-1 do mark_token(p[p+j]) mark_token(t[t+j]) length_of_tokens_tiled length_of_tokens_tiled + maxmatch until maxmatch = minimum_match_length length_of_tokens_tiled Kode II-1. Algoritma Greedy String Tiling ([WIS93a,WIS93b]) Tuning Algoritma Greedy String Tiling Untuk mengatasi kompleksitas algoritma GST yang cukup tinggi, dapat diterapkan berbagai teknik tuning untuk menanganinya [WIS93b]. Pada algoritma yang telah dituning ini, kedua buah token string yang dibandingkan dibedakan perlakuannya, masing-masing disebut sebagai pattern string dan text string. Biasanya token string yang dipilih menjadi pattern string adalah token string yang mempunyai jumlah token lebih sedikit. Berikut ini diuraikan beberapa teknik tuning yang diterapkan pada algoritma GST: 1. Pada pattern string, hanya token-token yang belum ditandai saja yang akan dibandingkan. Caranya dengan membuat agar setiap unmarked token (token yang belum ditandai) menunjuk ke unmarked token sebelum dan sesudahnya. Michael

12 II-12 Wise menyarankan struktur data list dengan pointer ganda (double-linked list) untuk menyimpan unmarked tokens tersebut [WIS93b]. 2. Pada pattern string, jika jarak dari posisi indeks saat itu ke tile berikutnya lebih kecil dari minimum-match-length, maka bagian yang belum ditandai pada pattern string mulai dari posisi indeks akan diabaikan beserta tile yang mengikutinya. Posisi indeks akan bergeser ke token pertama yang belum ditandai yang letaknya setelah tile tersebut. 3. Pada text string juga dibuat agar hanya token-token yang belum ditandai saja yang akan dibandingkan. Tapi berbeda dengan pada pattern string, pada kasus ini dibuat agar unmarked token dengan nilai yang sama dihubungkan. Sehingga pada pembandingan, hanya token-token yang bernilai sama saja yang akan dicoba dibandingkan dengan token yang diberikan dari pattern string. Struktur data yang disarankan Michael Wise adalah array of double-linked list [WIS93b]. Elemenelemen array menunjuk ke elemen-elemen pertama double-linked list yang menyimpan kemunculan pertama setiap nilai token yang memungkinkan. 4. Saat mencari maximal-match yang lebih besar atau sama dengan search length (pada Kode II-2 dinyatakan dengan variabel maxmatch), setelah token yang sama ditemukan pada posisi p pada pattern string dan t pada text string, terdapat posisi pembandingan berikutnya yang lebih baik daripada p+1 dan t+1. Posisi tersebut yaitu pada p+maxmatch-1 dan t+maxmatch-1. Caranya yaitu dengan menghitung nilai hash untuk token-token pada pattern string mulai dari posisi p+1 sampai p+maxmatch-1 dan pada text string mulai dari posisi t+1 sampai t+maxmatch-1. Kemudian pembandingan nilai hash dilakukan pada posisi p+maxmatch-1 dan t+maxmatch Jika pembandingan nilai hash pada p+maxmatch-1 dan t+maxmatch-1 bernilai true, pembandingan token per token dilakukan mundur mulai dari p+maxmatch- 1 sampai p+1 (pattern string) dan dari t+maxmatch-1 sampai t+1 (text string), karena kegagalan memasangkan kedua substring seringkali terjadi pada posisi yang jauh dari awal pasangan. Algoritma Greedy String Tiling yang telah di-tuning dalam notasi algoritmik terdapat pada Kode II-2. Algoritma tersebut diadopsi dari pseudocode yang terdapat pada literatur tentang algoritma GST [WIS93a,WIS93b].

13 II-13 function TunedGreedyStringTiling (P[1..M],T[1..N] : tokenstring, minimummatch-length: integer) integer {membandingkan setiap token pada P dan T} {token string P[1..M] merupakan token string yang lebih pendek dibandingkan dengan token string T[1..N]} {jika ditemukan sederetan token yang bernilai sama dan panjangnya lebih besar dari minimum-match-length, maka token tersebut akan ditandai} {mengembalikan jumlah token yang sudah ditandai} KAMUS length_of_tokens_tiled : integer {jumlah token yang sudah ditandai} maxmatch : integer {search-length} p: integer {posisi token pada pattern string} t: integer {posisi token pada text string} match_list : list of match {List yang berisi maximal-matches} j,k : integer ALGORITMA length_of_tokens_tiled 0 repeat {mulai fase scanpattern} for each unmarked(p[p]) in P[0..M] do {tuning nomor 1} if distance from p to next tile minimum_match_length then p position of first unmarked token after next tile {tuning no 2} else maxmatch minimum_match_length for each unmarked(t[t]) in T[0..N] do {tuning nomor 3} if P[p]=T[t] then if p+maxmatch-1<m and t+maxmatch-1<n and hash-value(p[p..p+maxmatch-1])=hash-value(t[t..t+maxmatch-1]) and unmarked(p[p+maxmatch-1]) and unmarked(t[t+maxmatch-1]) then {tuning no 4} for j maxmatch-1 downto 1 {tuning nomor 5} if P[p+j]=T[t+j] then k maxmatch while p+j<m and t+j<n and P[p+k]=T[t+k] and unmarked(p[p+k]) and unmarked(t[t+k]) do k k+1 if k=maxmatch then add match(p,t,k) to match_list else if k > maxmatch then restart match_list, add match(p,t,k) to match_list maxmatch k for each match(p,t,maxmatch) in match_list do if all tokens in match(p,t,maxmatch) are unmarked then for j 0 to maxmatch-1 do marktoken(p[p+j]) marktoken(t[t+j]) length_of_tokens_tiled length_of_tokens_tiled + maxmatch until maxmatch = minimum-match-length length_of_tokens_tiled Kode II-2. Algoritma Greedy String Tiling yang Sudah Di-tuning [WIS93a,WIS93b] Algoritma Running Karp-Rabin Greedy String Tiling Algoritma Running Karp-Rabin Greedy String Tiling pertama kali dipakai pada sistem Neweyes, yaitu sebuah sistem untuk alignment biosequences nukleotida dan asam amino [WIS93a]. Salah satu masalah yang dihadapi oleh program alignment tersebut yaitu menentukan similarity antara dua buah string. Masalah tersebut sama dengan yang dihadapi oleh sistem deteksi plagiarisme, sehingga Michael Wise juga menerapkan algoritma ini pada YAP3 [WIS96]. Algoritma ini merupakan

14 II-14 pengembangan lebih lanjut dari algoritma Greedy String Tiling dengan penerapan algoritma Karp-Rabin pada fase scanpattern. Algoritma Karp-Rabin diajukan oleh Richard M. Karp dan Michael O. Rabin dalam literaturnya yang berjudul Efficient Randomized Pattern-Matching Algorithms [KAR87]. Algoritma tersebut dapat menangani masalah string matching sebagai berikut: Untuk sebuah set pasangan string {(X(i),Y(i))} terdefinisi, jika memungkinkan, tentukan r yang memenuhi X(r)=Y(r). Pada algoritma yang diajukan Karp dan Rabin, suatu nilai fingerprint dihitung untuk setiap string. Nilai fingerprint tersebut lebih pendek dari string yang bersangkutan. Yang kemudian akan dibandingkan bukanlah string itu sendiri, melainkan nilai fingerprint yang telah dihitung. Perhitungan nilai fingerprint untuk pembandingan itulah yang diterapkan pada algoritma Running Karp-Rabin Greedy String Tiling ini. Penerapan algoritma Karp-Rabin pada fase scanpattern algoritma GST dijelaskan berikut ini. Jika P merupakan panjang salah satu substring pada pattern string P, maka nilai hash untuk setiap substring yang panjangnya P pada text string akan dibandingkan dengan nilai hash untuk substring dari pattern P tersebut. Jika kedua nilai hash tersebut identik, maka substring dari pattern P dan substring dari text string tersebut akan dibandingkan per elemen. Untuk lebih detilnya, algoritma Running Karp-Rabin diuraikan per tahap sebagai berikut: 1. Untuk setiap substring dari pattern string yang mempunyai panjang s dan belum ditandai, nilai hash dihitung. Misalnya untuk substring P[p..p+s-1], dengan p antara 1 sampai P -s. Nilai hash juga dibuat untuk setiap substring yang panjangnya s dan belum ditandai pada text string. 2. Sebuah hashtable digunakan untuk menurunkan cost O(n 2 ) pembandingan. Hashtable tersebut menyimpan nilai hash setiap substring pada text string dan posisi token pertama pada setiap substring tersebut. 3. Setiap nilai hash untuk pattern string dibandingkan dengan nilai hash pada text string. Untuk nilai hash yang sama, terdapat kemungkinan adanya kesamaan antara substring yang bersangkutan. Setelah ditemukan nilai hash yang sama, pembandingan per token dilakukan untuk tokens pada posisi berikutnya seperti

15 II-15 pada algoritma GST. Pasangan substring yang sama tersebut juga akan dikonversi menjadi maximal-matches seperti pada algoritma GST. 4. Panjang pasangan yang dicari (disebut sebagai search-length s) dikurangi pada setiap akhir iterasi sampai minimum-match-length dicapai. Algoritma fase scanpattern pada RKR-GST mempunyai sebuah parameter yaitu search-length s. Algoritma RKR-GST untuk fase scanpattern dalam notasi algoritmik bisa dilihat pada Kode II-3. Algoritma tersebut diadopsi dari pseudocode yang terdapat pada literatur tentang algoritma RKR-GST [WIS93a,WIS93b]. function scanpattern (P[0..M],T[0..N] : tokenstring, s: integer) integer {membandingkan setiap token pada P dan T} {token string P[1..M] merupakan token string yang lebih pendek dibandingkan dengan token string T[1..N]} {mencari pasangan substring yang bernilai sama dan panjangnya lebih besar dari search length s} KAMUS p: integer {posisi token pada pattern string} t: integer {posisi token pada text string} maxmatch_list : double-linked list of queues of match {List berisi maximal-match} hashtable : array of integer {menyimpan nilai hash pattern string} k : integer ALGORITMA for each unmarked(t[t]) in T[0..N] do if distance from t to next tile s then t position of first unmarked token after next tile else create the Karp-Rabin hash-value(t[t..t+s-1]) add hash-value(t[t..t+s-1]) to hashtable for each unmarked(p[p]) in P[0..M] do if distance from p to next tile s then p position of first unmarked token after next tile else create the Karp-Rabin hash-value(p[p..p+s-1]) {cek hashtable, cari nilai hash yang sama} for each hashtable entry = hash-value(p[p..p+s-1]) do k s while p+k<m and t+k<n and P[p+k]=T[t+k] and unmarked(p[p+k]) and unmarked(t[t+k]) do k k+1 if k>(2*s) then {maximal-match sangat panjang, tinggalkan scan} {akan di-restart dengan s=k di top-level algorithm} k else add match(p,t,k) to maxmatch_list highest value in maxmatch_list Kode II-3. Pseudocode Algoritma scanpattern(s) pada RKR-GST (diadopsi dari [WIS93b]) Struktur yang digunakan untuk menyimpan maximal-matches adalah sebuah doublelinked-list of queues (lihat Gambar II-2). Maximal-matches yang panjangnya sama disimpan dalam sebuah queue. List of queues diurutkan berdasarkan panjang maximal-matches yang disimpan dengan urutan mengecil.

16 II-16 Gambar II-2. Struktur Data Double Linked-list of Queues yang Dipakai Untuk Menyimpan Maximal-matches pada Algoritma Running Karp-Rabin Greedy String Tiling Salah satu aspek yang penting adalah menentukan nilai yang tepat untuk parameter s yang merupakan search-length. Nilai yang lebih kecil dari setengah panjang P sudah cukup. Alasannya karena maximal-matches yang sangat panjang jarang ditemukan, sehingga secara umum nilai inisialisasi untuk s akan menghasilkan beberapa pass kosong pada scanpattern sampai sebuah match ditemukan. Alasan kedua yaitu jika maximal-match yang panjang (pada [WIS93a, WIS93b] asumsi ukuran maximalmatch yang panjang yaitu lebih besar dari 2*s), penciptaan tile dari string ini akan membutuhkan banyak token dari pattern string dan text string. Karena itu, scan harus dihentikan dan dimulai kembali dengan nilai s yang lebih besar yaitu sama dengan ukuran maximal-match panjang tersebut. Hal ini menunjukkan bahwa nilai s bisa diinisialisasi dengan nilai konstan yang kecil (misalnya s bernilai 20 pada contoh) daripada bergantung pada panjang string. Algoritma untuk fase markstrings sama dengan yang digunakan pada GST yang telah di-tuning (lihat Subbab 2.2.2), namun maximal-match dibaca dari list of queues dan mempunyai parameter search-length s. Semua pasangan yang dihasilkan dari proses hashing akan diuji per elemen sebab kesamaan nilai hash tidak menjamin bahwa substring yang berkorespondensi akan sama. Bisa diamati pada Kode II-3 dan Kode II-4 bahwa pengujian maximal-match ditunda dari fase scanpattern ke markstrings. Hal ini karena sudah diketahui dari hasil pengujian bahwa KR-hashing jarang sekali gagal, sehingga pengujian per komponen akan lebih efisien jika ditempatkan di fase markstrings. Kompleksitas kasus terburuk penggunaan algoritma ini yaitu O(n 3 ) dengan n merupakan panjang string input. Namun telah diuji bahwa kondisi yang dapat menyebabkan kasus terburuk hampir tidak mungkin terjadi [WIS93a]. Dengan minimum-match-length yang bernilai 3, kompleksitas algoritma yang dihitung pada pengujian tersebut yaitu O(n 0.90 ), hampir linier. Secara umum, estimasi kompleksitas algoritma yang sering muncul pada prakteknya adalah antara O(n) sampai O(n 2 ).

17 II-17 procedure markstrings (P[0..M],T[0..N] : tokenstring, s: integer) {membandingkan setiap token pada maximal-matches yang telah didapatkan pada fase scanpattern} {token string P[1..M] merupakan token string yang lebih pendek dibandingkan dengan token string T[1..N]} KAMUS p: integer {posisi token pada pattern string} t: integer {posisi token pada text string} maxmatch_list : double-linked list of queues of match {List berisi maximal-match} L: integer {ukuran maximal-match pada queue di iterasi tersebut} ALGORITMA starting with the first queue in maxmatch_list, while there is a non-empty queue do if the current queue is empty then drop to next queue {maximal-match dengan ukuran lebih kecil} else if all tokens in match(p,t,l) are unmarked then if P[p+j]=T[t+j] for all j 0 to s-1 then for j 0 to L-1 do mark_token(p[p+j]) mark_token(t[t+j]) length_of_tokens_tiled length_of_tokens_tiled + L else if (L length of marked tokens in match(p,t,l)) s then add unmarked portion to maxmatch_list delete match(p,t,l) from queue Kode II-4. Fungsi markstrings(s) pada Algoritma RKR-GST dengan s Merupakan Search-length [WIS93a,WIS93b] procedure RunningKarpRabinGreedyStringTiling(P[0..M],T[0..N] : tokenstring, minimum_match_length : integer) {top-level algorithm untuk Running Karp-Rabin Greedy String Tiling} {token string P[1..M] merupakan token string yang lebih pendek dibandingkan dengan token string T[1..N]} {mencari substring yang bernilai sama dan panjangnya lebih besar dari minimum_match_length} KAMUS s : integer {search-length} stop : boolean Lmax : integer ALGORITMA s 20 {inisialisasi search-length} stop false repeat Lmax scanpattern(s) {the size of largest maximal-matches} {found in this iteration} if Lmax>(2*s) then {Very long string} s Lmax {don t mark tiles but try again with larger s} else markstrings(s) {Create tiles from matches takes from list of queues} if s>(2*minimum_match_length) then s s div 2 else if s > minimum_match_length then s minimum_match_length else stop true until stop Kode II-5. Top-level Algorithm untuk RKR-GST [WIS93a,WIS93b]

18 II-18 Minimum-match-length merupakan parameter yang dapat merepresentasikan sensitivitas algoritma ini. Penjelasan teoritis mengenai parameter minimum-matchlength dapat dilihat di Subbab mengenai algoritma Greedy String Tiling. Sedangkan analisis mengenai penggunaan parameter minimum-match-length untuk mewakili tingkat sensitivitas deteksi akan dijelaskan pada Subbab Perangkat Lunak Pendeteksi Plagiarisme Otomatis pada Source Code Telah dikembangkan banyak perangkat lunak pendeteksi plagiarisme yang menggunakan pendekatan structure-based. Berikut ini dipaparkan mengenai beberapa perangkat lunak pendeteksi plagiarisme yang paling sering dijadikan referensi untuk penelitian mengenai deteksi plagiarisme, yaitu Plague, YAP dan JPlag. Source code YAP tersedia sebagai open source dan dapat dikembangkan untuk kepentingan akademik Plague Sistem Plague merupakan pengembangan dari pendekatan berbasis struktur dan menggunakan detil struktur program untuk proses pembandingan source code [CLO00]. Plague bekerja dalam 3 tahap : 1. Sebuah sequence of tokens dan list structure metrics diproduksi untuk setiap file. Komponen structure metrics merepresentasikan iterasi, statement selection, dan statement blocks pada kode program. Sequence of tokens dan list structure metrics tersebut kemudian dibentuk menjadi structure profile yang merupakan ringkasan dari struktur di program. 2. Structure profile dibandingkan sebanyak O(n 2 ) fase. Pasangan tetangga terdekat ditentukan menggunakan kombinasi fungsi yang spesifik tergantung pada bahasa pemrograman target. Diharapkan pada akhir fase ini sebagian besar structure profile tidak terpasangkan. Structure profile yang berpasangan akan menjadi input pada tahap ketiga. 3. Sequence token dibandingkan menggunakan variant dari algoritma longest common subsequences, yaitu algoritma Heckel (lihat Subbab ).

19 II-19 Hasil deteksi plagiarisme yang dihasilkan Plague cukup akurat, namun ada beberapa kekurangan yang dimiliki sebagai berikut : 1. Untuk menulis versi Plague baru agar dapat menangani bahasa pemrograman lain memerlukan usaha besar dan membutuhkan waktu yang tidak singkat, diawali dengan pembangunan parser untuk bahasa tujuan dan pemilihan distance metrics untuk penggunaan pada fase kedua. 2. Hasil proses deteksi dikembalikan dalam bentuk dua buah list yang diurutkan oleh indices H dan HT yang perlu interpreter. Cara pembacaan ada di manual Plague, namun hal ini menyatakan bahwa hasil tidak bisa dilihat begitu saja oleh pengguna tetapi harus ada pemrosesan lebih lanjut. 3. Ada bagian dari Plague yang ditulis dalam bahasa Pascal, padahal implementasi C yang berkualitas baik lebih umum sementara implementasi Pascal yang berkualitas baik sangatlah langka. Selain itu Plague juga bergantung pada beberapa utility UNIX dan GIVE sehingga menimbulkan masalah portability YAP YAP (Yet Another Plague) [WIS92,WIS96] dibangun berdasarkan sistem deteksi plagiarisme Plague. Michael Wise membuat versi originalnya (YAP1) pada tahun 1992 yang kemudian dioptimasi menjadi YAP2. Pada tahun 1996 Wise memproduksi versi finalnya yaitu YAP3 yang juga bisa mendeteksi plagiarisme pada teks. Tujuan pembuatan YAP adalah membuat suatu sistem deteksi plagiarisme dengan fondasi Plague dan mengatasi masalah-masalah yang dihadapi pengguna ketika menggunakan Plague. Plague dijadikan sebagai fondasi karena perangkat lunak tersebut telah dibuktikan lebih sukses daripada teknik-teknik attribute-counting dan structure-based sebelumnya. YAP dibuat agar sederhana dan portable walaupun mengorbankan sedikit akurasi dan kecepatan Plague Persamaan dan Perbedaan Ketiga Versi YAP Ketiga versi YAP mempunyai dua fase dalam operasinya : 1. Fase generation : sebuah file token dihasilkan untuk setiap source code yang dikumpulkan. 2. Fase pembandingan : pasangan file token dibandingkan.

20 II-20 Token merepresentasikan elemen signifikan dalam bahasa pemrograman yang dipakai, misalnya struktur bahasa atau fungsi built-in. Identifier dan semua konstanta diabaikan. File token umumnya berukuran kecil, yaitu token untuk tugas kecil, dan token untuk tugas besar. Kesamaan ketiga versi YAP yang telah dikembangkan yaitu pada proses tokenisasi di fase pertama. Proses tokenisasi punya struktur umum sebagai berikut: 1. Preprocess submisi untuk menghilangkan komentar dan print-strings dan translasi huruf besar ke huruf kecil, menghilangkan huruf yang tidak ditemukan di identifier legal, dan membentuk list of token primitif. 2. Mengganti sinonim ke bentuk umum. Contohnya pada LISP, second dan cadr diganti menjadi car dan cdr. Sementara untuk bahasa pemrograman C, strncmp diganti ke strcmp. 3. Mengidentifikasi blok fungsi atau prosedur. Jika telah mengidentifikasi blok fungsi, cetak blok fungsi sesuai urutan pemanggilan. Bentuk "macro-expansion" digunakan, tapi sebuah blok hanya di-expand sekali untuk mencegah agar jumlah token tidak meledak. Pemanggilan subsequent ke fungsi yang sudah di-expand diganti dengan beberapa token yang merepresentasi fungsi itu. 4. Kenali dan cetak token yang merepresentasi bagian dari bahasa target dari vocabulary yang diberikan. Perbedaan ketiga versi YAP yang telah dikembangkan terletak pada fase kedua, yaitu algoritma yang digunakan fase pembandingan setiap token strings. Selain itu ada perbedaan pada teknik implementasi termasuk bahasa pemrograman yang digunakan YAP1 Pada YAP1, fase generation atau tokenisasi untuk bahasa yang berbeda dilakukan oleh program YAP yang berbeda agar sederhana. Beberapa hal khusus yang dilakukan pada fase tokenisasi YAP1 yaitu [WIS92]: 1. Preprocessing submisi dilakukan menggunakan utility UNIX tr dan sed. Dalam C_YAP, preprocessor cpp digunakan. 2. Untuk mengidentifikasi blok fungsi atau prosedur, tidak ada hal khusus yang harus dilakukan pada LISP_YAP. Pada C_YAP, UNIX utility ctags digunakan bersama awk.

21 II Penggantian pemanggilan subsequent ke fungsi yang sudah di-expand dengan beberapa token yang merepresentasi fungsi dilakukan dengan suatu subprogram YAP yang berukuran kecil (208 baris), sehingga program mudah dikustomisasi agar dapat menangani bahasa pemrograman lain. 4. Function calls yang diidentifikasi pada tahap sebelumnya diganti menjadi token FUN. Identifier lain diabaikan. Bagian-bagian dari bahasa yang dipilih tidak harus ada pada vocabulary final. not pada LISP dan! pada C diabaikan karena mudah untuk mengubah kondisi if menggunakan negasi. Proses ini dilakukan menggunakan utility awk. Setelah itu, sebuah script (Bourne) shell digunakan untuk menggabungkan seluruh bagian menjadi input tahap pembandingan. 5. Tahap pembandingan merupakan tahap yang sama untuk semua implementasi YAP1. Utility UNIX find digunakan untuk mengumpulkan file-file token yang sudah disiapkan sebelumnya. Dengan mengabaikan duplikasi test, setiap file token dibandingkan dengan file lain menggunakan sdiff. Hasil dari setiap analisis sdiff merupakan nilai antara 0 sampai 100 yang merepresentasikan nilai antara "no-match" sampai "complete-match". Nilai ini dihasilkan dari formula : Match = (same-diff) / minfile - (maxfile-minfile) / maxfile; PercentMatch = max(0,match) x 100; Keterangan : a. Fungsi max mengembalikan nilai maksimum dari kedua argumen yang diterima sebagai input. b. maxfile merupakan file yang berukuran lebih besar di antara kedua file, sementara minfile merupakan file yang berukuran lebih kecil. c. same merupakan jumlah token yang sama pada kedua file masukan. d. diff merupakan jumlah perbedaan baris pada blok token yang berpasangan. e. Nilai percentmatch disimpan di sebuah file misalnya YAP.numbers. Jika nilai untuk sebuah pasangan melebihi nilai yang dispesifikasi oleh pengguna pada command line, pasangan dan nilai percentmatch disimpan di file kedua, yaitu YAP.summary. Akhirnya, ketika semua pembandingan telah dibuat, YAP.summary diurutkan menurun berdasarkan percentmatch kemudian sebuah mean dan standar deviasi dikalkukasi dan ditambahkan ke file. Untuk mengukur similarity antara kedua string, YAP1 menggunakan algoritma Longest Common Subsequences (LCS) yang tujuannya menemukan sequence token

22 II-22 terpanjang yang sama pada kedua string. Sebuah subsequence dari string S dibentuk dengan mengambil tokens secara berurutan dengan mengabaikan tokens sejumlah nol atau lebih sebelum mengambil token berikutnya. Panjang LCS untuk string yang identik sama dengan ukuran sebuah string. Selain membutuhkan waktu yang lama untuk melakukan deteksi, masalah utama YAP adalah pada algoritma LCS yang dijelaskan di atas. Algoritma tersebut mempunyai masalah karena urutan token berpengaruh pada algoritma tersebut. Substring yang diubah urutannya akan dianggap sebagai kumpulan transposisi individual dan bukan perpindahan blok tunggal. Algoritma tersebut hanya dapat berfungsi dengan baik untuk selisih satu token saja dengan mengabaikan elemen tertentu YAP2 YAP2 ditulis dalam bahasa Perl dan menggunakan program C custom bernama Heckel [CLO00, WIS92]. Program tersebut mengimplementasikan algoritma Heckel, yang merupakan sebuah algoritma yang diusulkan oleh Paul Heckel untuk mengatasi masalah yang dihadapi algoritma LCS yang dipakai pada YAP1. Algoritma Heckel didesain untuk menangani file teks dan dikembangkan untuk mengatasi masalah algoritma Longest Common Subsequences [WIS92]. Walaupun algoritma Heckel ini membutuhkan beberapa pass, kompleksitas keseluruhannya linier. Selain itu, tidak seperti algoritma LCS pada YAP1, algoritma Heckel dapat menangani perubahan urutan segmen kode pada program. Namun algoritma Heckel ini juga mempunyai kelemahan, yaitu terkadang substring yang lebih panjang tidak diutamakan. Seringkali substring-substring identik yang ditemukan algoritma ini merupakan substringsubstring pendek yang letaknya tersebar, namun sebenarnya tidak lebih berpengaruh dibandingkan substring panjang yang tidak diutamakan YAP3 Seperti versi-versi sebelumnya, YAP3 juga bekerja melalui 2 fase. Fase generation atau tokenisasi tidak mengalami perubahan besar walaupun tokenizer bekerja dengan lebih baik daripada tokenizer pada versi-versi sebelumnya. Selain itu, token di YAP3 bukan merupakan string melainkan numerik [WIS96]. YAP3 menggunakan algoritma Running Karp-Rabin Greedy String Tiling pada fase pembandingan (lihat Subbab 2.2.3).

23 II JPlag JPlag dibangun dan di-maintain oleh Guido Malpohl dari Department of Informatics di Universitas Karlsruhe [LUT00]. Sistem ini dapat mendeteksi kesamaan antara source code yang ditulis dalam bahasa pemrograman Java, C, C++ dan Scheme. JPlag tersedia sebagai web service dan dapat digunakan secara gratis. Program meminta input dari pengguna berupa direktori yang berisi kumpulan program yang akan dibandingkan. Direktori tersebut secara fisik terdiri dari subdirektori-subdirektori yang setiap subdirektorinya dianggap sebagai sebuah program. Setiap subdirektori bisa berisi beberapa file source code sehingga secara keseluruhan kumpulan source code tersebut dianggap sebagai sebuah program. Setelah deteksi dilakukan, hasilnya akan ditampilkan sebagai kumpulan file HTML yang bisa dibuka menggunakan browser standar. Salah satu aspek menjadi kelebihan JPlag adalah user interface untuk menampilkan hasil deteksi. Biasanya sistem-sistem deteksi yang dikembangkan sebelum JPlag hanya menggunakan suatu nilai similarity pasangan program untuk menyatakan hasil deteksi. Padahal hasil dari sistem deteksi tidak bisa langsung digunakan untuk menentukan apakah suatu pekerjaan merupakan hasil praktek plagiarisme atau bukan, misalnya pada kasus nilai similarity sama dengan 40% atau jika soal yang cukup mudah sehingga banyak submisi yang mirip satu sama lain. Kasus-kasus sejenis itu masih membutuhkan analisis dari pemeriksa untuk penentuan keputusan akhir. Karena itulah, JPlag menyediakan user interface yang dapat menampilkan hasil agar dapat dianalisis dengan mudah. Statistik deteksi, distribusi similarity dan pasanganpasangan program yang diduga merupakan hasil plagiarisme ditampilkan di halaman utama. Selain itu, source code pasangan program juga bisa ditampilkan bersebelahan pada sebuah halaman HTML agar pengguna mudah untuk membandingkan ketika menganalisis. Pada halaman utama, terdapat statistik deteksi yang terdiri dari jumlah submisi, bahasa pemrograman, tanggal, dan berbagai parameter lainnya. Kemudian terdapat tabel yang berisi distribusi similarity dengan selisih 10% dan sebuah histogram yang menampilkan nilai-nilai similarity untuk semua pasangan program.

24 II-24 Gambar II-3. Bagian Atas Contoh Halaman yang Menampilkan Hasil Deteksi JPlag [LUT00] Pengguna dapat memilih pasangan kode program untuk ditampilkan bersebelahan pada sebuah halaman HTML. Untuk memudahkan pembandingan secara manual, segmen kode yang dianggap serupa pada kedua program ditampilkan dengan warna yang sama. Pada masing-masing program, di samping setiap segmen kode terdapat sebuah panah. Jika pengguna klik panah tersebut maka display program pasangannya akan berubah atau lompat ke segmen kode yang berkorespondensi. Dengan fasilitasfasilitas tersebut maka pengguna dengan mudah dapat menganalisis setiap pasangan program dan juga dapat melihat plagiarisme parsial. User interface sistem deteksi plagiarisme seperti ini baru pertama kali dimiliki oleh JPlag.

25 II-25 Gambar II-4. Contoh Bagian dari Halaman yang Menampilkan Pasangan Program pada Tampilan Hasil Deteksi JPlag [LUT00] Setelah menerima input, JPlag melalui dua fase untuk melakukan deteksi plagiarisme. Pada fase pertama, semua program di-parse atau di-scan terlebih dahulu kemudian dikonversi ke token string. Bagian JPlag yang berfungsi untuk melaksanakan tugas ini merupakan satu-satunya bagian yang language-dependent. Untuk mendeteksi plagiarisme dalam source code berbahasa pemrograman C atau C++, sistem hanya membutuhkan scanner. Untuk Java dan Scheme, digunakan parser yang mempunyai keuntungan lebih daripada scanner karena lebih banyak informasi semantik yang dapat direpresentasi pada token string. Token dipilih sedemikian rupa agar merepresentasikan karakteristik inti program yang sulit diubah oleh plagiator. Sebagai contoh, whitespace dan komentar selalu diabaikan karena merupakan bagian-bagian yang paling mudah dipakai untuk menyembunyikan praktek plagiarisme. Jenis-jenis token yang dihasilkan tergantung pada jenis bahasa

26 II-26 pemrograman pada kumpulan source code input. Setiap token akan dianggap sebagai karakter tunggal pada saat pembandingan. Gambar II-5. Contoh Source Code Java dan Kumpulan Token yang Mewakili Setiap Barisnya pada JPlag (diambil dari [LUT00]) Pada fase kedua, token string hasil fase pertama dibandingkan secara berpasangan kemudian similarity setiap pasangan dihitung. Algoritma yang dipakai untuk membandingkan setiap pasangan program yaitu algoritma Karp-Rabin Greedy String Tiling yang diperkenalkan oleh Michael Wise (lihat Subbab 2.2.3).

Deteksi Otomatis Plagiarisme Source Code

Deteksi Otomatis Plagiarisme Source Code Deteksi Otomatis Plagiarisme Source Code LAPORAN TUGAS AKHIR Disusun sebagai syarat kelulusan tingkat sarjana oleh : CYNTHIA KUSTANTO / NIM. 13503066 PROGRAM STUDI TEKNIK INFORMATIKA SEKOLAH TEKNIK ELEKTRO

Lebih terperinci

BAB III ANALISIS. upload tugas pemrograman. komunikasi. pemberian tugas. grading. deteksi plagiarisme. Milestone

BAB III ANALISIS. upload tugas pemrograman. komunikasi. pemberian tugas. grading. deteksi plagiarisme. Milestone BAB III ANALISIS Untuk membangun perangkat lunak yang mampu mendeteksi kasus plagiarisme pada sekumpulan source code dengan menggunakan metode berbasis struktur, dilakukan analisis terhadap Learning Management

Lebih terperinci

BAB V IMPLEMENTASI DAN PENGUJIAN

BAB V IMPLEMENTASI DAN PENGUJIAN BAB V IMPLEMENTASI DAN PENGUJIAN Berdasarkan analisis pada BAB III dan perancangan pada BAB IV, telah dikembangkan detektor plagiarisme bernama Deimos untuk mendeteksi plagiarisme source code di kelas

Lebih terperinci

PERTEMUAN 2 ALGORITMA & PEMROGRAMAN

PERTEMUAN 2 ALGORITMA & PEMROGRAMAN PERTEMUAN 2 ALGORITMA & PEMROGRAMAN POKOK BAHASAN 1. Pendahuluan 2. Tahapan Pembangunan Program 3. Pengenalan Algoritma 4. Cara Menyajikan Algoritma 5. Data Program 6. Elemen-Elemen Program PENDAHULUAN

Lebih terperinci

PHP (HYPERTEXT PREPROCESSOR)

PHP (HYPERTEXT PREPROCESSOR) LAPORAN PRAKTIKUM MODUL 4 PEMROGRAMAN WEB PHP (HYPERTEXT PREPROCESSOR) Disusun Oleh: Deny Kurniawan Novianto (130533608222) PTI OFF B UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO PROGRAM

Lebih terperinci

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 16

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 16 Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 16 4. ANALISIS LEKSIKAL Struktur Kompiler Analisis Leksikal Apa itu? Masukan bagi sebuah compiler/interpreter adalah program sumber yang strukturnya

Lebih terperinci

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR 1 PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR Siti Mukaromah, S.Kom TEKNIK PENYAJIAN ALGORITMA Teknik Tulisan Structure English Pseudocode Teknik Gambar Structure Chart HIPO Flowchart 2 PSEUDOCODE Kode

Lebih terperinci

Analisis Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore dalam Proses Pencarian String

Analisis Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore dalam Proses Pencarian String Analisis Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore dalam Proses Pencarian String Rama Aulia Program Studi Teknik Informatika, Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung

Lebih terperinci

MODUL PRAKTIKUM PERCABANGAN DAN PENGULANGAN

MODUL PRAKTIKUM PERCABANGAN DAN PENGULANGAN PERCABANGAN DAN PENGULANGAN Pada BAB ini akan membahas tentang PERCABANGAN dan PERULANGAN. PERCABANGAN : a) IF THEN b) CASE OF PENGULANGAN: a) REPEAT N TIMES b) REPEAT UNTIL c) WHILE DO d) ITERATE STOP

Lebih terperinci

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK BAB IV ANALISIS DAN PERANCANGAN PERANGKAT LUNAK Bab ini membahas analisis perancangan perangkat lunak (diberi nama c2p) dari segi struktur data dan analisis aliran data. Hal-hal yang dibahas diantaranya

Lebih terperinci

Algoritma dan Struktur Data

Algoritma dan Struktur Data Algoritma dan Struktur Data Program Program: sederetan perintah-perintah yang harus dikerjakan oleh komputer untuk menyelesaikan masalah. 3 level bahasa pemrograman: 1. Bahasa tingkat rendah 2. Bahasa

Lebih terperinci

BAB 1 PENDAHULUAN. Universitas Kristen Maranatha

BAB 1 PENDAHULUAN. Universitas Kristen Maranatha BAB 1 PENDAHULUAN 1.1 Latar Belakang Masalah Pengajaran mata kuliah pemrograman biasanya diikuti oleh banyak mahasiswa. Dengan semakin besarnya jumlah mahasiswa dan banyaknya tugas yang harus diperiksa,

Lebih terperinci

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP Ahmad Ayyub Mustofa Jurusan Teknik Informatika ITB, Bandung 40132, email: rekka_zan@students.itb.ac.id Abstraksi Bahasa pemrograman

Lebih terperinci

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 1

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 1 1. PENDAHULUAN TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 1 Arti Kata Teknik Kompilasi Teknik adalah suatu Metode atau Cara Kompilasi adalah suatu Proses mengabungkan serta

Lebih terperinci

Konstruksi Dasar Algoritma

Konstruksi Dasar Algoritma Konstruksi Dasar Algoritma ALGORITMA DAN PEMROGRAMAN [IF6110202] Yudha Saintika, S.T., M.T.I. Sub-Capaian Pembelajaran MK Pendahuluan Instruksi dan Aksi Algoritma merupakan deskripsi urutan pelaksanaan

Lebih terperinci

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN I. Elemen-Elemen Dalam Bahasa Pemrograman Berikut adalah elemen-elemen pada bahasa pemrograman: Berikut adalah element-element pada bahasa pemrograman: 1. Aturan

Lebih terperinci

BAB 2 TINJAUAN PUSTAKA

BAB 2 TINJAUAN PUSTAKA BAB 2 TINJAUAN PUSTAKA Pada bab ini, akan dibahas landasan teori mengenai pendeteksian kemiripan dokumen teks yang mengkhususkan pada pengertian dari keaslian dokumen, plagiarisme, kemiripan dokumen, dan

Lebih terperinci

Aplikasi Rekursif dalam Analisis Sintaks Program

Aplikasi Rekursif dalam Analisis Sintaks Program Aplikasi Rekursif dalam Analisis Sintaks Program Albertus Kelvin / 13514100 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132,

Lebih terperinci

BAB I PENDAHULUAN. berinovasi menciptakan suatu karya yang original. Dalam hal ini tindakan negatif

BAB I PENDAHULUAN. berinovasi menciptakan suatu karya yang original. Dalam hal ini tindakan negatif 1 BAB I PENDAHULUAN I.1 Latar Belakang Pada dasarnya manusia menginginkan kemudahan Dalam segala hal. Sifat tersebut akan memicu tindakan negatif apabila dilatarbelakangi oleh motivasi untuk berbuat curang

Lebih terperinci

Algoritma Pemrograman

Algoritma Pemrograman Algoritma Pemrograman Pertemuan Ke-2 (Teks Algoritma) Noor Ifada noor.ifada@if.trunojoyo.ac.id S1 Teknik Informatika-Unijoyo 1 Sub Pokok Bahasan Pendahuluan Judul Algoritma Deklarasi Deskripsi Translasi

Lebih terperinci

Pengantar Common Gateway Interface (CGI) dan Perl. - Konsep CGI dan Perl - Lingkungan variabel di Perl - Metode POST dan GET

Pengantar Common Gateway Interface (CGI) dan Perl. - Konsep CGI dan Perl - Lingkungan variabel di Perl - Metode POST dan GET Pengantar Common Gateway Interface (CGI) dan Perl - Konsep CGI dan Perl - Lingkungan variabel di Perl - Metode POST dan GET 1 Konsep CGI dan Perl Definisi CGI adalah suatu bentuk komunikasi dimana client

Lebih terperinci

BAB VII DASAR-DASAR PHP

BAB VII DASAR-DASAR PHP BAB VII DASAR-DASAR PHP A. KOMPETENSI DASAR Memahami struktur dasar dokumen PHP. Mampu membuat dokumen PHP yang baik dan benar. Mampu memanfaatkan elemen-elemen dasar untuk mengolah dan menampilkan informasi.

Lebih terperinci

STRUKTUR DASAR ALGORITMA

STRUKTUR DASAR ALGORITMA STRUKTUR DASAR ALGORITMA Pertemuan 5 Muhamad Haikal, S.Kom., MT Struktur Dasar Algoritma 1. Struktur Sequence (Runtunan) 2. Struktur Selection (Pemilihan) 3. Struktur Repetition (Perulangan) Struktur Sequence

Lebih terperinci

Aplikasi Algoritma Pencarian String Dalam Sistem Pembayaran Parkir

Aplikasi Algoritma Pencarian String Dalam Sistem Pembayaran Parkir Aplikasi Algoritma Pencarian String Dalam Sistem Pembayaran Parkir Andi Kurniawan Dwi P - 13508028 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl.

Lebih terperinci

ALGORITMA (KOMPUTER) : ATURAN PENULISAN DAN STRUKTUR DASARNYA

ALGORITMA (KOMPUTER) : ATURAN PENULISAN DAN STRUKTUR DASARNYA ALGORITMA (KOMPUTER) : ATURAN PENULISAN DAN STRUKTUR DASARNYA I. Pendahuluan Algoritma dapat ditulis dalam notasi apapun asalkan mudah dimengerti dan dipahami. Algoritma dapat ditulis dalam bahasa natural/bahasa

Lebih terperinci

JAVA BASIC PROGRAMMING Joobshet

JAVA BASIC PROGRAMMING Joobshet JAVA BASIC PROGRAMMING Joobshet 1. KOMPETENSI Mahasiswa dapat memahami jenis jenis tipe data Mahasiswa dapat memahami jenis jenis variable Mahasiswa dapat memahami jenis jenis seleksi kondisi Mahasiswa

Lebih terperinci

ABSTRAK. vi Universitas Kristen Maranatha

ABSTRAK. vi Universitas Kristen Maranatha ABSTRAK Praktikum pemograman dasar bahasa C merupakan praktikum yang wajib diikuti oleh seluruh mahasiswa. Dalam pengerjaan praktikum, mahasiswa mencari sebuah penyelesaian masalah yang diberikan oleh

Lebih terperinci

Struktur Data. PDE - Struktur Data 1

Struktur Data. PDE - Struktur Data 1 Struktur Data Copyright@Ihsan Jatnika PDE - Struktur Data 1 Objektif Mengetahui maksud struktur data dan menjelaskan penggunaannya dalam pemrograman Mengetahui operasi yang terkait dengan struktur data

Lebih terperinci

Implementasi Pencocokan String Tidak Eksak dengan Algoritma Program Dinamis

Implementasi Pencocokan String Tidak Eksak dengan Algoritma Program Dinamis Implementasi Pencocokan String Tidak Eksak dengan Algoritma Program Dinamis Samudra Harapan Bekti 13508075 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung,

Lebih terperinci

BAB I PENDAHULUAN I.1. Latar Belakang [1] [2] [3] [4] [5]

BAB I PENDAHULUAN I.1. Latar Belakang [1] [2] [3] [4] [5] BAB I PENDAHULUAN I.1. Latar Belakang Algoritma adalah prosedur komputasi yang terdefinisi dengan baik yang menggunakan beberapa nilai sebagai masukan dan menghasilkan beberapa nilai yang disebut keluaran.

Lebih terperinci

Pemrograman Prosedural FUNGSI (Subprogram) Tim Pengajar KU1071 Sem

Pemrograman Prosedural FUNGSI (Subprogram) Tim Pengajar KU1071 Sem Pemrograman Prosedural FUNGSI (Subprogram) Tim Pengajar KU1071 Sem. 1 2009-2010 1 Tujuan Perkuliahan Mahasiswa memahami makna dan kegunaan fungsi sebagai salah satu sub program Mahasiswa dapat menggunakan

Lebih terperinci

BAB 3 ANALISIS DAN PERANCANGAN. menentukan dan mengungkapkan kebutuhan sistem. Kebutuhan sistem terbagi menjadi

BAB 3 ANALISIS DAN PERANCANGAN. menentukan dan mengungkapkan kebutuhan sistem. Kebutuhan sistem terbagi menjadi BAB 3 ANALISIS DAN PERANCANGAN 3. Analisis Kebutuhan Sistem Hal pertama yang perlu dilakukan dalam analisis kebutuhan sistem adalah menentukan dan mengungkapkan kebutuhan sistem. Kebutuhan sistem terbagi

Lebih terperinci

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

BAB 3 ANALISIS DAN PERANCANGAN SISTEM BAB 3 ANALISIS DAN PERANCANGAN SISTEM 3.1. Analisis Sistem Analisis sistem dapat didefinisikan sebagai penguraian dari suatu sistem informasi yang utuh ke dalam bagian-bagian komponennya dengan maksud

Lebih terperinci

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2 VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI Tujuan Pembelajaran 1. Siswa mampu memahami penulisan Tipe data, variabel dan konstanta dalam pascal 2. Siswa mampu menerapkan penggunaan Tipe data,

Lebih terperinci

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem PENGULANGAN Bagian 1 : Notasi Tim Pengajar KU1071 Sem. 1 2009-2010 1 Tujuan Mahasiswa memahami jenis-jenis pengulangan dan penggunaannya serta memahami elemenelemen dalam pengulangan. Mahasiswa dapat menggunakan

Lebih terperinci

Penerapan Algoritma Boyer Moore-Dynamic Programming untuk Layanan Auto-Complete dan Auto-Correct

Penerapan Algoritma Boyer Moore-Dynamic Programming untuk Layanan Auto-Complete dan Auto-Correct Penerapan Algoritma Boyer Moore-Dynamic Programming untuk Layanan Auto-Complete dan Auto-Correct Christabella Chiquita B. - 13509050 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika

Lebih terperinci

PHP mendukung komentar yang digunakan pada C, C++ dan Shell Unix. Sebagai contoh:

PHP mendukung komentar yang digunakan pada C, C++ dan Shell Unix. Sebagai contoh: Perintah Dasar Tag PHP Ketika PHP membaca suatu file, proses akan berlangsung hingga ditemukan tag khusus yang berfungsi sebagai tanda dimulainya interpretasi teks tersebut sebagai kode PHP. PHP akan menjalankan

Lebih terperinci

LATIHAN UTS Tim Pengajar KU1071 Sem

LATIHAN UTS Tim Pengajar KU1071 Sem LATIHAN UTS Tim Pengajar KU1071 Sem. 1 2010-2011 Soal 1 Buatlah sebuah program prosedural dalam notasi algoritmik yang akan membaca sebuah variabel Grs yang bertipe Garis. Informasi yang terkandung dalam

Lebih terperinci

PENGUJIAN PERANGKAT LUNAK

PENGUJIAN PERANGKAT LUNAK PENGUJIAN PERANGKAT LUNAK (DPH2C2) PROGRAM STUDI D3 MANAJEMEN INFORMATIKA UNIVERSITAS TELKOM SEMESTER GENAP TAHUN AKADEMIK 2016-2017 PERTEMUAN 5 MATERI : WHITE BOX TESTING BAGIAN 1 Hanya digunakan di lingkungan

Lebih terperinci

Alat bantu (tools) dalam pembuatan parser/ analisis sintaksis. Menggunakan simbol persegi panjang untuk non terminal

Alat bantu (tools) dalam pembuatan parser/ analisis sintaksis. Menggunakan simbol persegi panjang untuk non terminal Diagram Syntax Alat bantu (tools) dalam pembuatan parser/ analisis sintaksis Menggunakan simbol persegi panjang untuk non terminal Lingkaran untuk simbol terminal Misalnya E T T+E T-E E T + - BNF:

Lebih terperinci

Bahasa Pemrograman 2.

Bahasa Pemrograman 2. Bahasa Pemrograman 2 Pengenalan JAVA 1 anton@ukdw.ac.id Instalasi JDK Download JDK for free Instalasi biasa Set PATH dan JAVA_HOME set PATH=%PATH%; set JAVA_HOME=

Lebih terperinci

Array (Tabel) Tim Pengajar KU1071 Sem /11/3 TW/KU1071 1

Array (Tabel) Tim Pengajar KU1071 Sem /11/3 TW/KU1071 1 Array (Tabel) Tim Pengajar KU1071 Sem. 1 2009-2010 2009/11/3 TW/KU1071 1 Tujuan Perkuliahan Mahasiswa memahami makna dan kegunaan array (tabel) Mahasiswa dapat menggunakan notasi pendefinisian dan pengacuan

Lebih terperinci

TUGAS MATA KULIAH TEKNIK KOMPILASI

TUGAS MATA KULIAH TEKNIK KOMPILASI TUGAS MATA KULIAH TEKNIK KOMPILASI TEKNIK OPTIMASI DAN TABEL INFORMASI DOSEN : HARUN MUKHTAR,M.KOM Nama : Walter Sitio NIM : 080403019 Jurusan : Teknik Infomatika UNIVERSITAS MUHAMMAHDIYAH RIAU Teknik

Lebih terperinci

BAB I PENDAHULUAN 1.1 Latar Belakang

BAB I PENDAHULUAN 1.1 Latar Belakang BAB I PENDAHULUAN 1.1 Latar Belakang Di dalam dunia pemrograman komputer, kode program (source code) adalah kumpulan deklarasi atau pernyataan dari bahasa pemrograman computer yang di tulis dan bisa dibaca

Lebih terperinci

STRUKTUR DASAR PHP ASUMSI 02/10/2014

STRUKTUR DASAR PHP ASUMSI 02/10/2014 STRUKTUR DASAR PHP 1 ASUMSI Anda telah mengenal dengan cukup baik komputer Anda, dan juga bisa mengoperasikannya. Jadi Anda seharusnya sudah mengerti perbedaan file dan direktori, bagaimana menyimpan file

Lebih terperinci

BAB 6 METODE PENGUJIAN

BAB 6 METODE PENGUJIAN BAB 6 METODE PENGUJIAN Metode pengujian adalah cara atau teknik untuk menguji perangkat lunak, mempunyai mekanisme untuk menentukan data uji yang dapat menguji perangkat lunak secara lengkap dan mempunyai

Lebih terperinci

Algoritma dan Struktur Data

Algoritma dan Struktur Data Algoritma dan Struktur Data Algoritma Pemrograman Bekti Wulandari, M.Pd Kelas B TE 2014 Program Program: sederetan perintah-perintah yang harus dikerjakan oleh komputer untuk menyelesaikan masalah. 3 level

Lebih terperinci

PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL

PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL PENGEMBANGAN PROTOTIPE APLIKASI KONVERSI KODE DARI BAHASA C KE PASCAL LAPORAN TUGAS AKHIR Disusun Sebagai Syarat Kelulusan Tingkat Sarjana oleh : Ipam Fuaddina Adam / 13502079 PROGRAM STUDI TEKNIK INFORMATIKA

Lebih terperinci

Algoritma Pemrograman [BS204]

Algoritma Pemrograman [BS204] Algoritma Pemrograman [BS204] Good Programming Practices Referensi : Diktat Algoritma dan Pemrograman B ITB 2015 1 Perlunya Konvensi Dibutuhkan standar yang sama dalam penulisan kode Practice yang umum

Lebih terperinci

Pengenalan Script. Definisi HTML

Pengenalan Script. Definisi HTML 1 Pengenalan Script Pada bab ini akan dibahas bahasa script yang dapat digunakan untuk membuat halaman web. Untuk dapat membuat halaman web bahasa script pertama yang harus anda kenal adalah HTML. HTML

Lebih terperinci

Mata Kuliah : Pemrograman Web II. Pokok Bahasan : Type Data & Operator. Okta Jaya Harmaja, M.Kom

Mata Kuliah : Pemrograman Web II. Pokok Bahasan : Type Data & Operator. Okta Jaya Harmaja, M.Kom Mata Kuliah : Pemrograman Web II Pokok Bahasan : Type Data & Operator Copyright@2016 Okta Jaya Harmaja, M.Kom www.delapan7.my.id Type Data v Sebuah variabel atau konstanta merupakan tempat dari data. v

Lebih terperinci

Dasar-Dasar Pengujian Perangkat Lunak. Fakultas Ilmu Komputer dan Teknologi Informasi Jurusan Sistem Informasi Univesitas Gunadarma

Dasar-Dasar Pengujian Perangkat Lunak. Fakultas Ilmu Komputer dan Teknologi Informasi Jurusan Sistem Informasi Univesitas Gunadarma Dasar-Dasar Pengujian Perangkat Lunak Fakultas Ilmu Komputer dan Teknologi Informasi Jurusan Sistem Informasi Univesitas Gunadarma Tujuan Pembelajaran Memahami langkah awal untuk melakukan pengujian terhadap

Lebih terperinci

BAB 2 LANDASAN TEORI. 2.1 Pengertian Text Mining

BAB 2 LANDASAN TEORI. 2.1 Pengertian Text Mining 13 BAB 2 LANDASAN TEORI 2.1 Pengertian Text Mining Text Mining dapat juga diartikan sebagai penambangan data berupa teks yang bersumber dari dokumen untuk mencari karta-kata yang merupakan perwakilan isi

Lebih terperinci

BAB II SINTAKS 2.1. SINTAKS

BAB II SINTAKS 2.1. SINTAKS BAB II SINTAKS 2.1. SINTAKS merupakan kumpulan aturan yang mendefinisikan suatu bentuk bahasa. mendefinisikan bagaimana suatu kalimat dibentuk sebagai barisan/urutan dari pemilihan suatu kata dasar. Kata

Lebih terperinci

Team project 2017 Dony Pratidana S. Hum Bima Agus Setyawan S. IIP

Team project 2017 Dony Pratidana S. Hum Bima Agus Setyawan S. IIP Hak cipta dan penggunaan kembali: Lisensi ini mengizinkan setiap orang untuk menggubah, memperbaiki, dan membuat ciptaan turunan bukan untuk kepentingan komersial, selama anda mencantumkan nama penulis

Lebih terperinci

Bab III Semantik. Konsep Semantik Bahasa Pemrograman (Semantik Analisis)

Bab III Semantik. Konsep Semantik Bahasa Pemrograman (Semantik Analisis) Bab III Semantik Konsep Semantik Bahasa Pemrograman (Semantik Analisis) Dari pembahasan bab-bab terdahulu maka kita ketahui bahwa proses ini merupakan proses kelanjutan dari proses kompilasi sebelumnya,

Lebih terperinci

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT Adi Purwanto Sujarwadi (13506010) Program Studi Teknik

Lebih terperinci

24/09/2017 PERCABANGAN

24/09/2017 PERCABANGAN 1 PERCABANGAN STATEMENT IF Pernyataan if akan menentukan sebuah pernyataan (atau blok kode) yang akan dieksekusi jika dan hanya jika persyaratan bernilai benar (true). 2 BENTUK PERNYATAAN IF atau 3 PENJELASAN

Lebih terperinci

Kata Pengantar... Daftar Isi... Daftar Padan Kata Inggris - Indonesia Pengantar ke Algoritma... 1

Kata Pengantar... Daftar Isi... Daftar Padan Kata Inggris - Indonesia Pengantar ke Algoritma... 1 2 Daftar Isi Kata Pengantar... Daftar Isi... Daftar Padan Kata Inggris - Indonesia... 1. Pengantar ke Algoritma... 1 1.1 Pendahuluan... 1 1.2 Program Komputer dan Algoritma... 4 1.3 Algoritma Merupakan

Lebih terperinci

SATUAN ACARA PERKULIAHAN MATA KULIAH PEMROGRAMAN PASCAL * (TK) KODE / SKS: KK /2 SKS

SATUAN ACARA PERKULIAHAN MATA KULIAH PEMROGRAMAN PASCAL * (TK) KODE / SKS: KK /2 SKS MATA KULIAH PEMROGRAMAN * (TK) Minggu ke Pokok Bahasan dan TIU 1. Algoritma Konsep Dasar Bahasa Pascal secara singkat sejarah dirancangnya bahasa Memberikan konsep dasar pembuatan program dalam bahasa

Lebih terperinci

Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom

Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom Pengantar Bahasa Pemrograman Pascal Page 1 / 11 Pengenalan Pascal Pascal merupakan salah satu bahasa pemrograman tingkat tinggi. Pemrograman

Lebih terperinci

BAB III ANALISIS DAN PERANCANGAN SISTEM. Analisis sistem bertujuan untuk mengidentifikasi permasalahan

BAB III ANALISIS DAN PERANCANGAN SISTEM. Analisis sistem bertujuan untuk mengidentifikasi permasalahan BAB III ANALISIS DAN PERANCANGAN SISTEM 3.1 Analisis Sistem Analisis sistem bertujuan untuk mengidentifikasi permasalahan permasalahan yang ada pada sistem di mana aplikasi dibangun yang meliputi perangkat

Lebih terperinci

BAB II TINJAUAN PUSTAKA

BAB II TINJAUAN PUSTAKA BAB II TINJAUAN PUSTAKA II.1. Searching Pencarian (searching) merupakan proses yang sering digunakan dalam pengelolaan data. Proses pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan

Lebih terperinci

TIPE DATA, VARIABLE, dan OPERATOR DELPHI

TIPE DATA, VARIABLE, dan OPERATOR DELPHI TIPE DATA, VARIABLE, dan OPERATOR DELPHI A. TIPE DATA Delphi merupakan bahasa pemrograman tingkat tinggi yang mendukung perancangan terstruktur dan berorientasi Object. Bahasa pemrograman ini berdasarkan

Lebih terperinci

Kuliah Online : TEKKOM [2013/VI]

Kuliah Online : TEKKOM [2013/VI] Kuliah Online : TEKKOM [2013/VI] Sumber Perancangan Bahasa Pemrograman Bahasa alami (natural language) Konstruksi yang diturunkan dari bahasa alami, karena bahasa alami dapat digunakan sebagai panduan

Lebih terperinci

NO Add Contoh Requirement Buat sebuah algoritma untuk memilih bilangan terbesar dari 3 buah bilangan Nantinya ini bisa digeneralisir menjadi n buah bilangan Algoritma Dalam Bahasa Natural Add 1. Ambil

Lebih terperinci

Algoritma Pemrograman

Algoritma Pemrograman Algoritma Pemrograman Pertemuan Ke-2 (Teks Algoritma) :: Noor Ifada :: S1 Teknik Informatika-Unijoyo 1 Sub Pokok Bahasan Pendahuluan Judul Algoritma Deklarasi Deskripsi Translasi Teks Algoritma ke dalam

Lebih terperinci

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA 1 BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA IDENTIFIER Identifier adalah suatu tanda yang mewakili nama-nama variabel, method, class, dsb. Ingat : Bahasa

Lebih terperinci

Dasar Pemrograman. Kondisi dan Perulangan. By : Hendri Sopryadi, S.Kom, M.T.I

Dasar Pemrograman. Kondisi dan Perulangan. By : Hendri Sopryadi, S.Kom, M.T.I Dasar Pemrograman Kondisi dan Perulangan By : Hendri Sopryadi, S.Kom, M.T.I Kondisi dan Perulangan Pendahuluan Dalam sebuah proses program, biasanya terdapat kode penyeleksian kondisi, kode pengulangan

Lebih terperinci

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN Obektif: Praktikan mengetahui arra, percabangan, dan perulangan pada Java. Praktikan mengetahui bentuk umum

Lebih terperinci

BAB II TINJAUAN PUSTAKA. seolah-olah karya orang lain tersebut adalah karya kita dan mengakui hasil

BAB II TINJAUAN PUSTAKA. seolah-olah karya orang lain tersebut adalah karya kita dan mengakui hasil BAB II TINJAUAN PUSTAKA 2.1. Landasan Teori 2.1.1. Plagiarisme Ada beberapa definisi menurut para ahli lainnya (dalam Novanta, 2009), yaitu : 1. Menurut Ir. Balza Achmad, M.Sc.E, plagiarisme adalah berbuat

Lebih terperinci

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Mesin Abstrak

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Mesin Abstrak IKG2A3/ Pemrograman Terstruktur 2 ZK Abdurahman Baizal KK Algoritma dan Komputasi Mesin Abstrak 1 8/25/2015 Mesin Abstrak Definisi: mesin yang dianggap ada, dan diasumsikan mampu melakukan mekanisme yang

Lebih terperinci

Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound

Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound Eric 13512021 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika

Lebih terperinci

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE Mohammad Dimas (13507059) Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung Jalan Ganesha

Lebih terperinci

Pengaplikasian Algoritma Knuth-Morris-Pratt dalam Teknik Kompresi Data

Pengaplikasian Algoritma Knuth-Morris-Pratt dalam Teknik Kompresi Data Pengaplikasian Algoritma Knuth-Morris-Pratt dalam Teknik Kompresi Data I Nyoman Prama Pradnyana - 13509032 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung,

Lebih terperinci

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS 29 BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS Dengan menggunakan Visual Basic 6.0 aplikasi perangkat ajar pengelolaan dan perhitungan ekspresi matematika yang akan dibangun dalam penelitian

Lebih terperinci

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum Arieza Nadya -- 13512017 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung,

Lebih terperinci

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB Pertemuan Ke 5 : List Linier (Linked List) Referensi: 1. Inggriani Liem. 2003. Catatan Kuliah & Pemrograman, Jurusan Teknik Informatika ITB 2. Rinaldi Munir. 2003. dan Pemrograman II. Bandung : Penerbit

Lebih terperinci

Variabel dan Tipe data Javascript

Variabel dan Tipe data Javascript Variabel dan Tipe data Javascript Variabel Pendeklarasian variabel dalam JavaScript dapat di isi dengan nilai apa saja dan juga bersifat opsional. Artinya variabel boleh di deklarasikan ataupun tidak hal

Lebih terperinci

Sebelum membahas mengenai pemrograman LabVIEW, sebaiknya pembaca mengenal istilah istilah penting berikut ini.

Sebelum membahas mengenai pemrograman LabVIEW, sebaiknya pembaca mengenal istilah istilah penting berikut ini. Pemrograman LabVIEW 6.1 Istilah-Istilah Penting Sebelum membahas mengenai pemrograman LabVIEW, sebaiknya pembaca mengenal istilah istilah penting berikut ini. 1. G: dari kata graphical, merupakan sebutan

Lebih terperinci

BAB I PENDAHULUAN 1.1 Latar Belakang

BAB I PENDAHULUAN 1.1 Latar Belakang BAB I PENDAHULUAN 1.1 Latar Belakang Kemajuan teknologi informasi dan komunikasi tidak hanya membawa dampak positif, tetapi juga membawa dampak negatif, salah satunya adalah tindakan plagiarisme (Kharisman,

Lebih terperinci

PENGENALAN PHP DASAR

PENGENALAN PHP DASAR PENGENALAN PHP DASAR Pengenalan PHP PHP adalah bahasa scripting yang menyatu dengan HTML dan dijalankan pada server side. Artinya semua sintaks yang diberikan akan sepenuhnya dijalankan pada server sedangkan

Lebih terperinci

MK. PEMROGRAMAN SISTEM Semester/SKS : 6/3 COMPILER. Jurusan Sistem Komputer S1 Universitas Gunadarma

MK. PEMROGRAMAN SISTEM Semester/SKS : 6/3 COMPILER. Jurusan Sistem Komputer S1 Universitas Gunadarma MK. PEMROGRAMAN SISTEM Semester/SKS : 6/3 COMPILER Jurusan Sistem Komputer S1 Universitas Gunadarma Aspek Kompilasi Programmer dengan High Level Languange (HLL) vs. Komputer dengan Machine Language Untuk

Lebih terperinci

Perjalanan sebuah intruksi

Perjalanan sebuah intruksi Perjalanan sebuah intruksi Source Program X = Y + X Analisis Leksikal Token-token Id1:=Id2+Id1 Id1 := Id2 + Id1 Analisis Sintaksis Code Generator dan Analisis sematiks LDA A ADD Y STO X

Lebih terperinci

ANALISIS ALGORITMA BINARY SEARCH

ANALISIS ALGORITMA BINARY SEARCH ANALISIS ALGORITMA BINARY SEARCH Metode Binary search Binary search merupakan salah satu algoritma untuk melalukan pencarian pada array yang sudah terurut. Jika kita tidak mengetahui informasi bagaimana

Lebih terperinci

Kisi-Kisi Ujian Tengah Semester Algoritma dan Pemrograman Lanjut

Kisi-Kisi Ujian Tengah Semester Algoritma dan Pemrograman Lanjut Kisi-Kisi Ujian Tengah Semester Algoritma dan Pemrograman Lanjut 1. Pengenalan Bahasa C++ a. Elemen Bahasa C+ Bahasa C++ ditulis dari beberapa elemen, antara lain: Pernyataan Satu atau beberapa ekspresi

Lebih terperinci

APLIKASI STATISTIK PENDETEKSIAN PLAGIARISME DOKUMENT TEXT DENGAN ALGORITMA RABIN KARP

APLIKASI STATISTIK PENDETEKSIAN PLAGIARISME DOKUMENT TEXT DENGAN ALGORITMA RABIN KARP APLIKASI STATISTIK PENDETEKSIAN PLAGIARISME DOKUMENT TEXT DENGAN ALGORITMA RABIN KARP Dedi Leman 1, Gunadi Widi Nurcahyo 2, Sarjon Defit 3 Teknik Informasi, Magister Komputer, Universitas Putra Indonesia

Lebih terperinci

BAB IV PERANCANGAN. IV.1 Evaluasi Usulan untuk Perancangan Iteratif

BAB IV PERANCANGAN. IV.1 Evaluasi Usulan untuk Perancangan Iteratif Prosedure PrefixSpan(input: a: l: integer, S: Sequence database) { Mencari Sequential Pattern pada sequence database S } Deklarasi D : Temporary Sequence Database Lst : List of Sequential Pattern Sq :

Lebih terperinci

KOMPILASI. Assembler Bahasa Rakitan Bahasa Mesin Compiler (Kompilator) Bahasa Tingkat Tinggi Bahasa tingkat rendah

KOMPILASI. Assembler Bahasa Rakitan Bahasa Mesin Compiler (Kompilator) Bahasa Tingkat Tinggi Bahasa tingkat rendah KOMPILASI Translator (penerjemah) adalah sebuah program yang menerjemahkan sebuah program sumber ( source program) menjadi program sasaran ( target program) Proses translasi suatu program dari bentuk syntax

Lebih terperinci

Tabel Informasi. Hal di atas dapat dilakukan dengan menambah dan mengambil atribut identifier yang digunakan pada program, melalui tabel informasi.

Tabel Informasi. Hal di atas dapat dilakukan dengan menambah dan mengambil atribut identifier yang digunakan pada program, melalui tabel informasi. Tabel Informasi Tabel informasi atau tabel simbol berguna untuk mempermudah pada saat pembuatan dan implementasi dari analisa semantik (semantic analyzer). Pada proses translasi, tabel informasi dapat

Lebih terperinci

BAB 1. PENDAHULUAN. 1 Universitas Kristen Maranatha

BAB 1. PENDAHULUAN. 1 Universitas Kristen Maranatha BAB 1. PENDAHULUAN 1.1 Latar Belakang Perkembangan kegiatan belajar mengajar semakin hari akan semakin berkembang. Perkembangan tersebut dimulai dengan adanya fasilitas-fasilitas yang menunjang kegiatan

Lebih terperinci

Penggunaan Algoritma Greedy dalam Membangun Pohon Merentang Minimum

Penggunaan Algoritma Greedy dalam Membangun Pohon Merentang Minimum Penggunaan Algoritma Greedy dalam Membangun Pohon Merentang Minimum Gerard Edwin Theodorus - 13507079 Jurusan Teknik Informatika ITB, Bandung, email: if17079@students.if.itb.ac.id Abstract Makalah ini

Lebih terperinci

[Type the company name] [Type the document title] [Type the document subtitle] Gilang Abdul Aziz [Pick the date]

[Type the company name] [Type the document title] [Type the document subtitle] Gilang Abdul Aziz [Pick the date] [Type the company name] [Type the document title] [Type the document subtitle] Gilang Abdul Aziz [Pick the date] H a l a m a n 1 DAFTAR ISI DAFTAR ISI... 1 1. TIPE DATA DALAM BORLAND DELPHI7... 2 1.1.

Lebih terperinci

PENYAJIAN ALGORITMA. a. Stuctured English b. Psedoucode

PENYAJIAN ALGORITMA. a. Stuctured English b. Psedoucode LOGIKA PROPORSIONAL ALGORITMA Pola pikir yang terstruktur yang berisi tahap-tahap atau langkah-langkah penyelesaian suatu masalah; Merupakan satu set proses yang diaktifkan menurut langkah demi langkah

Lebih terperinci

Perancangan Perangkat Ajar Visualisasi Eksekusi Flowchart dan Konversinya ke Dalam Algoritma. Ahmad Suryan. Politeknik Telkom.

Perancangan Perangkat Ajar Visualisasi Eksekusi Flowchart dan Konversinya ke Dalam Algoritma. Ahmad Suryan. Politeknik Telkom. Perancangan Perangkat Ajar Visualisasi Eksekusi Flowchart dan Konversinya ke Dalam Algoritma ABSTRAK Ahmad Suryan Politeknik Telkom asa_suryan@yahoo.co.id Pengajaran algoritma untuk pemula seringkali mengalami

Lebih terperinci

LAPORAN PRAKTIKUM RESMI TIPE DATA, KONSTANTA DAN VARIABEL

LAPORAN PRAKTIKUM RESMI TIPE DATA, KONSTANTA DAN VARIABEL LAPORAN PRAKTIKUM RESMI TIPE DATA, KONSTANTA DAN VARIABEL Disusun oleh : Nama : Trins Astriani Br Sidauruk NIM : 201302011 Dosen pengampu : Yosef Murya Kusuma Ardhana.S.T., M.Kom JURUSAN KOMPTERISASI AKUNTANSI

Lebih terperinci

Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra

Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra Adriansyah Ekaputra 13503021 Program Studi Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung Abstraksi Makalah

Lebih terperinci

TEKNIK KOMPILASI. Firrar Utdirartatmo

TEKNIK KOMPILASI. Firrar Utdirartatmo TEKNIK KOMPILASI TEKNIK KOMPILASI Firrar Utdirartatmo Kata Pengantar Penulis memberanikan diri untuk menyusun buku ini karena melihat kenyataan bahwa teknik kompilasi merupakan mata kuliah yang diajarkan

Lebih terperinci

MODUL 3 DASAR-DASAR PHP

MODUL 3 DASAR-DASAR PHP MODUL 3 DASAR-DASAR PHP Para pengguna internet dewasa ini cenderung lebih menyukai situs-situs yang mempunyai tampilan menarik dan menghibur. Yang pasti, mereka sudah bosan dengan tampilan web yang begitu-begitu

Lebih terperinci

BAB I PENGANTAR Pendahuluan Penyajian 1.1 Latar Belakang 1.2 Algoritma dan Struktur Data

BAB I PENGANTAR Pendahuluan Penyajian 1.1 Latar Belakang 1.2 Algoritma dan Struktur Data BAB I PENGANTAR Pendahuluan Program komputer dibuat berdasarkan langkah-langkah logis untuk menyelesaikan masalah. Lagkah-langkah tersebut ditulis dalam suatu instruksi yang bisa dipahami oleh komputer,

Lebih terperinci