Pertemuan Ke 3 Referensi: 1. Inggriani Liem. 2003. Catatan Kuliah & Pemrograman, Jurusan Teknik Informatika ITB 2. Rinaldi Munir. 2003. dan Pemrograman II. Bandung : Penerbit Informatika I. Tabel/Larik/Array Tabel/larik/array adalah struktur data yang menyimpan sekumpulan elemen yang bertipe sama. Setiap elemen dalam tabel diakses langsung melalui indeksnya. Dengan demikian indeks larik harus tipe data yang mempunyai keterurutuan misalnya integer atau character. Cara mengakses elemen larik dalam notasi algoritma ditulis sbegai berikut : T[index] adalah elemen ke index dari larik T T[1] adalah elemen ke 1 dari larik T T[100] adalah elemen ke 100 dari larik T T[index].x adalah elemen ke index komponen x dari larik T T[1].x adalah elemen ke 1 komponen x dari larik T T[100].x adalah elemen ke 100 komponen x dari larik T Berikut adalah gambaran tabel 1 120 a <8.6,7.8> 2 90 b <10.0,2.8> 3 34 c <4.5,6,8> 4 56 d <23.45,4.67> 5 78 e 6 1 f 7 2 g 8 3 h... 5... 100 6 z (a) Larik berisi tipe integer (b) larik berisi tipe Point.
Jika nama larik pertama (a) adalah A maka A[1] = 120, A[100] = 6. Jika nama larik kedua (b) adalah TPoint maka TP[a] = <8.6,7.8>, TP[a].X = 8.6, TP[b].Y = <2.8> 1. Deklarasi Tabel Deklarasi tabel dituliskan sebagai berikut : <nama> : array [Nmin...Nmax] of TipeElemen Dengan Nmin adadah index minimum, Nmax index maksiumum, TipeElemen adalah tipe elemen isi tabel. Contoh T : array [1...100] of Integer {T adalah tabel dengan index 1.s.d. 100 yang isinya bertipe inteher} TPoint : array [1...100] of Point {T adalah tabel dengan index 1.s.d. 100 yang isinya bertipe Point} 2. Pemrosesan terhadap Tabel Pemrosesan dasar terhadap tabel antara lain : Pengisian, Pencarian, Pengurutan. Berikut beberapa contoh primitif pemrosesan terhadap tabel. 2.1. Pengisan Tabel 2.1.1. Pengisian tabel dengan skema traversal. Traversal adalah skema menjalani semua isi dalam tabel tanpa kecuali, dari index terkecil (pertama) sampai dengan index terbesar (terakhir). di bawah digunakan untuk melakukan pengisian tabel dengan langkah langkah : 1. Menerima masukan jumlah elemen N tabel yang akan di isi dengan 1 <= N <= Nmax. Nmax adalah index maksimum tabel Kamus/Deklarasi variable Constant Nmin : integer = 1; Constant Nmax : integer = 100; T : array [Nmin...Nmax] of Integer; {temperatur air} N : integer {jumlah maksimum }
Repeat Input (N) Until (N > 0) {tidak akan selesai melakukan input N selama N <= 0} I traversal [1...N] input(t[i]) 2.1.2. Pengisian tabel dengan menerima masukan dari alat masukan (keyboard). Jika maukan bernilai -99 maka proses pengisian tabel dianggap selesai. Proses isi tabel juga dihentikan jika semua index sudah terisi, sebanyak Nmax. Nmax adalah index maksimum tabel Kamus/Deklarasi variable Constant Nmin : integer = 1; Constant Nmax : integer = 100; T : array [Nmin...Nmax] of Integer; {temperatur air} N : integer {jumlah maksimum } X : integer { adalah elemen yang dimasukkan} I Nmin; Input (X) While (i <= Nmax) and (X <> -99) do T[I] <= X I I +1 Input(X)
{(i > Nmax) or (X == -99)} If (I > Nmax) then Output ( Tabel penuh ) 2.2. Pencarian Isi Tabel secara terurut Misalnya diketahui suatu tabel T [1...Nmax] yang elemennya merupakan bilangan integer. Persoalan yang diberikan adalah mencari apakah integer X ada di dalam tabel. Proses pencarian dilakukan secara berurutan mulai dari T[Nmin] s.d T[IX] di mana IX adalah index di mana X berada atau sampai dengan T[Nmax], yaitu pencarian dilakukan sampai dengan elemen terakhir pada tabel. Pada pencarian ini digunakan deklarasi global sebagai berikut Constant Nmin : integer = 1; Constant Nmax : integer = 100; Type TabInt : array [Nmin...Nmax] of Integer; { definisi tipe tabel integer } T : TabInt 2.2.1. Prsedur Pencarian versi 1, tanp boolean Procedure SeqSearch1(Input T: TabInt; N:Integer; X: Integer; Output : IX :integer) {Memeriksa apakah X ada didalam tabel T yang berindex dari 1 s.d N. Jika X ada di dalam tabel maka IX akan berisi index terkecil tempat X berada. Jika X tidak ada didalam tabel, IX berisi 0} Kamus/Deklarasi
I <= 1 While (i < N) and (T[i] <> X) do I <= I+1 {i = N or T[i] = X} Depend on T, i, X T[i] = X : IX I TI <> X : IX 0 2.2.2. Prsedur Pencarian versi 2, dengan menggunakan boolean Procedure SeqSearch2(Input T: TabInt; N:Integer; X: Integer; Output : IX :integer; Found : Boolean) {Memeriksa apakah X ada didalam tabel T yang berindex dari 1 s.d N. Jika X ada di dalam tabel maka IX akan berisi index terkecil tempat X berada, Found berisi true. Jika X tidak ada didalam tabel, IX berisi 0 found berisi false} Kamus/Deklarasi I 1 Found false While (i <= N) and (not Found) do If T[I] == X then Found True Else I <= I+1 {i > N or found }
Depend on Found Found : IX I Not Found : IX 0 2.3. Pencarian pada Tabel yang isinya terurut menaik Misalnya diketahui suatu tabel T [1...Nmax] yang telah terisi dan elemennya merupakan bilangan integer yang terurut menaik. Persoalan yang diberikan adalah mencari apakah integer X ada di dalam tabel. Proses pencarian dilakukan secara berurutan mulai dari T[Nmin] s.d T[IX] di mana IX adalah index di mana X berada atau sampai dengan T[Nmax], yaitu pencarian dilakukan tidak harus dilakukan sampai dengan elemen terakhir pada tabel. Misalnya N = 6, T {2,4,5,7,8,9}, X= 5 maka pencarian dilakukan terhadap {2,4,5}, IX= 3; Misalnya N = 10, T {2,4,5,7,8,9,20,22,45,60}, X= 35 maka pencarian dilakukan terhadap {2,4,5, 7,8,9,20,22,45}, IX= 0; Pada pencarian ini digunakan deklarasi global sebagai berikut Constant Nmin : integer = 1; Constant Nmax : integer = 100; Type TabInt : array [Nmin...Nmax] of Integer; { definisi tipe tabel integer } T : TabInt 2.3.1. Prsedur Pencarian Tabel terurut Procedure SeqSearchSorted(Input T: TabInt; N:Integer; X: Integer; Output : IX :integer) {Memeriksa apakah X ada didalam tabel T yang berindex dari 1 s.d N dengan isi elemen adalah integer terurut menaik. Jika X ada di dalam tabel maka IX akan berisi index terkecil tempat X berada. Jika X tidak ada didalam tabel, IX berisi 0}
Kamus/Deklarasi I <= 1 While (i < N) and (T[i] < X) do I <= I+1 {i = N or T[i] = X} Depend on T, i, X T[i] == X : IX I TI <> X : IX 0 {TI > X} 2.4. Pencarian pada Tabel yang isinya terurut menaik dengan metode Binary Search Dichotomic Misalnya diketahui suatu tabel T [1...Nmax] yang telah terisi dan elemennya merupakan bilangan integer yang terurut menaik. Persoalan yang diberikan adalah mencari apakah integer X ada di dalam tabel. Bayangkan index tabel disusun dari atas kebawah artinya index terkecil di atas, dan index terbesar di bawah. Proses pencarian dilakukan dengan membandingkan X dengan elemen yang di tengah. Jika X lebih kecil dari yang di tengah, maka pencarian di fokuskan di belahan setengah atas, sebaliknya jika X lebih besar dari tengah maka pencarian difokuskan di belahan setengah bawah. Proses ini diluang sampai ditemukan atau tabel tidak dapat dibagi setengah setengah lagi. Proses pencarian ini hanya bisa digunakan untuk tabel dengan elemen terurut menaik. Perhatikan ilustrasi berikut, memeriksa apakah 12 ada di dalam tabel : X= 10 Index Index Index ==> Atas 1 1 1 1 1 1
2 4 2 4 2 4 3 6 3 6 3 6 4 7 4 7 4 7 ==> Tengah 5 9 5 9 5 9 6 10 ==> Atas 6 10 ==> Atas 6 10 ==> 7 12 7 12 Bawah,Tengah 7 12 8 14 ==> Tengah 8 14 8 14 9 15 9 15 9 15 ==> Bawah 10 18 ==> Bawah 10 18 10 18 2.4.1. Prsedur Pencarian Tabel terurut dengan Binary Search Procedure BinarySearch(Input T: TabInt; N:Integer; X: Integer; Output : IX :integer; Found : Boolean) {Memeriksa apakah X ada didalam tabel T yang berindex dari 1 s.d N. Elemen Tabel terurut menaik T[1]<= T[2] <= T[3]..., pencarian dilakuan dengan model Binary Search dichotomic.} Kamus/Deklarasi Atas, Bawah, Tengah : integer {pencacah yang digunakan sebagai batas pemeriksaan} Atas 1; Bawah N Found false ; IX 0; While ( Atas <= Bawah ) and (not Found) do Tengah <= (Atas + Bawah ) div 2
Depend on T, Tengah, X X = T[Tengah] Found True; IX Tengah X > T[Tengah] : Atas Tengah + 1 X < T[Tengah] : Bawah Tengah - 1 {Atas > Bawah or Found} 3. Latihan 3.1. Mencari nilai minimal Ujian Permasalahan : Nilai ujian mahasiswa Kelas dimasukkan ke dalam tabel yang tiap elemennya merupakan komponen NIM dan Nilai. Nim bertipe Integer dan Nilai bertipe riil. Diasumsikan tabel Nilai sudah berisi. Tugas yang harus anda lakukan adalah mengeluarkan NIM dan Nilai mahasiswa dengan nilai tertinggi dan nilai terendah. Contoh : Jika tabel berisi {(41501,80.5), (41502,90.5), (41503,60)}, maka outputnya adalah Nilai minimum NIM 41503, nilai 60, Nilai maksimum NIM 41502, nilai 90.5 3.2. Menghitung nilai rata rata Permasalahan : Diterima masukan berupa bilangan riiel lebih besar atau sama dengan nol sebanyak N kali. Setiap menerima masukan bilangan riil tersebut dimasukkan ke dalam tabel yang index maksimumnya N. Hitunglha nilai rata ratanya. Contoh : jika berturut turut dimasukkan nilai riil tiga kali yatu 3.0, 1.0, 7.0, 5.0, maka outputnya adalah 5.0 ==== End of Document ===