ujian akhir semester ganjil 2007/2008 nim: algoritma & struktur data ...

26 downloads 198 Views 286KB Size Report
Soal ujian terdiri atas lima bagian. Jawaban seluruh bagian soal dituliskan pada lembar ini. • Periksa kelengkapan halaman soal sebelum Anda mengerjakan ...
UJIAN AKHIR SEMESTER GANJIL 2007/2008 ALGORITMA & STRUKTUR DATA / CS2014 HARI WAKTU DOSEN SIFAT

: : : :

Sabtu, 19 Januari 2008 135 Menit KMA, RIE, RMB, ZKA Tutup Buku

NIM: Nama :

Tanda tangan:

Petunjuk • Baca dengan teliti setiap petunjuk soalnya. • Soal ujian terdiri atas lima bagian. Jawaban seluruh bagian soal dituliskan pada lembar ini. • Periksa kelengkapan halaman soal sebelum Anda mengerjakan soal ujian.

BAGIAN I : Data Abstraction (notasi bahasa C) [20] 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, asumsi standar minimum adalah 10 unit/onderdil) 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.

Lengkapilah tabel ADT Inventory di bawah ini dengan menerapkan List, berdasarkan atribut-atribut yang disediakan.

Primitive name

Parameter names and type

Transform process

Return type and value

constructor

--------------

Create empty list

List kosong

Hal 1 dari 15

Order

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

--------------

Quantity part tsb yg tdp di gudang

------------

Daftar Idpart yg menunjukkan seluruh part yang quantity-nya telah < minimum

Low

2.

Int minimum

Tuliskan representasi fisik (berkait pointer, berkait tabel, atau kontigu) dan struktur data yang akan digunakan untuk implementasi ADT Inventory sesuai dengan representasi fisiknya. Jawaban: Representasi fisik: berkait pointer (contoh yg lain blm dibuat ☺ ) Struktur data: #define #define #define #define

idPart(p) (p)->idPart qty(p) (p)->qty next(p) (p)->next first(L) ((L).first)

typedef int infotype; typedef struct tElmtList *address; typedef struct tElmtList { char idPart[20]; infotype qty; address next; }ElmtList; typedef struct { address first; }List;

3.

Tuliskan lengkap realisasi setiap primitive names untuk ADT Inventory tsb dengan mengacu pada tabel di atas. Asumsi: primitif standar list sudah terdefinisi. Jawaban:

void createEmpty(List *L) /* I.S. sembarang */ /* F.S. terbentuk list kosong */ { first(*L)=nil; } void order(List *L,char part[],infotype quantity) /* I.S. */ /* F.S. */ /* proses: searching */

Hal 2 dari 15

{ address item,p; item=first(*L); /*cari apakah part ada dalam list*/ while (strcmp(idPart(item),part)!=0 && next(item)!=nil) { item=next(item); } /*cek elemen terakhir*/ if (strcmp(idPart(item),part)==0) { qty(item)+=quantity; /*part sudah ada di gudang, qty-nya saja yg bertambah*/ } else InsVLast(&(*L),part,quantity); /*part blm ada di gudang, tambahkan*/ } void delivery(List *L,char part[],infotype quantity) /* I.S. part quantity selalu > 1 */ /* F.S. */ /* proses: searching */ { address item; item=first(*L); while (strcmp(idPart(item),part)!=0 && next(item)!=nil) { item=next(item); } /*cek elemen terakhir*/ if (strcmp(idPart(item),part)==0) { qty(item)-=quantity; } } infotype HowMany(List L,char part[]) /* I.S. */ /* F.S. */ /* proses: */ { address item; item=first(L); while (strcmp(idPart(item),part)!=0 && next(item)!=nil) { item=next(item); } if (strcmp(idPart(item),part)==0) { return qty(item); } else return 0; } void low(List L,int min) /* I.S. */ /* F.S. */ /* proses: searching */ { address item; item=first(L);

Hal 3 dari 15

while (item!=nil) { if (qty(item)

Var Q

: Queue

Manakah dari pernyataan berikut ini yang sesuai dengan Queue sirkular tersebut : A. Operasi insert elemen pada antrian pasti dapat dilakukan selama Q.Tail ≠ NMaks B. Alamat Head antrian selalu lebih kecil dari alamat Tail antrian C. Operasi insert elemen x (x bertipe integer) pada Queue dilakukan dengan tahapan: If (Q.Count ≠ Nmaks) then Q.Tail Q.Head + Q.Count +1 If (Q.Tail > Nmaks) then Q.Tail  Q.Tail – Nmaks Q.TabElmt[Q.Tail]  x

D. Perlu dilakukan operasi pergeseran elemen setiap kali selesai dilakukan operasi delete pada antrian. E. Jika function IsFull (Q:Queue)  Boolean

merupakan fungsi yang mengembalikan nilai true jika antrian penuh, maka algoritma fungsi tersebut berisi aksi (Q.Tail = NMaks) Jawaban : E 5. Perhatikan graf berikut:

A

B

D

C

E

F

G

H

Hal 8 dari 15

Pernyataan manakah yang benar ? A. Hasil penelusuran BFS dan DFS sama untuk graf di atas sama B. Hasil DFS untuk graf di atas: A-B-D-H-E-F-G-C C. Hasil BFS untuk graf di atas: A-B-C-D-E-F-G-H D. Penelusuran BFS menggunakan struktur data stack E. Penelusuran DFS memerlukan struktur data queue Jawaban : C 6. Perhatikan Pohon T di bawah ini : A

B

D

H

C

E

F

G

I

function F1(P:BinaryTree) integer; if (PNil)then  1+F1(Left(P))+F1(Right(P)) else  0;

integer; function F2(P:BinaryTree) if (P=Nil)then  0 else if (left(P)=Nil and right(P)=NIL)then  1 Else  F2(Left(P))+F2(Right(P));

Manakah pernyataan yang salah: A. F1 adalah fungsi untuk menghitung jumlah simpul pada sebuah pohon B. F1 dan F2 tidak mungkin menghasilkan nilai yang sama pada pohon yang tidak kosong C. Untuk pohon T di atas hasil F1 adalah 9 D. Untuk pohon T di atas hasil F2 adalah 5 E. Untuk pohon dengan 1 simpul hasil F2 adalah 1 Jawaban : B 7. Sebuah Complete Binary Tree A direpresentasikan dengan representasi kontigu sebagi berikut :

Manakah pernyataan berikut ini yang salah : A. Simpul H adalah root B. Pada tree tersebut terdapat 6 leaf node Hal 9 dari 15

C. Simpul A merupakan internal node D. Anak kiri dari simpul K adalah J E. Simpul J hanya memiliki satu anak Jawaban : C 8. Perhatikan pohon biner berikut ini : A I E G

A. A I E G H J L B. G E H I J L A C. G E H I L J A D. G H E L J I O E. G E I A H L J Jawaban : C

O L

H

J

O O O A O

9. Perhatikan Pohon T berikut ini : A

B

D

H

Procedure F1(P:BinTree) if (PNil)then Proses(P) F1(Left(P)) F1(Right(P))

C

E

F

G

I

Procedure F2(P:BinTree) if (PNil)then F2(Left(P)) F2(Right(P)) Proses(P)

Procedure F3(P:BinTree) if (PNil)then F3(Left(P)) Proses(P) F3(Right(P))

Manakah pernyataan yang salah: A. F1 merupakan prosedur penelusuran tree PreOrder B. F3 merupakan prosedur penelusuran tree InOrder C. Hasil F2 untuk pohon T di atas: H-I-D-E-B-F-G-C-A D. Hasil F3 untuk pohon T di atas: H-D-I-B-E-A-F-C-G E. F1, F2, F3 tidak mungkin memberikan hasil yang sama Jawaban : E 10. Struktur stack umumnya digunakan pada proses-proses berikut ini, kecuali : Hal 10 dari 15

A. B. C. D. E.

Backtracking Implementasi Rekursif Pemanggilan Prosedur Simulasi penjadwalan Implementasi operasi2 aritmatika seperti konversi infix to postfix dan evaluasi ekspresi postfix Jawaban: D BAGIAN IV : Konsep [30] Tuliskan jawaban T/F (true/false) pada ruang yang disediakan. __T__ Status memori menjadi “bebas” pada saat pointer diset NULL __T__ Dua variabel pointer dapat menunjuk lokasi memori yang sama. __F__ Sebuah stack tidak akan pernah FULL jika diimplementasikan menggunakan dynamic memory. __T__ Stack dan Queues dapat diimplementasikan menggunakan array. __T__ Stack dan Queue lebih tepat diimplementasikan menggunakan array. __T__ Pada queue, data dilayani dengan aturan first-in-first-out order. __T__ Stack dapat digunakan untuk evaluasi ekspresi aritmatika dalam notasi postfix. __F__ Queue dapat digunakan untuk mensimulasikan kelakuan suatu fungsi rekursif. __T__ Semua fungsi rekursif harus memiliki terminating condition. __T__ Semua fungsi rekursif dapat ditransform menjadi iteratif. __F__ Sebuah linked list dengan 100 node membutuhkan memori lebih sedikit dibandingkan array dengan 100 elemen. __T__ Lebih mudah menyisipkan elemen pada linked list yang tidak terurut dibandingkan linked list yang elemennya terurut. __T__ Pencarian elemen pada linked list yang terurut membutuhkan waktu lebih cepat dibandingkan linked list yang tidak terurut. __T__ Menyisipkan data pada BST membutuhkan waktu lebih cepat dibandingkan pada array yang terurut. __T__ Heap tree dapat digunakan sebagai ilustrasi priority queue. Pada bagian kiri, tuliskan nomor jawaban dari istilah yang sesuai dengan definisi Tabel 1

__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

1.linked list 2.object 3.stack Hal 11 dari 15

__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

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

_6__, such as numbers and symbols, that are built into the language Isian Singkat. Telusuri dua algoritma di bawah ini kemudian tuliskan nama proses yang dilakukan algoritmaalgoritma tersebut. Procedure ProcessX(T:BinTree) Kamus S: stack N: BinTree Algoritma CreateEmpty(S); Push(S,T); While (not(Empty(S))) do Pop(S,N); If (Nnil) then Output(info(N)); Push(S,right(N)); Push(S,left(N));

Algoritma tersebut melakukan proses: Preorder traversal Ekivalen terhadap proses DFS pada graf. Procedure ProcessY(T:BinTree) Kamus Q: Queue N: BinTree Algoritma CreateEmpty(Q); Insert(Q,T); While (not(Empty(Q))) do Remove(Q,N); If (Nnil) then Output(info(N)); Insert(Q,left(N)); Insert(Q,right(N));

Hal 12 dari 15

Algoritma tersebut melakukan proses: Level Order Traversal Ekivalen terhadap proses BFS pada graf.

BAGIAN V : GRAPH (Notasi Bahasa C) [20] Berikut adalah program dalam bahasa C yang digunakan untuk merepresentasikan graph berarah dalam bentuk array dengan jumlah node maksimum 10. Adapun fungsionalitas utama yang dimiliki oleh program tersebut yaitu : a. Meminta jumlah node yang akan dipergunakan b. Menghubungkan antar node c. Menampilkan isi matrix d. Menampilkan keterhubungan antar node dengan node yang lain.

Ilustrasi matrix beserta graph hasil dapat dilihat pada gambar berikut ini.

1 2 3 4

1 0 0 0 0

1 2 3 4

1 0 0 0 1

Jumlah Node=4 2 3 4 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 1 0

3 1 0 0 0

Graph

4 0 0 0 0

Lengkapi program dibawah ini sehingga menghasilkan program yang utuh. Aturan : Tidak perlu menambahkan variabel ataupun baris program. #include #include int max,graph[10][10],n1,n2; char pil; void main() { //inisialisasi array for(n1=0;n1