ear uts solusi alstrukdat 2012

6
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

Upload: teza-nugroho-alaudin

Post on 28-Dec-2015

26 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: EAR UTS Solusi Alstrukdat 2012

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: EAR UTS Solusi Alstrukdat 2012

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: EAR UTS Solusi Alstrukdat 2012

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: EAR UTS Solusi Alstrukdat 2012

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: EAR UTS Solusi Alstrukdat 2012

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: EAR UTS Solusi Alstrukdat 2012

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