You are on page 1of 5

Latihan Soal List Rekursif (2

)

Asumsikan semua fungsi dan prosedur yang terdapat dalam “Studi List Rekursif dalam Konteks Prosedural” dapat digunakan.

Jawaban dibawah ini belum dijamin kebenarannya (bukan solusi resmi), jika menemukan solusi yang kurang efektif / kurang tepat, harap hubungi saya (freedom_holicx@yahoo.com / iskandarsetiadi@students.itb.ac.id). Saran dan Kritik untuk perbaikan kedepannya sangat diharapkan.

Kesepakatan: Selektor yang digunakan adalah Info(P) untuk elemen pertama, Tail(P) untuk List rekursif selanjutnya Konso menggunakan parameter (e : infotype, L : List)

ISKANDAR SETIADI – FREEDOMOFKEIMA 2012

01

Latihan 1 function CountPos(L : List)  integer { Fungsi CountPos menghitung banyaknya kemunculan bilangan positif (>0) yang ada didalam List } KAMUS LOKAL ALGORITMA if (IsEmpty(L)) then {Basis 0}  0 else {rekurens} depend on Info(L) Info(L) > 0 :  1 + CountPos(Tail(L)) Info(L) <= 0 :  CountPos(Tail(L))

Latihan 2 procedure DeleteNeg(input/output L : List) { I.S. : List L mungkin kosong } { F.S. : Semua elemen Negatif (< 0) dihapus dari List dan di Dealokasi } KAMUS LOKAL LTemp : List ALGORITMA if (IsEmpty(L)) then {Basis 0} L  Nil else {rekurens} LTemp  L depend on Info(L) Info(L) < 0 : DeleteNeg(Tail(L)) Info(L) >= 0 : L  Konso(Info(L), DeleteNeg(Tail(L))) Dealokasi(LTemp)

ISKANDAR SETIADI – FREEDOMOFKEIMA 2012

02

Latihan 3 procedure CopyPos(input L1 : List, output L2 : List) { I.S. : List L1 mungkin kosong } { F.S. : Semua elemen positif dari L1 menjadi L2 } KAMUS LOKAL LTemp : List ALGORITMA if (IsEmpty(L1)) then {Basis 0} L2  Nil else {rekurens} CopyPos(Tail(L1),LTemp) depend on Info(L1) Info(L1) > 0 : L2  Konso(Info(L1),LTemp) Info(L1) <= 0 : L2  LTemp

Latihan 4 procedure SortedIns(input/output L : List, input X : infotype) { I.S. : List L terurut menaik, mungkin kosong } { F.S. : Elemen X menjadi bagian dari L } KAMUS LOKAL LTemp : List ALGORITMA if (IsEmpty(L)) then {List kosong} L  Alokasi(X) else {List tidak kosong} while (L ≠ Nil) do if (Info(L) <= X) then L  Kons●(LTemp,Info(L)) {Memindahkan elemen L kedalam LTemp} L  Tail(L) else break {EOF : List L kosong atau Info(L) > X} L  Konso(X,L) {X menjadi elemen pertama List L} L  Concat(LTemp, L) {Menggabungkan kedua List}

ISKANDAR SETIADI – FREEDOMOFKEIMA 2012

03

Latihan 5 function IsMember(L : List, X : infotype)  boolean { Fungsi IsMember mengembalikan true apabila elemen X merupakan anggota List L } KAMUS LOKAL IsFound : boolean ALGORITMA IsFound  false while (L ≠ Nil) and (not IsFound) do if (Info(L) = X) then IsFound  true L  Tail(L) {EOF : L kosong atau Elemen telah ditemukan dalam List}  IsFound Latihan 6 function IsMemberSort(L : List, X : infotype)  boolean { Fungsi IsMemberSort mengembalikan true apabila elemen X merupakan anggota List L yang terurut menaik } KAMUS LOKAL ALGORITMA while (L ≠ Nil) do if (Info(L) < X) then L  Tail(L) else break {EOF : L kosong atau Elemen List L >= X} if (L = Nil) then {Jika L kosong}  false else  (Info(L) = X)

ISKANDAR SETIADI – FREEDOMOFKEIMA 2012

04

Latihan 7 procedure UniqueIns(input/output L : List, input X : integer) { I.S. : List L merupakan tuple <X,N> dan terurut menaik berdasarkan X, mungkin kosong } { F.S. : Elemen X akan ditambahkan apabila belum ada di L, sebaliknya, nilai N pada tuple <X,N> akan bertambah } { Asumsikan selektor yang digunakan adalah L.X dan L.N } KAMUS LOKAL LTemp : List ALGORITMA if (IsEmpty(L)) then {List Kosong} L  Alokasi(<X,1>) else {List tidak Kosong} while (L ≠ Nil) do if (Info(L).X < X) then L  Kons●(LTemp,Info(L)) {Memindahkan elemen L kedalam LTemp} L  Tail(L) else break {EOF : List L kosong atau Info(L) > X} if (L = Nil) then {Jika L kosong} L  Kons●(LTemp,<X,1>) L  LTemp else depend on Info(L) Info(L).X = X : Info(L).N + 1 {Jika elemen X ada} Info(L).X ≠ X : Konso(L,<X,1>) {Jika elemen X belum ada} L  Concat(LTemp,L) {Menggabungkan kedua List}

Latihan 8 procedure Reverse(input/output L : List) { I.S. : List L terdefinisi} { F.S. : List L memiliki urutan elemen yang dibalik } KAMUS LOKAL ALGORITMA if (IsEmpty(L)) then {Basis 0} L  Nil else {rekurens} Reverse(Tail(L)) L  Kons●(L,Info(L)) {Info(L) menjadi elemen terakhir List L}
ISKANDAR SETIADI – FREEDOMOFKEIMA 2012 05