ear uts solusi alstrukdat 2012
TRANSCRIPT
Page 1 of 6
Nama : NIM : Kelas : Ruang :
UTS Sem. I 2012/2013 CSG2A3 (Desain Algoritma dan Struktur Data)
Senin 5 November 2012 Pk. 13.00 - 15.00 (120 menit)
ADE, EAR, SRV, FSV, UNW, RVI, DQU
= Dilarang keras bekerja sama. Jika dilakukan, maka dianggap pelanggaran =
Kerjakan soal langsung pada kertas ujian ini.
Nama Mahasiswa:
SOLUSI
NIM:
…………………….......
Kls:
Ruang:
………....
Nilai (Diisi Dosen):
Salinlah pernyataan berikut:
Saya mengerjakan ujian ini dengan jujur dan mandiri. Jika saya
melakukan pelanggaran, maka saya bersedia menerima sanksi.
Tanda Tangan Mahasiswa:
...................................................... ....................................................................................................
....................................................................................................
....................................................................................................
Total POINT keseluruhan soal = 135.
Anda bebas memilih prioritas pengerjaan soal, dahulukan mengerjakan soal yang paling dikuasasi.
Soal Bagian I: Isian Singkat
1. Perhatikan ilustrasi list T sebagai berikut :
Lengkapi kolom Hasil Eksekusi sesuai dengan kode algoritma di kolom Pernyataan (Total Point = 10)
No Pernyataan Hasil Eksekusi
1 K.info -4
2 W.next.info Nil / null
3 P.info + K.next.info 30
4
If (P.next.next.info < -4) then
K.info <-- W.info - 4
else
K.info <-- K.next.info - 4
Isi K.info saat ini -14
5
If (K.next.next.info < -4) then
K.info <-- P.info - 4
else
K.info <-- P.next.info - 4
Isi K.info saat ini 6
Page 2 of 6
Nama : NIM : Kelas : Ruang :
Soal Bagian II : ESSAY BEBAS
A. ADT (TOTAL POIN = 20)
Terdapat data 100 pelamar kerja pada PT ANGIN RIBUT. Untuk menyimpan data tersebut, akan didefinisikan type data
PELAMAR. Berikut ilustrasi type data PELAMAR :
PELAMAR
Nama Fulan Fulanah
No Tes 12345
Pendidikan S1
IPK 3.15
Nilai Tes
Nilai Tes Pengetahuan 90
Nilai Tes Skill 86
Nilai Tes Wawancara 78
Nilai Rata-rata 84,67
a. Buatlah definisi struktur data type PELAMAR (POIN = 5)
Jawab : type nilai : <tespengetahuan : integer, tesskill : integer, teswawancara : integer, ratarata : real> type pelamar : <nama : string, no_tes : integer/string, pendidikan : string /[S1,D3], IPK : real, Nilaites : nilai>
b. Buatlah function atau procedure (definisi serta implementasi) dengan spesifikasi sebagai berikut :
i) Function untuk membentuk Data Pelamar dari komponen-komponen (5 Point)
Input : Nama, No Tes, Pendidikan, IPK, Nilai Tes Pengetahuan, Nilai Tes Skill, Nilai Tes Wawancara.
Output : sebuah variabel bertipe PELAMAR
Jawab : function MakePelamar (nama:string,notes:integer/string,pendidikan:string,IPK:real,tespeng:integer,tesskill:integer, teswwcr:integer) ���� pelamar Kamus P : pelamar Algoritma P.nama nama P.notes notes P.pendidikan pendidikan P.IPK IPK P.nilai.tespeng tespeng P.nilai.tesskill tesskill P.nilai.teswawancara teswwcr P.nilai.ratarata 0 ���� P
ii) Procedure untuk melakukan penghitungan nilai rata-rata tes pelamar. (5 point)
Input : sebuah variabel bertipe PELAMAR dengan data Nilai Rata-Rata masih kosong. Output : sebuah
variabel bertipe PELAMAR dengan Data Nilai Rata-rata telah terisi.
Nilai Rata-rata =(Nilai Tes Pengetahuan + Nilai Tes Skill + Nilai Tes Wawancara) / 3
Jawab : Procedure SetRataRata (input/ouput P:pelamar) Algoritma P.nilai.ratarata (P.nilai.tespeng + P.nilai.tesskill + P.nilai.teswawancara)div 3
iii) Buat sebuah program utama yang di dalamnya terdapat pemanggilan terhadap function dan procedure yang
telah didefinisikan (5 point).
Jawab : Program TestKerja Kamus P : Pelamar
Page 3 of 6
Nama : NIM : Kelas : Ruang :
Nama,no_tes,pddkn : string IPK, nilaitespeng, nilaitesskill, nilaiteswwcr : integer Algoritma Output (“masukkan nama pelamar”) input (nama) Output (“masukkan nomor tes pelamar”) input (no_tes) Output (“masukkan pendidikan pelamar”) input (pddkn) Output (“masukkan IPK pelamar”) input (IPK) Output (“masukkan nilai tes pengetahuan pelamar”) input (nilaitespeng) Output (“masukkan nilai tes skill pelamar”) input (nilaitesskill) Output (“masukkan nilai tes wawancara pelamar”) input (nilaiteswwcr)
P MakePelamar(nama,notes,pddkn,IPK,nilaitespeng,nilaitesskill,nilaiteswwcr) SetRataRata(P)
Soal Bagian II : ESSAY
B. LIST LINIER (TOTAL POIN = 40)
Untuk menyimpan data pemain sepakbola sebuah kesebelasan, digunakan struktur data List Linier. Informasi yang disimpan
untuk setiap pemain adalah :
Nomor punggung, nama lengkap, tinggi badan
Data pemain dalam List TIDAK TERURUT berdasar kriteria tertentu.
a. Buat definisi type untuk kasus tersebut (POIN = 5).
Jawab : Type Player : <nopunggung:integer,nama:string,tinggi:integer> Type ElmtList : <info:Player,next:address> Address : pointer to ElmtList Type ListPlayer : <First:address>
b. Buat procedure untuk menambahkan data seorang pemain (POIN = 5)
Jawab : Procedure InsertPlayer (input/output LP:ListPlayer, input nopunggung:integer, input nama:string, input tinggi:integer) {I.S : List Pemain mungkin kosong, data pemain : nomor punggung,nama,tinggi terdefinisi} {F.S : Pemain Baru akan ditambahkan ke dalam list, sebagai elemen pertama / Insert First} Kamus P : address Function Alokasi(nopunggung:integer,nama:string,tinggi:integer)->ElmtList {mengembalikan sebuah address untuk alokasi ElmtList} Algoritma P Alokasi(nopunggung,nama,tinggi) If (P <> nil) then {alokasi berhasil}
P↑.next LP.First LP.First P
c. Buat procedure untuk menghapus data seorang pemain, berdasarkan informasi nomor punggung (POIN = 20)
Jawab : Procedure DelPlayer (input nopunggung:integer,input/output LP:ListPlayer) {I.S : list TIDAK kosong} {F.S : pemain dengan nomor punggung sesuai input akan dihapus dari list dan didealokasi} Kamus PDel, Prec : address Found : boolean Algoritma {search elemen dengan nopunggung sesuai input}
Prec nil
PDel LP.First Found false While (PDel<>Nil) and (not found) do If (PDel↑.info.nopunggung = nopunggung) then
Found true Else
Prec PDel
PDel PDel↑.next {PDel = nil or found} If (found) then If (PDel= LP.First) then {delete first}
LP.First LP.First↑.next Else {delete after}
Page 4 of 6
Nama : NIM : Kelas : Ruang :
Prec↑.next PDel↑.next Dealokasi (PDel) Else Output (“data yang akan dihapus tidak ditemukan”)
d. Buat function untuk mencari pemain yang paling tinggi badannya. Output berupa nomor punggung pemain yang paling
tinggi. Asumsi List TIDAK kosong. (POIN = 10)
Jawab : Function SearchMaxTinggi(LP:ListPlayer)� integer Kamus tempmax : integer P : address No_punggung : integer Algoritma P LP.First
tempmax 0 While (P <> nil) do If (tempmax < P↑.info.tinggi) then tempmax P↑.info.tinggi
No_punggung P↑.info.nopunggung P P↑.next
{P = nil}
� No_punggung
Soal Bagian II : ESSAY
C. VARIASI LIST LINIER (TOTAL POIN = 30)
Akan dibuat sebuah list untuk menyimpan data berupa nilai integer, yang disimpan dengan terurut secara MEMBESAR.
Perhatikan ilustrasi double-linked dan circular list sebagai berikut :
Double-linked list
Circular list
a. Buat struktur data (type) untuk kasus tersebut, jika List yang akan digunakan adalah Double-Linked-List (point = 5)
Jawab : Type ElmtList : <info:integer, prev:address, next:address> address : pointer to ElmtList Type List : <First:address>
b. Buat struktur data (type) untuk kasus tersebut, jika List yang akan digunakan adalah Circular-List (point = 5)
Jawab : Type ElmtList : <info:integer, next:address> address : pointer to ElmtList Type List : <First:address>
c. Buat procedure untuk menyisipkan sebuah data baru, dengan tetap menjaga keterurutan elemen list. Anda boleh
memilih menggunakan representasi double-linked atau circular, beri keterangan ! (point = 20)
Jawab :
{double-linked} Procedure InsertUrut (input/output L:List,input angka:integer) {Kamus}
P,PAlloc : address {Algoritma}
PAlloc Alokasi(angka) If (PAlloc <> nil) then
Page 5 of 6
Nama : NIM : Kelas : Ruang :
If (L.First = nil)then {insert first} PAlloc↑.next nil PAlloc↑.prev nil
L.First PAlloc Else {search posisi yang tepat}
P L.First While (P <> nil) and (angka > P↑.info) do
P P↑.next {P = nil or angka ≤ P↑.info} If (P <> nil) then {menemukan elemen list dengan P↑.info ≥ angka} if (P↑.prev = nil) then {insert first} PAlloc↑.next P PAlloc↑.prev nil
L.First PAlloc Else {insert before} P↑.prev↑.next PAlloc
PAlloc↑.prev P↑.prev PAlloc↑.next P P↑.prev PAlloc Else {kalau berhenti di P = nil, artinya angka yang dimasukkan adalah paling besar dibanding semua elemen list} {insert last} PAlloc↑.prev P
P↑.next PAlloc
{circular} Procedure InsertUrut (input/output L:List,input angka:integer) Kamus P,Prec,PAlloc : address Algoritma PAlloc Alokasi(angka) If (PAlloc <> nil) then If (L.First = nil) then {insert first} PAlloc↑.Next PAlloc L.First PAlloc Else {search posisi yang tepat}
Prec nil
P L.First While (P↑.next <> L.First) and (angka > P↑.info) do
Prec P
P P↑.next { P↑.next = L.First) or (angka ≤ P↑.info} If (Prec = nil) and (angka < P↑.info) then {insert first, cari last-nya dulu} While (P↑.next <> L.First) do
P P↑.next { P↑.next = L.First } PAlloc↑.next L.First
P↑.next PAlloc L.First PAlloc Else if (P↑.next = L.First) then {insert last} If (angka > P↑.info) then
PAlloc↑.next P↑.next P↑.next PAlloc Else Else {insert after}
PAlloc↑.next P Prec↑.next PAlloc
B A C
First
x u
List Pegawai
Page 6 of 6
Nama : NIM : Kelas : Ruang :
D. MULTI LIST (TOTAL POINT = 35)
Diketahui definisi type multilist dan ilustrasinya sebagai berikut :
type ElmPeg : <NIP: string,
Nama: string, FirstAnak: adrAnak, NextPeg: adrPeg>
type ElmAnak : <Nama:string, NextAnak: adrAnak> type adrPeg : pointer to ElmPeg type adrAnak : pointer to ElmAnak
Buatlah implementasi primitif berikut : a. procedure InsertAnak(input/output L:adrPeg;input NIPPeg:string, NamaAnak:string) (poin
= 20) {mendaftar anak yg baru lahir, insert selalu di awal list} {I.S. List pegawai terdefinisi F.S. Jika pegawai dg NIP=NIPPeg ada, alokasi anak (gunakan fungsi alokasiAnak yang tersedia), insert anak sebagai elemen pertama list anak dari pegawai yang bersesuaian. function alokasiAnak (nmAnak: String) � P: adrAnak {fungsi ini melakukan alokasi memori untuk nmAnak dalam bentuk adrAnak} } Jawab : Kamus PPeg : adrPeg PAnak : adrAnak Algoritma PPeg L If (PPeg <> nil) then While (PPeg <> nil) and (PPeg↑.NIP <> NIPPeg) do PPeg PPeg↑.NextPeg {PPeg = nil or PPeg↑.NIP = NIPPeg} If (PPeg <> nil) and (PPeg↑.NIP = NIPPeg) then {insert first anak}
PAnak alokasiAnak(NamaAnak) If (PAnak <> nil) then
PAnak↑.NextAnak PPeg↑.FirstAnak PPeg↑.FirstAnak PAnak b. procedure HitungAnak(input L: adrPeg) (poin=15) {menampilkan jumlah anak setiap pegawai} {I.S. List pegawai terdefinisi, tidak kosong. F.S. NIP dan Nama Pegawai beserta jumlah anak yang dimiliki dituliskan ke layar. Jika pegawai tidak punya anak, tulis jumlah anak = 0}. Kamus Jumanak : integer PAnak : adrAnak PPeg : adrPeg Algoritma
PPeg L While (PPeg <> nil) do Output (‘NIP pegawai : ‘,PPeg↑.NIP) Output (‘Nama pegawai : ‘,PPeg↑.Nama)
Jumanak 0
PAnak PPeg↑.FirstAnak While (PAnak <> nil) do
Jumanak Jumanak + 1
PAnak PAnak↑.NextAnak {PAnak = nil} Output (‘jumlah anak pegawai : ‘,Jumanak)
PPeg PPeg↑.NextPeg