UJIAN AKHIR SEMESTER GANJIL 2005/2006 ALGORITMA & STRUKTUR DATA / CS2014 NIM: Nama : HARI : Rabu, 4 Januari 2006 WAKTU : 135 Menit Tanda tangan: DOSEN : TIM SIFAT : Tutup Buku Petunjuk Baca dengan teliti setiap petunjuk soalnya. Gunakan Pensil untuk menuliskan algoritma atau kode program. Soal ujian terdiri atas empat bagian. Jawaban seluruh bagian soal dituliskan pada lembar ini. Bobot Keseluruhan = 100 BAGIAN I : Data Abstraction (40 poin) Anda bekerja di sebuah perusahaan pada bagian gudang yang menyimpan automobile part (onderdil mobil). Perusahaan tsb menyimpan data banyaknya onderdil yang terdapat pada gudang. Basic operational perusahaan dapat dikatakan ada dua, yaitu pemesanan onderdil ke supplier dan pengiriman onderdil ke bengkel-bengkel. Pemilik bengkel biasanya akan marah jika perusahaan automobile part tersebut tidak memiliki onderdil yang dipesannya, karena pelanggan-pelanggannya akan menunggu lama agar mobil mereka dapat segera diperbaiki. Anda harus menulis program agar pengadaan barang (inventory) di gudang selalu tersedia. Inti program Anda adalah menuliskan ADT INVENTORY yang menangani bookkeeping. Primitif-primitif yang harus dimiliki adalah Menghitung banyaknya onderdil yang ada di gudang Melakukan update data jika ada pengiriman onderdil baru dari supplier ke gudang Melakukan update data jika ada pengiriman onderdil ke bengkel-bengkel. Pimpinan perusahaan juga ingin mengetahui kuantitas onderdil yang telah dibawah standar minimum perusahaan (istilah: low) sehingga perusahaan dapat melakukan pemesanan onderdil ke supplier sebelum onderdil tsb habis di gudang. (dalam hal ini Anda harus mempunyai parameter kuantitas) Untuk menyederhanakan persoalan, Anda boleh berasumsi bahwa setiap ada pengiriman dan pemesanan onderdil hanya untuk satu jenis onderdil dan banyaknya item tidak dibatasi. Dalam hal ini, Anda tidak tahu ada berapa jenis onderdil di dalam gudang dan terkadang Anda menerima pengiriman onderdil yang jenisnya belum ada di gudang. 1. (5 poin) Lengkapilah tabel ADT Inventory di bawah ini, berdasarkan atribut-atribut yang disediakan. Primitive name Parameter names and type Process Return type and value constructor --- Create empty list List kosong Hal 1 dari 6
Shipment Int Idpart Int quantity Jika part belum ada maka insert, selain itu tambahkan pada quantity yang ada --- Delivery Int Idpart Int quantity Quantity part tsb berkurang sesuai amount yang dipesan. --- howmany Int Idpart --- Low Int minimum --- Quantity part tsb yg tdp di gudang Daftar Idpart yg menunjukkan seluruh part yang quantity-nya telah < minimum 2. (5 poin) Tuliskan representasi internal dan struktur data yang akan digunakan untuk implementasi ADT Inventory. List berkait dengan representasi pointer. List tsb merupakan list of asosiasi antara Idpart dan quantity. 3. (30 poin) Tuliskan lengkap kode program dalam bahasa C untuk realisasi setiap primitive names dan deklarasi tipe untuk ADT Inventory tsb dengan mengacu pada tabel di atas. Lihat di file inventory.zip! Hal 2 dari 6
BAGIAN II : Binary Search Tree (BST) 15 poin Diketahui sebuah BST dengan deklarasi: KAMUS Type infotype : integer; Type address : pointer to node; Type node : < info : infotype; Left : address; Right : address; > Type BST : address; Tuliskan dan lengkapi algoritma rekursif untuk menuliskan info node secara terurut descending di bawah ini. Sebagai ilustrasi, perhatikan BST berikut. Output: 60 40 25 20 15 12 10 5 Hal 3 dari 6
Procedure cetakurut(input P:BST) {I.S. terdefinisi BST P} {F.S. menuliskan info node pada BST P secara terurut descending} {Basis: pohon kosong, tidak melakukan apa-apa ) {Rekurens: traversal kiri, root, kanan dari pohon P } KAMUS ALGORITMA If P=nil then {kasus kosong} Else cetakurut(right(p)); output(info(p)); cetakurut(left(p)); BAGIAN III : Procedure Debugging (20 poin) 1. Asumsi telah terdefinisi ADT Stack dengan elemennya bertipe integer. Gambarkan (10 poin) ilustrasi dari kode di bawah ini kemudian tuliskan nilai dari v, w, x, y, dan z setelah kode berikut dieksekusi! Stack S; Infotype a,v,w,x,y,z; Inisialisasi(); createempty(&s); Push(&S,5); Push(&S,6); Push(&S,7); Pop(&S,&a); v=a; w=infotop(s)); push(&s,8); push(&s,9); pop(&s,&a); x=a; pop(&s,&a); y=infotop(s); pop(&s,&a); z=a; Jawab sendiri aja y.. kan gampang.. Hal 4 dari 6
2. (10 poin) Dengan memanfaatkan algoritma cetakurut() dan BST pada bagian II, telusuri algoritma di bawah ini (gambarkan tracing algoritma) dan tuliskan outputnya jika x=20. Procedure ApaIni(Input X:integer, P : BST) {I.S : terdefinisi Binary Search Tree P, P tidak kosong} {F.S : Mencetak informasi yang lebih besar dari nilai X dalam binary Search Tree P secara descending} Kamus Procedure CetakUrut(Input P:BST) Algoritma If X = info(p) then CetakUrut(right(P)) Else if X < info(p) then ApaIni (left(p)) else if X > info(p) then ApaIni(right(P)) Idem Hal 5 dari 6
BAGIAN IV : Definition (25 poin) Tuliskan jawaban T/F (true/false) pada ruang yang disediakan. T Memory is released when we set a pointer to NULL. T Two pointers can point to the same memory location. F A stack can never become full when implemented using dynamic memory. T Stacks and queues can be implemented using arrays. T Data is removed from a queue in first-in-first-out order. T A stack can be used to evaluate arithmetic expressions in postfix. F A queue can be used to simulate the behavior of a recursive function. F A recursive function can not access global variables. T All recursive functions must have a terminating condition. T All recursive functions can be rewritten using iteration instead. F A linked list with 100 nodes takes less space than an array with 100 elements. T A unsorted linked list is easier to insert into than a sorted linked list. T A sorted linked list takes less time to search than unsorted list. T It is faster to insert data into a binary search tree than into a sorted array. Pada bagian kiri, tuliskan nomor jawaban dari istilah yang sesuai dengan definisi 4_ a linked list in which the rear item refers back to the head item 9_ reduction of a problem to a smaller instance of the same problem 12_ a repeated computation _1 a data structure of values linked together in memory by a chain of references _3 a data structure with last-in first-out behavior, supporting push and pop _10_ how to carry out a computation, may be implemented as a procedure _7 a data structure with first-in first-out behavior _15_ a predicate that becomes true when a computation ends _5 a programming language construct that supports iteration _8 a diagram showing the operators and operands of an expression _6, such as numbers and symbols, that are built into the language 1. linked list 2. object 3. stack 4. circular list 5. loop 6. primitive data 7. queue 8. expression tree 9. recursion 10. algorithm 11. reduction 12. iteration 13. semantic 14. abstraction 15. termination condition Hal 6 dari 6