Você está na página 1de 6

Page 1 of 6

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:
NIM:
Kls:
Ruang:
Nilai (Diisi Dosen):
SOLUSI
.......
....
Salinlah pernyataan berikut:
Tanda Tangan Mahasiswa:
Saya mengerjakan ujian ini dengan jujur dan mandiri. Jika saya
melakukan pelanggaran, maka saya bersedia menerima sanksi.
......................................................
....................................................................................................
....................................................................................................
....................................................................................................
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

K.info

W.next.info

Nil / null

P.info + K.next.info

30

Nama :

-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

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

NIM :

Kelas :

Ruang :

Page 2 of 6
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 :

Nama

PELAMAR
Fulan Fulanah

No Tes

12345

Pendidikan

S1

IPK

3.15

Nilai Tes

a.

Nilai Tes Pengetahuan

90

Nilai Tes Skill

86

Nilai Tes Wawancara

78

Nilai Rata-rata
Buatlah definisi struktur data type PELAMAR (POIN = 5)

84,67

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:intege
r, 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

Nama :

NIM :

Kelas :

Ruang :

Page 3 of 6
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}

Nama :

NIM :

Kelas :

Ruang :

Page 4 of 6
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

Nama :

NIM :

Kelas :

Ruang :

Page 5 of 6
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
First

Nama :

NIM :

List Pegawai

Kelas :

Ruang :

Page 6 of 6
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

Nama :

NIM :

Kelas :

Ruang :

Você também pode gostar