SOAL : Diketahui data dalam bentuk ARRAY 2 dimensi sebagai berikut : 70 50 6 77 37 12 94 75 81 58 75 47 67 14 35 33 63 9 49 97 57 6 90 92 41 18 48 92 36 22 80 11 50 21 17 Buatlah algoritma dan tuliskan dalam bentuk Pseudo Code untuk mendeteksi ada atau tidaknya data dengan pencarian data menggunakan metoda BINARY SEARCH. Output yang diharapkan adalah: Data ditemukan pada baris {sekian} kolom {sekian}. apabila data yang dicari ditemukan, atau Data tidak ditemukan. apabila data tidak ada pada array. *** Apabila anda menggunakan pengurutan, gunakan metoda SELECTION SORT! Contoh tampilan : Data yang dicari : 11 HASIL : Data ditemukan pada baris 1 kolom 4. {bila data ditemukan} Data yang dicari : 100 HASIL : Data tidak ditemukan. {bila data tidak ditemukan} *** SELAMAT MENGERJAKAN ***
JAWABAN : Poin poin penting dalam soal : 1. Array dalam bentuk 2 dimensi. 2. Ukuran 5x7 3. Data sudah ada, nilai tidak urut secara ascending maupun desccending. 4. Pencarian data menggunakan BINARY SEARCH (ingat syarat penggunaan Binary Search, data harus terurut) 5. Karena syarat Binary Search, maka pengurutan harus dilakukan terlebih dahulu, menggunakan SELECTION SORT. 6. Output merupakan keterangan data yang dicari ada atau tidak dalam array. Bila data ditemukan maka akan ada keterangan posisi data berupa baris dan kolom. Posisi data yang ditemukan merupakan baris dan kolom untuk data yang telah diurutkan. 7. Algoritma ditulis dalam bentuk PSEUDO CODE
ALTERNATIF 1 : Jawaban ini menggunakan algoritma untuk array 1 dimensi yang dipaksakan untuk digunakan pada array 2 dimensi dengan dibantu rumus rumus konversi indeks. {PSEUDO-CODE} ALGORITMA UAS_CARI_DATA_BINARY_SEARCH_PRE_SELECTION_SORT_1 {I.S. : Data dalam bentuk array 2 dimensi, sudah dalam kondisi terisi dan tidak urut. Input merupakan data yang dicari.} {F.S. : Output berupa keterangan apakah data yang dicari ada atau tidak. Bila ada ditambahkan keterangan berada pada baris dan kolom berapa.} DEKLARASI : D : ARRAY [1..5,1..7] OF INTEGER M, N, R, X, Y, i, x_i, y_i, j, x_j, y_j : INTEGER i_min, x_i_min, y_i_min, TEMP, K1, K2, KT, x_kt, y_kt : INTEGER KETEMU : boolean ALGORITMA : OUTPUT( Data yang dicari : ) INPUT(cari) OUTPUT( HASIL : ) M 5 {jumlah baris} N 7 {jumlah kolom} R M * N {jumlah data :: biasanya jumlah data dilambangkan dengan n } {karena data belum terurut maka pengurutan dilakukan menggunakan MINIMUM- SELECTION SORT ASCENDING} FOR i 1 TO (R 1) DO x_i ((i - 1) DIV N) + 1; y_i ((i - 1) MOD N) + 1; i_min i x_i_min ((i_min - 1) DIV N) + 1; y_i_min ((i_min - 1) MOD N) + 1; FOR j (i + 1) TO R DO x_j ((j - 1) DIV N) + 1; y_j ((j - 1) MOD N) + 1; IF (D[x_j,y_j] < D[x_i_min,y_i_min]) THEN x_i_min x_j; y_i_min y_j; TEMP D[x_i,y_i] D[x_i,y_i] D[x_i_min,y_i_min] D[x_i_min,y_i_min] TEMP
{Pencarian menggunakan BINARY SEARCH} X 0 {X digunakan untuk menunjuk baris pada data yang ditemukan} Y 0 {Y digunakan untuk menunjuk kolom pada data yang ditemukan} KETEMU FALSE IF (D[1,1] = cari) THEN X 1 Y 1 IF (D[M,N] = cari) THEN X M Y N K1 1 K2 R WHILE (NOT KETEMU) AND ((K2 - K1) > 1) DO KT (K1 + K2) DIV 2 x_kt ((KT - 1) DIV N) + 1 y_kt ((KT - 1) MOD N) + 1 IF (D[x_KT,y_KT] = cari) THEN X x_kt Y y_kt IF (D[x_KT,y_KT] > cari) THEN K2 KT K1 KT ENDWHILE IF (KETEMU) THEN OUTPUT('Data ditemukan pada baris ',X,' kolom ',Y,'.') OUTPUT('Data tidak ditemukan.')
ALTERNATIF 2 : Jawaban ini menggunakan algoritma untuk array 1 dimensi dengan cara memindahkan dahulu data yang ada pada array 2 dimensi pada array bantuan yang berdimensi 1. {PSEUDO-CODE} ALGORITMA UAS_CARI_DATA_BINARY_SEARCH_PRE_SELECTION_SORT_2 {I.S. : Data dalam bentuk array 2 dimensi, sudah dalam kondisi terisi dan tidak urut. Input merupakan data yang dicari.} {F.S. : Output berupa keterangan apakah data yang dicari ada atau tidak. Bila ada ditambahkan keterangan berada pada baris dan kolom berapa.} DEKLARASI : D : ARRAY [1..5,1..7] OF INTEGER T : ARRAY [1..256] OF INTEGER M, N, R, X, Y, IDX, i, j, i_min, TEMP, K1, K2, KT : INTEGER KETEMU : boolean ALGORITMA : OUTPUT( Data yang dicari : ) INPUT(cari) OUTPUT( HASIL : ) M 5 {jumlah baris} N 7 {jumlah kolom} R M * N {jumlah data :: biasanya jumlah data dilambangkan dengan n } {Pemindahan data dari array 2 dimensi ke array 1 dimensi} FOR i 1 TO M DO FOR j 1 TO N DO T[((i - 1) * N) + j] D[i,j] {karena data belum terurut maka pengurutan dilakukan menggunakan MINIMUM- SELECTION SORT ASCENDING} FOR i 1 TO (R 1) DO i_min i FOR j (i + 1) TO R DO IF (T[j] < T[i_min]) THEN i_min j; TEMP T[i] T[i] T[i_min] T[i_min] TEMP
{Pencarian menggunakan BINARY SEARCH} IDX 0 {IDX digunakan untuk menunjuk indeks pada data yang ditemukan} KETEMU FALSE IF (T[1] = cari) THEN IDX 1 IF (T[R] = cari) THEN IDX R K1 1 K2 R WHILE (NOT KETEMU) AND ((K2 - K1) > 1) DO KT (K1 + K2) DIV 2 IF (T[KT] = cari) THEN IDX KT IF (T[KT] > cari) THEN K2 KT K1 KT ENDWHILE IF (KETEMU) THEN {Perlu dicari indeks 2 dimensi dari IDX} X ((IDX - 1) DIV N) + 1 Y ((IDX - 1) MOD N) + 1 OUTPUT('Data ditemukan pada baris ',X,' kolom ',Y,'.') OUTPUT('Data tidak ditemukan.')