UJIAN TENGAH SEMESTER GANJIL 2009/2010
NIM:
Algoritma dan Struktur Data / CS2014
Nama :
HARI : Rabu, 28 Oktober 2009
Tanda tangan: WAKTU : 135 menit
DOSEN : TIM SIFAT : Tutup Buku Petunjuk:
• Periksalah kelengkapan halaman soal. Tidak ada toleransi penilaian bagi mahasiswa yang tidak lengkap halaman soalnya.
• Soal terdiri atas dua bagian dengan rincian: tiga soal studi kasus dan lima soal pilihan ganda, dan semua dikerjakan pada lembar soal ini.
A. Bagian I. Studi Kasus [82]
Studi Kasus 1 : Kelola Data Mahasiswa
Suatu sistem harus mengelola informasi mahasiswa, matakuliah, dan registrasi matakuliah
(matakuliah MK diambil oleh mahasiswa M). Aturan yang ada adalah mahasiswa
melakukan registrasi terhadap lebih dari satu MK dan satu MK dapat diambil oleh lebih dari
satu mahasiswa. Setelah mahasiswa mengambil MK-MK tersebut maka setiap mahasiswa
akan mendapatkan nilai untuk setiap MK. Berikut ini adalah tabel mahasiswa, matakuliah,
dan relasi antara mahasiswa dan matakuliah tersebut.
Mahasiswa
MID
Nama
11308001
Bart Simpson
11308002
Milly Jones
11308003
Lisa Loeb
Matakuliah
MKID
Nama MK
SKS
CS2014
Algoritma & Struktur Data
4
MA2713
Logika Matematika
3
MA2333
Matematika Diskrit
3
CS3243
Kecerdasan Mesin dan Artifisial
3
CS3113
Teori Komputasi
3
M_MK
MID
MKID
Nilai
11308001
CS2014
65
11308001
MA2713
70
11308002
MA2333
80
11308002
CS2014
50
11308003
MA2713
73
11308003
CS3113
78
11308003
CS2014
63
Jika informasi di atas direpresentasikan dengan struktur data internal akan terlihat seperti
gambar di bawah ini:
a.
Tuliskan kamus untuk representasi struktur data di atas !
Jawab:
kamus
type ElmtMhs: <MID: string; nama: string; nextMhs: adrMhs> type ElmtMK: <MKID: string; NmMK: string; SKS: integer; nextMK: adrMK> type ElmtMM: <Nilai: integer; mhs: adrMhs; mk: adrMK;
nextMM: adrRelasi> type adrMK: ^ElmtMK
type adrRelasi: ^ElmtMM type adrMhs: ^ElmtMhs
type ListMK: <FirstMK: adrMK> type ListMM: <FirstMM: adrRelasi> type ListM: <FirstM: adrMhs>
Catatan
: untuk penamaan
variabel
atau
user defined type
harus disesuaikan dengan
procedure
yang sudah didefinisikan di bawah ini.
b.
Tuliskan algoritma
procedure
untuk menampilkan MK yang diambil oleh setiap
mahasiswa!
{Menuliskan daftar matakuliah lengkap yang diambil oleh setiap mahasiswa I.S: List Mahasiswa & M_MK terdefinisi, mungkin kosong.
F.S: Menuliskan ID_mahasiswa beserta semua ID_MK yang diambil oleh mahasiswa tsb. Jika list mahasiswa kosong, tuliskan ”List mahasiswa kosong”.}
Kamus pMhs: adrMhs pRel: adrRelasi Algoritma pMhs firstM(Lm) if pMhs=nil then
output(”List mahasiswa kosong”) else repeat output (MID(pMhs)) pRel firstMM(Lmm) while (pRel<>nil) do if (mhs(pRel)=pMhs) then output(MKID(mk(pRel))) pRel nextMM(pRel) pMhs nextMhs(pMhs) until pMhs=nil
c.
Tuliskan algoritma
procedure
untuk menghitung IPK setiap mahasiswa berdasarkan nilai
setiap MK yang diperoleh mahasiswa !
∑
∑
=
SKS
NILAI
SKS
IPK
(
*
)
Procedure HitungIPK(input Lm: ListM, input Lmm: ListMM)
{Menghitung IPK setiap mhs berdasarkan nilai & sks yang diambil I.S: List Mahasiswa & M_MK terdefinisi, mungkin kosong
F.S: Menuliskan IPK ke layar. Jika list mahasiswa kosong, tuliskan ”List mahasiswa kosong”.}
Kamus
pMhs: adrMhs pRel: adrRelasi ipk: real
totnilai, totsks: integer Algoritma
pMhs firstM(Lm) if (pMhs=nil) then
output(”List mahasiswa kosong”) else repeat output(MID(pMhs)) pRel firstMM(Lmm) totsks 0; totnilai 0 while (pRel<>nil) do
if (mhs(pRel)=pMhs) then
totsks totsks + sks(mk(pRel))
totnilai totnilai + (nilai(pRel)*sks(mk(pRel))) pRel nextMM(pRel) {hitung ipk} Ipk totnilai/totsks Output(ipk) pMhs nextMhs(pMhs) until pMhs=nil
Studi Kasus 2 : Olimpiade
Pada sebuah olimpiade dilombakan berbagai cabang olah raga. Tiap negara dapat
mengirimkan lebih dari satu atlet untuk satu cabang olah raga, dan tiap negara dapat
mengikuti lebih dari satu cabang olah raga. Seorang atlet dapat mengikuti lebih dari satu
cabang olah raga, namun seorang atlet hanya dapat mewakili satu negara.
Pada pertandingan tersebut, ada 3 medali yang diperebutkan untuk tiap cabang, yaitu Emas
(M), Perak (P) dan Perunggu (R).
Diketahui informasi yang harus dikelola adalah :
-
Negara : KodeNegara dan Nama Negara
-
Cabang Olah Raga : Nama cabang
-
Atlet : Nama Atlet dan Gender (L/P)
a.
Buatlah Deklarasi Struktur Data untuk Representasi tersebut (Representasi Berkait Pointer,
Notasi Algoritma)
Type ElmtNegara : <KdNegara : string; NamaNegara : string; FirstAtlet : adrAtlet; NextNegara : adrNegara > Type ElmtAtlet : <NamaAtlet : string;
Gender : char;
NextAtlet : adrAtlet> Type ElmtCabangOR : <NamaCabOR : string; NextCabOR : adrCabOR> Type Relasi : <CabOR:adrCabOR;
Medali:char; Atlet:adrAtlet;
NextRelasi:adrRelasi> Type adrCabOR : pointer to ElmtCabangOR; Type adrNegara : pointer to ElmtNegara; Type adrAtlet : pointer to ElmtAtlet;; Type adrRelasi : pointer to Relasi;
Type ListNegara : <FirstNegara : adrNegara > Type ListCabangOR : <FirstCabangOR : adrCabOR> Type ListRelasi : <FirstRelasi : adrRelasi>
b.
Berdasarkan dekarasi di atas, buatlah Primitif untuk menampilkan Perolehan Medali Emas (Dari
Cabang OR mana dan nama Atlet yang mendapatkannya)
Procedure Tampil_Perolehan_Emas (input LR : ListRelasi; LN : ListNegara; LC :
ListCabangOR) {IS. Terdefinisi LR, LN dan LC}
{FS. Menampilkan Hasil Perolehan Medali Emas serta nama atlet dan nama Cabang Olah Raganya} Kamus R : adrRelasi Algoritma R LR.First While (R≠Nil) do If (R
↑
.Medali=‘M’)then Output(R
↑.CabOR↑.NamaCabOR
)
Output(R
↑.Atlet↑.NamaAtlet
)
R R↑
.NextRelasi {R=Nil}Studi Kasus 3 : Level User Name
Perhatikan Ilustrasi Multi-List Berikut ini
Dari ilustrasi Multilist tersebut diatas, diketahui :
•
F1 dan F2 adalah First address dari List Username dan List LevelUser
•
L1 dan L2 adalah Last address dari List Username dan List LevelUser
•
Info Element List UserName berisikan: Agus, Budi, Chandra, Dudi, Endang
•
Info Element List Level User berisikan: Administrator, Supervisor, User, Guest
a.
Tuliskan kamus dari representasi struktur data di atas !
Jawab:
Kamus
Type adrUser : pointer to ElmtUser Type adrRelasi : pointer to ElmtRelasi Type adrLevel : pointer to ElmtLevel Type ElmtUser : < userName: string;
namaLevel: adrRelasi; nextUser: adrUser > Type ElmtRelasi : < kodeLevel: adrLevel;
nextRelasi: adrRelasi > Type ElmtLevel : < namaLevel: string;
nextLevel: adrLevel > Type ListUser : < firstUser : adrUser;
lastUser : adrUser > Type ListLevel : < firstLevel : adrLevel;
lastLevel : adrLevel >
b.
Tuliskan algoritma untuk menuliskan informasi seluruh Level User yang ada berikut
Usernamenya.
Procedure
ListFullLevelUser(input LLevel : ListLevel; input LUser : ListUser)I.S.: List terdefinisi dan mungkin Kosong,
tersebut.
Kamus
pLev : adrLevel; pRel : adrRelasi; pUsr : adrUser;Algoritma
pLev LLevel.First if pLev = NIL thenoutput (“List Level User Masih Kosong…!”) else
repeat
output (pLev^.namaLevel) pUsr LUser.First while pUsr <> NIL
pRel PUsr^.namaLevel while pRel<>NIL
if pRel = pLev then
output (pUsr^.userName) pRel pRel^.Next {end while} pUsr pUsr^.Next {end while} until pLev=NIL {end if}
B. Bagian II. Pilihan Ganda [18]
Berilah tanda silang (X) pada jawaban yang tepat. Poin setiap soal adalah 3
[1] Diketahui definisi kamus dan gambar sebagai berikut:
Kamus :
{List direpresentasi dg pointer}
Type Address : ^ElmtList {pointer to ElmList juga boleh} type InfoType : ………{terdefinisi}
type ElmtList : <Info: InfoType, Next: address> type List : address
first : List
Dibawah ini adalah potongan algoritma yang benar agar P menunjuk elemen terakhir dari
list adalah :
A.
Procedure NunjukAkhir (input L : list , output P:address )
{IS : Terdefinisi L
FS : P menunjuk elemen terakhir dari List, elemen list tidak
berubah}
Kamus :
Algoritma :
P
←
←
←
←
L.First
while P <> nil do
P
←
←
←
←
P^.next
B.Procedure NunjukAkhir (input L : list, output P:address )
{IS : Terdefinisi L
FS : P menunjuk elemen terakhir dari List, elemen list tidak
berubah}
Kamus :
Algoritma :
P
←
←
←
←
L.First
while P ^.next<> nil do
P
←
←
←
←
P^.next
C.
Procedure NunjukAkhir (input L : list, output P:address )
{IS : Terdefinisi L
FS : P menunjuk elemen terakhir dari List, elemen list tidak
berubah}
Kamus :
P
←
←
←
←
First
while P <> nil do
P
←
←
←
←
P^.next
D.
Procedure NunjukAkhir (input L : list, output P:address )
{IS : Terdefinisi L
FS : P menunjuk elemen terakhir dari List, elemen list tidak
berubah}
Kamus :
Algoritma :
P
←
←
←
←
First
while P^.next <> nil do
P
←
←
←
←
P^.next
E.
Procedure NunjukAkhir (input L : list, output P:address )
{IS : Terdefinisi L
FS : P menunjuk elemen terakhir dari List, elemen list tidak
berubah}
Kamus :
Algoritma :
while P^.next <> nil do
L.First
←
←
←
←
L.First^.next
P
←
←
←
←
L.First
[2] Perhatikan Ilustrasi List dengan diketahui First dan Last berikut ini
Dari ilustrasi tersebut, algoritma untuk melakukan proses
InsertLast()
yang paling tepat
adalah :
A.
Next(New)
Last
Last
New
B.
Next(Last)
New
Next(New)
Last
C.
Next(Last)
New
Last
New
D.
Next(New)
Nil
Next(Last)
Last
E.
Last
New
Next(Last)
New
[3]
Jika terdapat definisi kamus sebagai berikut:
KamusType adrRelasi: pointer to ElmtRelasi Type adrPeg: pointer to ElmtPeg
Type infopeg: < idPeg: string; tglLahir: date;
namaPeg: string; >
Type infoproj: < id_Proj: string; Deskripsi: string;
Tarif: integer; >
Type ElmtRelasi: < waktu: integer; Pegawai: adrPeg; Proyek: adrProj; nextRelasi: adrRelasi > Type ElmtPeg: < infoP: infopeg; nextPeg: adrPeg > Type ElmtProj: < infoPr: infoproj; nextProj: adrProj > Type ListPProj: adrRelasi Type ListPeg: adrPeg Type ListProj: adrProj
Manakah representasi struktur data internal berikut ini yang tepat berdasarkan kamus
di atas ?
B.
C
.
E.
[4] Pernyataan manakah yang salah dari sejumlah pernyataan tentang struktur data list dibawah
ini :
A.
List merupakan struktur data yang bersifat dinamis
B.
Elemen-elemen list memiliki tipe yang sama
C.
Pada deklarasi list secara kontigu, alamat elemen berikutnya (Next) tidak perlu
disimpan secara eksplisit
D.
Sebuah deklarasi tabel untuk representasi list secara kontigu dapat berisi lebih dari
satu list
E.
Sebuah deklarasi tabel untuk representasi list berkait kontigu dapat berisi lebih dari
satu list
[5]
Bentuk list dengan bagian Next dari elemen terakhir menunjuk ke alamat elemen
pertama dikenal dengan istilah :
A.
Circular Linked List
B.
Double Linked List
C.
Linear Linked List
D.
Double Circular Linked List
E.
Jawaban A dan D benar
[6]
Diketahui penggalan algoritma berikut ini :
Procedure Tebak(input/output L : List, output P : address) {IS. Terdefinisi List L dan address P}
{FS. ………..} Kamus
Q : address Algoritma
PFirst(L); Q First(L) While (Next(Q)≠ First(L))do Q Next(Q))
Next(Q) Next(First(L)) First(L) Next(First(L)