2007 2008

410 views

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
410
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2007 2008

  1. 1. UJIAN AKHIR SEMESTER GANJIL 2007/2008 NIM: ALGORITMA & STRUKTUR DATA / Nama : CS2014 HARI : Sabtu, 19 Januari 2008 Tanda tangan: WAKTU : 135 Menit DOSEN : KMA, RIE, RMB, ZKA SIFAT : Tutup BukuPetunjuk • 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. Parameter names and Return type and Primitive name Transform process type value constructor -------------- Create empty list List kosong Hal 1 dari 15
  2. 2. Jika part belum ada maka Int Idpart Order insert, selain itu tambahkan -------------- Int quantity pada quantity yang ada Int Idpart Quantity part tsb berkurang Delivery ------------- Int quantity sesuai amount yang dipesan. Quantity part tsb yg howMany Int Idpart -------------- tdp di gudang Daftar Idpart yg menunjukkan Low Int minimum ------------ seluruh part yang quantity-nya telah < minimum 2. 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 idPart(p) (p)->idPart #define qty(p) (p)->qty #define next(p) (p)->next #define 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
  3. 3. { 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 ygbertambah*/ } 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
  4. 4. while (item!=nil) { if (qty(item)<min) { printf("nt Id Part = %sn",idPart(item)," unit"); } item=next(item); } }BAGIAN II. MULTILIST (Notasi Algoritmik) [20]Diketahui data pengarang dan buku. Aturan yang berlaku adalah : seorang pengarang dapatmengarang lebih dari satu buku, dan satu buku dapat dikarang oleh lebih dari satu pengarang.Pengarang dan buku memiliki identitas yang unik Contoh : Buku Pengarang B1 P1 P2 P3 B2 P2 B3 P1 P3 Representasi :Lengkapilah struktur data di bawah ini berdasarkan representasi di atas. Kamus type adrPengarang = ^ElmtPengarang type adrBuku = ^ElmtBuku type adrRelasi = ^ElmtRelasi type ElmtPengarang = <IdPengarang: string; Mengarang: adrRelasi; Next: adrPengarang> type ElmtBuku = <KodeBuku: string; Next: adrBK> type ElmtRelasi = <Pengarang: adrPengarang; Next: adrRelasi> type ListDosen = <First: adrDosen> type ListMatakuliah = <First: adrMK> Hal 4 dari 15
  5. 5. Tuliskan procedure output() untuk mencetak setiap buku beserta pengarang-pengarangnya Procedure Output (input LBuku:ListBuku; input LPengarang:ListPengarang) {I.S. LBuku adalah list buku dan LPengarang list Pengarang, keduanya terdefinisi dan tidak kosong} {F.S. Kode setiap buku beserta kode pengarang-pengarangnya telah dicetak} Kamus pBuku: adrBuku pPengarang: adrPengarang pRel: adrRelasi Algoritma pBuku ← LBuku.First while pBuku<>NIL do output(pBuku^.KodeBuku) pPengarang ← LPengarang.First while pPengarang<>NIL do pRel ← pPengarang^.Mengarang while pRel<>NIL do if pRel^.MK=pBuku then output(pPengarang^.IdPengarang) pRel ← pRel^.Next {EndWhile} pPengarang ← pPengarang^.Next {EndWhile} pBuku ← pBuku^.Next {EndWhile}Petunjuk : Selain perintah output yang ada di template soal, tidak ada perintah output lagiTuliskan procedure Jumlah() untuk mencetak jumlah buku yang sudah dikarang oleh masing-masing penulisProcedure Jumlah(input LPengarang :ListPengarang; input LBuku:ListBuku) {I.S. ListPengarang adalah list Pengarang dan LBuku list buku, keduanya terdefinisi dan tidak kosong}{F.S. Kode setiap pengarang beserta jumlah buku yang dikarangnya telahdicetak}Kamus pPengarang: adrPengarang pRel: adrRelasi JumBuku : integer {Jumlah buku}Algoritma pPengarang ← LPengarang.First while pPengarang<>NIL do output(pPengarang^.IdPengarang) pRel ← pPengarang^.Mengarang JumBuku ← 0 while pRel<>NIL do JumBuku ← JumBuku + 1 pRel ← pRel^.Next {pRel=NIL} Output(JumBuku) pPengarang ← pPengarang^.Next {pMK=NIL}Petunjuk : Selain perintah output yang ada di template soal, tidak ada perintah output lagi Hal 5 dari 15
  6. 6. BAGIAN III. PILIHAN GANDA [10]Petunjuk: pilihlah satu jawaban yang paling benar 1. Manakah tahapan aksi yang tepat untuk menghapus node P dari List L, jika diketahui kamus datanya sebagai berikut : Type Address = pointer to Elmt Type Infotype = integer Type Elmt = <Info : Infotype, Prev, Next : address> Type List = <first : Address > Var L : list P : Address A. Next (P) Nil Prev(P) Nil Next(Prev (P)) Next (P) Prev(Next (P)) Prev(P) B. Next(Next (P)) Next (P) Prev(Prev (P)) Prev(P) Next(P) Nil Prev(P) Nil C. Next(Prev (P)) Next (P) Next(P) Nil Prev(Next (P)) Prev(P) Prev(P) Nil D. Prev(Next (P)) Prev (P) Prev(P) Nil Next(Prev (P)) Next (P) Next(P) Nil E. Next(Prev (P)) Next (P) Prev(P) Nil Prev(Next (P)) Prev(P) Next(P) Nil Jawaban : E 2. Diketahui stack S1 dan S2 memiliki elemen bertipe integer, dan variabel C dan i bertipe integer. Pada stack S1 dan S2 dilakukan serangkaian operasi sebagai berikut : i traversal [1..5] push (S1,i^2) Hal 6 dari 15
  7. 7. repeat pop (S1, C) push (S2, C Div 2) until (S1 = Nil) Manakah diantara statement di bawah ini yang tidak tepat, mengenai kondisi stack S1 dan S2 : A. Setelah seluruh aksi dijalankan, stack S1 menjadi kosong, dan S2 berisi 5 elemen B. Sebelum aksi repeat dijalankan, S1 berisi hasil pangkat dua dari tiap bilangan i, mulai dari 1 sampai 5 C. Hasil yang sama pada S2 akan didapatkan, meskipun Stack S1 diganti dengan queue Q, dengan mengganti operasi push(S1, i ^2) diganti dengan AddQ(Q, i^2), dan Pop (S1, C) dengan DelQ(Q, C) D. Pada akhir proses S2 tidak Nil E. Nilai Top(S2) = 0 Jawaban : C3. Jika stack S dideklarasikan secara berkait pointer dengan deklarasi sebagai berikut : Type Address = pointer to Elmt Type Infotype = character Type Elmt = <Info : Infotype, Next : address> Type Stack = <Top : Address > S : Stack P : address Maka aksi yang dilakukan untuk menambah elemen R (bertipe character) pada stack S adalah : A. Next (P) Top(S) Top(S) P B. Next (P) Top(S) Top(S) P Alokasi (P) Info (P) R C. Alokasi (P) Next (P) Top(S) Top(S) P D. Alokasi (P) Info (P) R Next (P) Top(S) Top(S) P Hal 7 dari 15
  8. 8. E. Alokasi (P) Info (P) R Top(S) P Next (P) Top(S) Jawaban : E4. Suatu array sirkular direpresentasikan menggunakan array, dengan deklarasi : Const Nmaks : integer = 25 {jml maksimum elemen Queue} type address : integer type Queue : < Head : address,{elemen terdepan Queue} Tail : address,{elemen terakhir Queue} Count : address,{jml elemen pd Queue} TabElmt : array[1..NMaks]of integer > 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 ≠ NMaksB. Alamat Head antrian selalu lebih kecil dari alamat Tail antrianC. 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] xD. 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 : E5. Perhatikan graf berikut: A B C D E F G H Hal 8 dari 15
  9. 9. 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 : C6. Perhatikan Pohon T di bawah ini : A B C D E F G H Ifunction function F2(P:BinaryTree) integer;F1(P:BinaryTree) integer; if (P=Nil)thenif (P<>Nil)then 0 1+F1(Left(P))+F1(Right(P)) elseelse if (left(P)=Nil and right(P)=NIL)then 0; 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 : B7. 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
  10. 10. C. Simpul A merupakan internal node D. Anak kiri dari simpul K adalah J E. Simpul J hanya memiliki satu anak Jawaban : C8. Perhatikan pohon biner berikut ini : A I O E L G H J A. A I E G H J L O B. G E H I J L A O C. G E H I L J A O D. G H E L J I O A E. G E I A H L J O Jawaban : C9. Perhatikan Pohon T berikut ini : A B C D E F G H IProcedure F1(P:BinTree) Procedure Procedure F3(P:BinTree)if (P<>Nil)then F2(P:BinTree) if (P<>Nil)then Proses(P) if (P<>Nil)then F3(Left(P)) F1(Left(P)) F2(Left(P)) Proses(P) F1(Right(P)) F2(Right(P)) F3(Right(P)) Proses(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 : E10. Struktur stack umumnya digunakan pada proses-proses berikut ini, kecuali : Hal 10 dari 15
  11. 11. A. Backtracking B. Implementasi Rekursif C. Pemanggilan Prosedur D. Simulasi penjadwalan E. Implementasi operasi2 aritmatika seperti konversi infix to postfix dan evaluasi ekspresi postfixJawaban: DBAGIAN 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 definisiTabel 1 __4_ a linked list in which the rear item refers back to the head item 1.linked list 2.object __9_ reduction of a problem to a smaller instance of the same problem 3.stack Hal 11 dari 15
  12. 12. __12_ a repeated computation 4.circular list 5.loop _1__ a data structure of values linked together in memory by a chain of 6.primitive data references 7.queue 8.expression tree _3__ a data structure with last-in first-out behavior, supporting push and pop 9.recursion _10_ how to carry out a computation, may be implemented as a procedure 10. algorithm 11. reduction _7__ a data structure with first-in first-out behavior 12. iteration _15_ a predicate that becomes true when a computation ends 13. semantic 14. abstraction _5__ a programming language construct that supports iteration 15. termination _8__ a diagram showing the operators and operands of an expression condition _6__, such as numbers and symbols, that are built into the languageIsian Singkat.Telusuri dua algoritma di bawah ini kemudian tuliskan nama proses yang dilakukan algoritma-algoritma 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 (N<>nil) then Output(info(N)); Push(S,right(N)); Push(S,left(N));Algoritma tersebut melakukan proses: Preorder traversalEkivalen 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 (N<>nil) then Output(info(N)); Insert(Q,left(N)); Insert(Q,right(N)); Hal 12 dari 15
  13. 13. Algoritma tersebut melakukan proses: Level Order TraversalEkivalen terhadap proses BFS pada graf.BAGIAN V : GRAPH (Notasi Bahasa C) [20]Berikut adalah program dalam bahasa C yang digunakan untuk merepresentasikan graph berarahdalam bentuk array dengan jumlah node maksimum 10. Adapun fungsionalitas utama yang dimilikioleh 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. Jumlah Node=4 Graph 1 2 3 4 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 1 2 3 4 1 0 1 1 0 2 0 0 0 0 3 0 1 0 0 4 1 0 0 0Lengkapi program dibawah ini sehingga menghasilkan program yang utuh.Aturan : Tidak perlu menambahkan variabel ataupun baris program.#include<stdio.h>#include<conio.h>int max,graph[10][10],n1,n2;char pil;void main(){ //inisialisasi array for(n1=0;n1<10;n1++) for(n2=0;n2<10;n2++) graph[n1][n2]=0; Hal 13 dari 15
  14. 14. clrscr(); //masukkan jumlah node maksimum yang akan dipakai printf("nMasukan jumlah node : "); scanf("%d",&max); do { clrscr(); printf("nMenu :"); printf("n1. Hubungkan graph"); printf("n2. Cek Keterhubungan Node"); printf("n3. Display Array"); printf("n0. Exit"); printf("nPilihan : "); pil=getche(); if (pil==1) { printf("nMasukkan Node awal : "); scanf("%d",&n1); n1--; printf("Masukan Node Akhir : "); scanf("%d",&n2); n2--; //cek jangan sampai node yang dipilih diatas nilaimaksimum if ((n1<=max)&&(n2<=max)) { graph[n1][n2]=1; } } else if (pil==2) { for (n1=0;n1<max;n1++) { printf("nNode %d terhubung dengan : ",n1+1); for (n2=0;n2<max;n2++) { if (graph[n1][n2]==1) printf("%d ",n2+1); } } } else if (pil==3) { printf("n"); for (n1=0;n1<max;n1++) { for(n2=0;n2<max;n2++) Hal 14 dari 15
  15. 15. printf("%d ",graph[n1][n2]); printf("n"); } } getche(); } while (pil!=0);} Hal 15 dari 15

×