UJIAN AKHIR SEMESTER GANJIL 2009/2010
Algoritma dan Struktur Data / CS
HARI : Rabu, 6 WAKTU : 135 menit
DOSEN : TIM
SIFAT : Tutup Buku
1 2
Petunjuk:
• Periksalah kelengkapan halaman soal. Tidak ada toleransi penilaian bagi mahasiswa lengkap halaman soalnya.
• Soal terdiri atas .... bagian dengan rincian: ini.
BAGIAN I. Decimal to Binary Conversion
Tuliskan Procedure Dec2Bin(melakukan konversi bilangan desimal ke biner
dengan struktur data STACK. Asumsi beberapa primitif beri
Function IsEmpty(S: Stack)
{Mengirimkan TRUE jika stack kosong} Procedure Push(I/O S: Stack,
{Menambahkan X sebagai elemen stack S}
{I.S. S mungkin kosong, tabel penampung elemen stack TIDAK penu F.S. X menjadi TOP yang baru, TOP bertambah 1}
Procedure Pop(I/O S: Stack, {Menghapus X dari stack S} {I.S. S tidak mungkin kosong}
{F.S. X adalah nilai elemen TOP yang lama, TOP berkurang 1} Procedure Dec2Bin(I/O S: Stack;
{Mengkonversi Number kedalam representasi bilangan biner} {I.S. Stack kosong}
{F.S. Menuliskan ke layar hasil konversi Number dalam representasi biner. Stack kosong}
Kamus lokal
Quotient, remainder : integer Hasil : integer
SEMESTER GANJIL 2009/2010
NIM:Algoritma dan Struktur Data / CS2014
Nama :6 Januari 2010
Tanda tangan: 135 menit
p Buku
3 4 5
Periksalah kelengkapan halaman soal. Tidak ada toleransi penilaian bagi mahasiswa
bagian dengan rincian: , dan semua dikerjakan pada lembar soal
Decimal to Binary Conversion [9]
rocedure Dec2Bin(I/O S: Stack; input Number: integer
konversi bilangan desimal ke biner & menuliskan hasilnya. Implementasikan dengan struktur data STACK. Asumsi beberapa primitif berikut telah diimplementasikan.
IsEmpty(S: Stack) boolean
{Mengirimkan TRUE jika stack kosong}
S: Stack, input X: integer); {Menambahkan X sebagai elemen stack S}
{I.S. S mungkin kosong, tabel penampung elemen stack TIDAK penu F.S. X menjadi TOP yang baru, TOP bertambah 1}
S: Stack, output X: integer); {Menghapus X dari stack S}
{I.S. S tidak mungkin kosong}
{F.S. X adalah nilai elemen TOP yang lama, TOP berkurang 1} S: Stack; input Number: integer) {Mengkonversi Number kedalam representasi bilangan biner}
{F.S. Menuliskan ke layar hasil konversi Number dalam representasi
integer
T
Periksalah kelengkapan halaman soal. Tidak ada toleransi penilaian bagi mahasiswa yang tidak , dan semua dikerjakan pada lembar soal
I/O S: Stack; input Number: integer) untuk & menuliskan hasilnya. Implementasikan kut telah diimplementasikan.
{I.S. S mungkin kosong, tabel penampung elemen stack TIDAK penuh
{F.S. X adalah nilai elemen TOP yang lama, TOP berkurang 1}
Algoritma
{proses konversi decimal to binary} While Number <> 0
Quotient number div 2;
Remainder number mod 2;
Push(S,remainder); Number quotient;
{tulis hasil ke layar} While (!IsEmpty(S))
Pop(S,hasil); Output(hasil);
Bagian II. Recursive Problem [9]
Diketahui kamus sebagai berikut:Type Address : ^node
Type node : <left : address, info : infotype, right : address> Type bintree : address
Tuliskan algoritma rekursif untuk mencari sebuah nilai x pada BST.
Function TreeSearch (P : bintree , x : infotype) address
{Mengembalikan alamat dari info x jika ditemukan, mengembalikan NIL jika tidak ditemukan}
Kamus
if (P = NIL) OR (x = info(P)) then return P
else if (k < info(P)) then
return TreeSearch (left(P),x) else
return TreeSearch (right(P),x)
Bagian III. Graph [37]
Diberikan sebuah graf berarah dengan 4 buah simpul seperti yang ditunjukkan gambar berikut.
a. Gambarkan representasi graf di atas dengan menggunakan representasi adjacency list dimana vertex direpresentasikan secara kontigu dan relasi antar vertex dalam representasi berkait pointer [6]
Jawab:
b. Gambarkan representasi graf di atas dengan menggunakan varian dari representasi adjacency list yaitu vertex dan relasi antar vertext dalam representasi berkait pointer.[6]
Jawab:
c. Tuliskan deklarasi struktur data untuk representasi berkait pointer graf di atas [6] Jawab:
Type simpul : pointer to tagSimpul Type sisi : pointer to tagSisi
Type tagSimpul : < firstsisi : sisi ; infonya di mana? Nextsimpul : simpul>
Type tagSisi : <endpoint : simpul; Nextsisi : sisi> Type graf : simpul
d. Tuliskan algoritma Topological Sort dari graf di atas dengan mengimplementasikan struktur data queue. Asumsi beberapa primitif queue berikut sudah diimplementasikan. [15]
Procedure CreateEmpty(Output Q: Queue); I.S sembarang
F.S sebuah Q kosong terbentuk Proses. Membuat sebuah Q kosong Function IsEmpty(Q:Queue) boolean
Mengembalikan nilai TRUE jika Q kosong, FALSE jika tidak Procedure Add(I/O Q: Queue, x: vertex);
I.S Q mungkin kosong, tabel penampung elemen Q tidak penuh F.S x menjadi tail yang baru, tail “maju”
Procedure Del(I/O Q:Queue, output x:vertex); I.S Q tidak mungkin kosong
F.S X adalah nilai elemen head pada I.S Jawab:
Procedure TopSort(input G:graph; output TopS: Tabel)
I.S Graph G terdefinisi & indegrees tiap vertex telah disimpan dalam tabel indegree yang didefinisikan secara global.
F.S Urutan node hasil pengurutan tersimpan dalam tabel TopS Kamus Q: Queue; i: integer; v,w: vertex; Algoritma CreateEmpty(Q); for each vertex v do
if indegree[v]=0 then Add(Q,v);
If (IsEmpty(Q)) then
Output(“Graph has a cycle”) Else
i=1; Repeat
Del(Q,v); TopS[i]=v; i=i+1;
for each w adjacent to v do indegree[w]=indegree[w]-1 if indegree[w]=0 then
add(Q,w); Until (IsEmpty(Q))
e. Tuliskan hasil urutan topologis dari graf di atas [4] Jawab:
4-1-2-3-5
Bagian IV. Queue [24]
Perhatikan ilustrasi queue di bawah ini.
a. Tuliskan kamus yang merepresentasikan queue di atas [6].
Kamus Data
type ElementQueue : <Nama: string;
nextQueue: adrQueue> type adrQueue : ^ElementQueue
type QQueue : <FrontQueue: adrQueue; RearQueue:adrQueue>
b. Tuliskan algoritma untuk melayani antrian yang sudah ada [9]
Procedure QueueRemove(Input/Output QQ: QQueue)
{Mengambil sebuah element pada Queue dan menampilkan Info Namanya dengan aturan FIFO
I.S. Queue Terdefinisi dan mungkin kosong
F.S. Queue berkurang sebuah Elemen atau mungkin menjadi Kosong, jika Queue yang akan dilayani ternyata Kosong, maka akan menampilkan Queue Masih Dalam Keadaan Kosong }
Kamus :
P : AdrQueue; Algoritma
P QQ.FrontQueue
Output (P^.Nama)
QQ.FrontQueue P^.nextQueue
Dealokasi (P)
c. Tuliskan algoritma untuk menampilkan seluruh elemen yang ada pada Queue tersebut [9]
Procedure QueueDisplay(Input QQ: QQueue) {Menampilkan seluruh element pada Queue I.S. Queue Terdefinisi dan mungkin kosong
F.S. Seluruh Element Queue Ditampilkan Info Namanya } Kamus : P : AdrQueue; Algoritma P QQ.FrontQueue While (P <> Nil) Output (P^.Nama) P P^.nextQueue
Bagian V. Heap Tree [21]
Diketahui kumpulan integer tersimpan dengan struktur Heap, dengan representasi Berkait Pointer. Nilai maksimum menempati posisi root, dan diasumsikan tiap nilai adalah unik.
a. Buatlah deklarasi struktur Heap tersebut [6]
type adrHeap : Pointer to Elmt
type Elmt : <info : integer, Left : adrHeap, Right : adrHeap> type Heap : adrHeap
H : Heap
b. Buatlah prosedur insert pada pohon Heap, dengan menggunakan stack dan queue yang masing-masing
elemennya bertipe adrHeap. Diketahui pada kamus global telah terdefinisi sejumlah primitif [15]: {Kamus Global}
Procedure CreateEmptyS (Output S : Stack) {Membuat sebuah stack kosong}
{I.S : sembarang}
{F.S : sebuah stack S kosong siap dipakai terdefinisi} Function StackEmpty (S: Stack) boolean
{Test stack kosong : mengirim true jika tumpukan kosong, false jika tumpukan tidak kosong}
Procedure PushS (Input/Output S : Stack Input E : Infotype)
{Menambahkan sebuah elemen baru pada TOP, dengan elemen yang diketahui informasinya}
{IS. Terdefinisi stack S mungkin kosong, dan elemen E FS. Info E ditambahkan sebagai elemen Top dari S}
Procedure PopS (Input/Output S : Stack; Output E : Infotype) {I.S : stack tidak kosong}
{F.S : info elemen TOP disimpan pada E, alamat TOP yang lama didealokasi} {Menghapus elemen stack, stack tidak boleh kosong dan mungkin setelah penghapusan stack menjadi kosong}
Procedure CreateEmptyQ (output Q : Queue) {IS. –
FS. Terdefinisi Queue kosong}
Function QueueEmpty (Q : Queue) boolean
{Test terhadap Queue, True jika kosong, False jika tidak} Procedure AddQ (input/output Q : Queue; input E : infotype) {IS. Terdefinisi queue Q mungkin kosong, dan elemen E FS. Info E ditambahkan sebagai elemen pertama dari Q} Procedure DelQ (input/output Q : Queue; output E : infotype) {IS. Terdefinisi queue Q tidak kosong
FS. E berisi info elemen yang dihapus dari Q, elemen pertama didealokasi} Procedure Tukar(input/output X,Y : integer)
{IS. Terdefinisi nilai X dan Y} {FS. Nilai X = Y, dan Y = X} Jawaban :
Procedure Insert_Heap (input/Output H : Heap, input X : adrHeap) {IS. Terdefinisi pohon Heap H mungkin kosong, dan elemen X } {FS. Elemen X ditambahkan pada pohon Heap}
Kamus
P : adrHeap
V, Child, Parents :adrHeap Q : Queue; S : Stack
Algoritma
{kasus kosong, Elemen X menjadi Root} If (H=Nil) then
H X
Else
{Meletakkan Elemen X pada node terakhir dari pohon Heap} CreateEmptyQ(Q) {Create Empty Queue}
CreateEmptyS(S) {Create Empty Stack}
Stop False {Inisialisasi variabel boolean} P H {P menunjuk ke H}
AddQ(Q,P)
While Not Stop do DelQ(Q,P)
If (Left(P)≠Nil and Right(P)≠Nil) then AddQ(Q,Left(P))
AddQ(Q,Right(P)) PushS(S,P)
Kok ngga ada P = Next(P)?? else
Stop True
{Stop = True, (Left(P)=Nil) or (Right(P) =Nil) } If Left(P)=Nil then Left(P) X Else Right(P) X PushS(S,P)
{Heapifying : membentuk struktur Heap, nilai parents > nilai children}
Child X
Stop False
While Not StackEmpty(S)and not Stop do PopS(S,P)
Parents P
If Left(Parents) = Child or Right(Parents)=Child then If Info(Parents) < Info(Child) then
Tukar(Info(Parents),Info(Child)) Child Parents else Stop True {StackEmpty or Stop}