LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA ARRAY 2 DIMENSI
Disusun oleh : Nama NIM Asisten 1 Asisten 2 Dosen Pengampu
: Gustian Ri’pi : 135150201111060 : Az Zahra Rahma Putri Afifa : Fitri Bibi Suryani : Lailil Muflikhah, S.Kom., M.Sc.
LABORATORIUM KOMPUTER DASAR PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER UNIVERSITAS BRAWIJAYA 2014 Pengesahan Tanggal: Asisten
A. Definisi Masalah Membuat sebuah program matriks dari array 2 dimensi dimana matriks diinputkan kemudian terdapat proses cetak, kali, kali konstanta, tambah, kurang, determinan, transpose dan vektor kali matriks.
B. Pseudocode 1. Pseudocode Soal 1 Begin Var size : int; Var itemDt : int[]; buatLarik(n : int) : void; Begin this.size <- n; this.itemDt <- new int[this.size]; End Larik(n : int); Begin buatLarik(n); End getSize() : int; Begin return this.size; End Larik(dt : int[]); Begin buatLarik(dt.length); for i <- 0 to dt.length do begin isiItem(i, dt[i]);
end End isiItem(id, dt : int) : void; Begin this.itemDt[id] <- dt; End cetak( komentar : String) : void; Begin Print komentar; for i <- 0 to this.size do begin Print this.itemDt[i] , " "; end End findBesar() : int; Begin Var besar : int; besar <- this.itemDt[0]; for i <- 1 to this.size do begin if (besar < this.itemDt[i]) then besar <- this.itemDt[i]; endif return besar; End getPosisi(dtCari : int) : int; Begin Var pos : int <- -99; Var ketemu : boolean <- false; Var i: int <- 0; while (!ketemu && i < this.size) if (dtCari <-this.itemDt[i]) then ketemu <- true; pos <- i;
endif i++; end return pos; End getPosMax(id : int) : int; Begin Var max : int <- this.itemDt[id]; Var posMax : int <- id; for i <- id + 1 to size do if (max <= this.itemDt[i]) then max <- this.itemDt[i]; posMax <- i; endif end return posMax; End getPosMin(id : int) : int; Begin Var min : int <- this.itemDt[id]; Var posMin : int <- id; for i <- id + 1 to size do if (min >= this.itemDt[i]) then min <- this.itemDt[i]; posMin <- i; endif end return posMin; End PencarianBiner(dtCari, awal, akhir : int) : int; Begin Var pos : int <- -99; Var tengah : int <- (awal + akhir) / 2; if (dtCari < this.itemDt[tengah]) then return PencarianBiner(dtCari, awal, tengah);
else if (dtCari > this.itemDt[tengah]) then return PencarianBiner(dtCari, tengah + 1, akhir); else if (dtCari == this.itemDt[tengah]) then return tengah; else return pos; endif End copyLarik(k, n : int) : Larik; Begin Var lHasil : Larik <- null; if (n <= this.size - k) then lHasil <- new Larik(n); Var j : int <- 0; for i <- k to k + n do lHasil.isiItem(j++, this.itemDt[i]); end endif return lHasil; End SelectionSort(pilihan : int) : Larik; Begin { Var lsort : Larik = copyLarik(0, size); for i <- 0 to lsort.getSize() do Var posData : int; if (pilihan == 0) then posData <- lsort.getPosMin(i); else posData <- lsort.getPosMax(i); endif Var dt1 : int <- lsort.itemDt[i]; Var dt2 : int<- lsort.itemDt[posData]; lsort.itemDt[i] <- dt2; lsort.itemDt[posData] <- dt1; end return lsort;
End findPosGenap(x1, x2 : int) : int; Begin Var genap : int; for i <- x1 to x2 do for j = 0 to size do if (itemDt[j] == i) then if (itemDt[j] % 2 == 0) then genap <- itemDt[j]; Print genap , " terletak pada indeks " , j; endif endif end end return 0; End Begin Var A : int[] <- {2, 34, 5, 7, 10}; Larik lA <- new Larik(A); lA.cetak "Sebelum di sort"; lA.SelectionSort(0).cetak "Sesudah di sort"; Print “Bilangan genap yg berada diantara 0 dan 100 "; lA.SelectionSort(0).findPosGenap(0, 100); End 2 . Pseudocode Soal 2 Pseudocode class Larik.java Begin Var size : int; Var itemDt : double[]; Larik(A : double)[]; Begin this.size <- A.length;
this.itemDt <- new double[this.size]; for i <- 0 to this.size do this.itemDt[i] <- A[i]; end End Larik(n : int); Begin buatLarik(n); End buatLarik(n : int) : void; Begin this.size <- n; this.itemDt <- new int[this.size]; End getSize() : int; Begin return this.size; End getItem(int i : int) : double; Begin return this.itemDt[i]; End sambung(l1, l2 : Larik) : Larik; Begin Var j : int <- 0; Larik l3 <- new Larik(l1.size + l2.size); for i <- 0 to l1.size do l3.isiItem(j++, l1.itemDt[i]); end for <- 0 to l2.size do l3.isiItem(j++, l2.itemDt[i]); end return l3;
End isiItem(id : int, dt : double) : void; Begin this.itemDt[id] <- dt; End cetak(komentar : String) : void; Begin Print komentar; for i = 0 to this.size do Print this.itemDt[i]); End End findBesar() : double; Begin Var besar : double <- this.itemDt[0]; for i = 1 to this.size do if (besar < this.itemDt[i]) then besar <- this.itemDt[i]; endif end return besar; End getPosisi(dtCari : double) : int; Begin Var pos : int <- -99; Var ketemu : boolean <- false; Var I : int <- 0; while (!ketemu && i < this.size) if (dtCari == this.itemDt[i]) then ketemu <- true; pos <- i; endif i++; end return pos;
End copyLarik(k, n : int, l : Larik) : Larik; Begin Var lHasil : Larik <- null; if (n <= l.size - k) then lHasil <- new Larik(n); Var j : int= 0; for i = k to k + n do lHasil.isiItem(j++, l.itemDt[i]); end endif return lHasil; End getPosBesar(awal, akhir : int) : int; Begin Var posBesar : int <--1; Var itemBesar : double; if (awal <= akhir) then posBesar <- awal; itemBesar <- this.getItem(awal); for i = awal + 1 to akhir do Var nilaiItem : double <-= this.getItem(i); if (itemBesar < nilaiItem) then itemBesar <- nilaiItem; posBesar <- i; endif end endif return posBesar; End getPosKecil(awal, akhir : int) : int; Begin Var posKecil : int <--1; Var itemKecil : double; if (awal <= akhir) then
posKecil <- awal; itemKecil <- this.getItem(awal); for i = awal + 1 to akhir do Var nilaiItem : double <-= this.getItem(i); if (itemKecil > nilaiItem) then itemKecil <- nilaiItem; posKecil <- i; endif end endif return posKecil; End SelectionSort(lAsal : Larik, status : int) : Larik; Begin Var n : int <- lAsal.getSize(); Var lhasil : Larik <- Larik.copyLarik(0, n, lAsal); if (status == 0) then for i = 0 to n do Var posKecil : int <- lhasil.getPosKecil(i, n); Var itemKecil : doble <- lhasil.getItem(posKecil); Var itemI : double <- lhasil.getItem(i); lhasil.isiItem(i, itemKecil); lhasil.isiItem(posKecil, itemI); end else for i = 0 to n do Var posBesar : int <- lhasil.getPosBesar(i, n); Var itemBesar : double <- lhasil.getItem(posBesar); Var itemI :double <- lhasil.getItem(i); lhasil.isiItem(i, itemBesar); lhasil.isiItem(posBesar, itemI); end endif return lhasil; End LarikKaliLarik(l1, l4 : Larik) : double;
Begin Var hasilKali : <- 0; for i = 0 to l1.size do for j = 0 to l4.size do if (i == j) then hasilKali <- hasilKali + l1.itemDt[i] * l4.itemDt[j]; endif end end return hasilKali; End Pseudocode class AppPr1.java Begin Var A : double[] <- {3, 4, 1, 10, 5, 2, 10, 20, 16}; Var B : double[] <- {4, 3, 1, 11, 7}; Larik L1 <- new Larik(A); Larik L2 <- new Larik(B); L1.cetak "Isi Larik L1"; L2.cetak "Isi Larik L2”; Larik L3 <- Larik.sambung(L1, L2); L3.cetak "L3 = gabungan dari L1 dan L2"; Larik L4 <- Larik.copyLarik(0, L1.getSize(), L1); L1.cetak("Isi Larik L1"); L4.cetak("L4 Copy dari L1"); Larik L5 <- Larik.SelectionSort(L1, 0); L5.cetak "L5 Hasil pengurutan dari L1 Kecil -> Besar”; Larik L6 <- Larik.SelectionSort(L1, 1); L6.cetak "L6 Hasil pengurutan dari L1 Besar -> Kecil”; L1.cetak "Isi Larik L1"; Var hasil : double <- Larik.LarikKaliLarik(L1, L4); Print “HASIL KALI Larik L1*L4 : ", hasil; End C. Source Code Source code Soal 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
public class Larik2 { private int size; private int[] itemDt; public void buatLarik(int n) { this.size = n; this.itemDt = new int[this.size]; } public Larik2(int n) { buatLarik(n); } public int getSize() { return this.size; } public Larik2(int[] dt) { buatLarik(dt.length); for (int i = 0; i < dt.length; i++) isiItem(i, dt[i]); } } public void isiItem(int id, int dt) { this.itemDt[id] = dt; } public void cetak(String komentar) { System.out.println(komentar); for (int i = 0; i < this.size; i++) System.out.print(this.itemDt[i] "); } System.out.println(); } public int findBesar() { int besar = this.itemDt[0]; for (int i = 1; i < this.size; i++) if (besar < this.itemDt[i]) { besar = this.itemDt[i]; } } return besar; } public int getPosisi(int dtCari) { int pos = -99; boolean ketemu = false; int i = 0; while (!ketemu && i < this.size) { if (dtCari == this.itemDt[i]) { ketemu = true;
{
{ + "
{
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
pos = i; } i++; } return pos; } private int int for
int getPosMax(int id) { max = this.itemDt[id]; posMax = id; (int i = id + 1; i < size; i++) { if (max <= this.itemDt[i]) { max = this.itemDt[i]; posMax = i; }
} return posMax; } private int int for
int getPosMin(int id) { min = this.itemDt[id]; posMin = id; (int i = id + 1; i < size; i++) { if (min >= this.itemDt[i]) { min = this.itemDt[i]; posMin = i; }
} return posMin; } public int PencarianBiner(int dtCari, int awal, int akhir) { int pos = -99; int tengah = (awal + akhir) / 2; if (dtCari < this.itemDt[tengah]) { return PencarianBiner(dtCari, awal, tengah); } else if (dtCari > this.itemDt[tengah]) { return PencarianBiner(dtCari, tengah + 1, akhir); } else if (dtCari == this.itemDt[tengah]) { return tengah; } else { return pos; } }
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
public Larik2 copyLarik(int k, int n) { Larik2 lHasil = null; if (n <= this.size - k) { lHasil = new Larik2(n); int j = 0; for (int i = k; i < k + n; i++) { lHasil.isiItem(j++, this.itemDt[i]); } } return lHasil; } public Larik2 SelectionSort(int pilihan) { Larik2 lsort = copyLarik(0, size); for (int i = 0; i < lsort.getSize(); i++) { int posData; if (pilihan == 0) { posData = lsort.getPosMin(i); } else { posData = lsort.getPosMax(i); } int dt1 = lsort.itemDt[i]; int dt2 = lsort.itemDt[posData]; lsort.itemDt[i] = dt2; lsort.itemDt[posData] = dt1; } return lsort; } public int findPosGenap(int x1, int x2) { int genap; for (int i = x1; i <= x2; i++) { for (int j = 0; j < size; j++) { if (itemDt[j] == i) { if (itemDt[j] % 2 == 0) { genap = itemDt[j]; System.out.println(genap + " terletak pada indeks " + j); } } } } return 0; } public static void main(String[] args) {
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
int[] A = {2, 34, 5, 7, 10}; Larik2 lA = new Larik2(A); lA.cetak("Sebelum di sort"); lA.SelectionSort(0).cetak("Sesudah di sort"); //int k = lA.PencarianBiner(34,0,5); //System.out.println(k); //Larik lB = lA.SelectionSort(0); //int p = lB.PencarianBiner(10, 0, 5); //System.out.println(p); System.out.println("Bilangan genap yg berada diantara 0 dan 100 "); lA.SelectionSort(0).findPosGenap(0, 100); System.out.println(); } }
Source code Soal 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
package ADT_Larik; public class Larik { public Larik(double[] A) { this.size = A.length; this.itemDt = new double[this.size]; for (int i = 0; i < this.size; i++) { this.itemDt[i] = A[i]; } } public Larik(int n) { buatLarik(n); } public void buatLarik(int n) { this.size = n; this.itemDt = new double[this.size]; } public int getSize() { return this.size; } public double getItem(int i) { return this.itemDt[i]; } public static Larik sambung(Larik l1, Larik
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
l2) { int j = 0; Larik l3 = new Larik(l1.size + l2.size); for (int i = 0; i < l1.size; i++) { l3.isiItem(j++, l1.itemDt[i]); } for (int i = 0; i < l2.size; i++) { l3.isiItem(j++, l2.itemDt[i]); } return l3; } public void isiItem(int id, double dt) { this.itemDt[id] = dt; } public void cetak(String komentar) { System.out.println(komentar); for (int i = 0; i < this.size; i++) { System.out.printf("%.2f ", this.itemDt[i]); } System.out.println(); } public double findBesar() { double besar = this.itemDt[0]; for (int i = 1; i < this.size; i++) { if (besar < this.itemDt[i]) { besar = this.itemDt[i]; } } return besar; } public int getPosisi(double dtCari) { int pos = -99; boolean ketemu = false; int i = 0; while (!ketemu && i < this.size) { if (dtCari == this.itemDt[i]) { ketemu = true; pos = i; } i++; } return pos; } public static Larik copyLarik(int k, int n,
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
Larik l) { Larik lHasil = null; if (n <= l.size - k) { lHasil = new Larik(n); int j = 0; for (int i = k; i < k + n; i++) { lHasil.isiItem(j++, l.itemDt[i]); } } return lHasil; } public int getPosBesar(int awal, int akhir) { int posBesar = -1; double itemBesar; if (awal <= akhir) { posBesar = awal; itemBesar = this.getItem(awal); for (int i = awal + 1; i < akhir; i++) { double nilaiItem = this.getItem(i); if (itemBesar < nilaiItem) { itemBesar = nilaiItem; posBesar = i; } } } return posBesar; } public int getPosKecil(int awal, int akhir) { int posKecil = -1; double itemKecil; if (awal <= akhir) { posKecil = awal; itemKecil = this.getItem(awal); for (int i = awal + 1; i < akhir; i++) { double nilaiItem = this.getItem(i); if (itemKecil > nilaiItem) { itemKecil = nilaiItem; posKecil = i; } } } return posKecil;
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
} public static Larik SelectionSort(Larik lAsal, int status) { int n = lAsal.getSize(); Larik lhasil = Larik.copyLarik(0, n, lAsal); if (status == 0) { for (int i = 0; i < n; i++) { int posKecil = lhasil.getPosKecil(i, n); double itemKecil = lhasil.getItem(posKecil); double itemI = lhasil.getItem(i); lhasil.isiItem(i, itemKecil); lhasil.isiItem(posKecil, itemI); } } else { for (int i = 0; i < n; i++) { int posBesar = lhasil.getPosBesar(i, n); double itemBesar = lhasil.getItem(posBesar); double itemI = lhasil.getItem(i); lhasil.isiItem(i, itemBesar); lhasil.isiItem(posBesar, itemI); } } return lhasil; } static double LarikKaliLarik(Larik l1, Larik l4) { double hasilKali = 0; for (int i = 0; i < l1.size; i++) { for (int j = 0; j < l4.size; j++) { if (i == j) { hasilKali = hasilKali + l1.itemDt[i] * l4.itemDt[j]; } } } return hasilKali; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
package ADT_Larik; public class AppPr1 { public static void main(String[] args) { // implementasi untuk ADT_Larik double[] A = {3, 4, 1, 10, 5, 2, 10, 20, 16}; double[] B = {4, 3, 1, 11, 7}; Larik L1 = new Larik(A); Larik L2 = new Larik(B); L1.cetak("Isi Larik L1"); L2.cetak("Isi Larik L2"); Larik L3 = Larik.sambung(L1, L2); L3.cetak("L3 = gabungan dari L1 dan L2"); Larik L4 = Larik.copyLarik(0, L1.getSize(), L1); L1.cetak("Isi Larik L1"); L4.cetak("L4 Copy dari L1"); Larik L5 = Larik.SelectionSort(L1, 0); L5.cetak("L5 Hasil pengurutan dari L1 Kecil -> Besar"); Larik L6 = Larik.SelectionSort(L1, 1); L6.cetak("L6 Hasil pengurutan dari L1 Besar -> Kecil"); L1.cetak("Isi Larik L1"); double hasil = Larik.LarikKaliLarik(L1, L4); System.out.printf("HASIL KALI Larik L1*L4 : %.3f\n", hasil); } }
D. Pembahasan Pembahasan Soal 1
1 2-3 5-7 8-10 11-13 14-19 20-22 23-30 31-39 40-52 53-63 64-74 75-92 93-104 105-122 123-137
138 139 140 142 143-144 152-155
Dekalarasi kelas dengan nama Larik2 Deklarasi variabel dan array data (struktur data) Deklarasi Method dengan nama buatLarik Constructor untuk membuat larik, inisialisasi n (jumlah larik) Getter untuk jumlah indeks larik Constructor untuk membuat larik, inisialisasi variabel array dt Prosedur untuk isiItem suatu larik dengan parmeter id : indeks larik, dan dt : item data yang akan disisipkan. Prosedur cetak suatu array, deklarasi variabel String komentar Method untuk mencari nilai indeks terbesar Program untuk mencari posisi suatu data tertentu di larik Method untuk mendapatkan indeks array ke- yang terbesar Method untuk mendapatkan indeks array ke- yang terkecil Method untuk pencarian biner dalam array Program untuk mencopy isi suatu Larik2 mulai dari posisi k sebanyak n item. hasilnya dikeluarkan sebagai array baru. Method untuk mengurutkan data array dari kecil ke besar dengan menggunakan Algoritma pengurutan selection sort Fungsi untuk mencari bilangan genap yang berada diantara x1 dan x2. Parameter x1 : batas awal pencarian bilangan genap, Parameter x2 : batas akhir pencarian bilangan genap Deklarasi method main untuk kelas Larik2 Inisialisasi variabel integer array A = {2, 34, 5, 7, 10} Membuat sebuah objek dari kelas Larik2 dengan nama lA Mencetak data yang belum diurutkan Mencetak data yang sudah diurutkan Perintah untuk Mencetak bilangan genap yang berada diantara 0 dan 100 dalam array tersebut.
Pembahasan Soal 2 2 3 4-9 10-16 17-19 20-22
Dekalarasi kelas dengan nama Larik Deklarasi variabel static array, data (strukur data) Contructor untuk membuat ADT larik dari suatu array bertipe integer. Fungsi untuk membuat larik baru(copy larik), deklarasi variabel n (ukuran larik) Fungsi untuk mendapatkan ukuran larik, return size dari larik Fungsi untuk mendapatkan item ke i dari suatu larik. parameter
23-34 35-37 39-46 47-55 56-68 69-80
81-98 99 -116 117-119 122-130 132-144 145-155
1-3 5 7-9 10-11 13 14 15-18 19 20 21-23 24-26 27-29 30-31
i : posisi item, return item larik. Fungsi static untuk menyambung dua buah larik l1 dan l2 dan menyimpannya ke larik l3 Prosedur untuk isiItem suatu larik. parameter id : indeks larik, Parameter dt : item data yang akan disisipkan Prosedur untuk mencetak suatu array Fungsi untuk mendapatkan nilai terbesar dari suatu larik Fungsi untuk mencari posisi suatu data tertentu di array Parameter dtCari : data yang akan dicari. Fungsi static untuk mencopy isi suatu larik l. parameter k : posisi awal, n : jumlah item yang akan dicopy, l : larik asal, return Larik hasil copy. Fungsi untuk mencari posisi terbesar suatu data suatu posisi awal sampai akhir Fungsi untuk mencari posisi data terkecil suatu array mulai dari posisi awal sampai posisi akhir Fungsi pengurutan suatu larik lAsal dimana kondisi lAsal akan tetap setelah proses pengurutan. Untuk mengurutkan data dari kecil ke besar Untuk mengrutkan data dari besar ke kecil Fungsi untuk mencari hasil perkalian antara l1 dan l4
Dekalarasi kelas dengan nama AppPr1. implementasi untuk ADT_Larik Dekalarasi kelas dengan nama AppPr1 Inisialisasi array double [] A dan array double [] B Mengambil isi larik l1(A) dan l2 (B)ke variabel new larik. Mencetak isi larik l1 Mencetak isi larik l2 Mencetak isi larik l3 (gabungan dari l1 dan l2) Mencetak isi larik l1 Mencetak isi larik l4 Mencetak isi larik l5 (hasil pengurutan dari l1 kecil -> besar) Mencetak isi larik l6 (hasil pengurutan dari l1 besar ke kecil) Mencetak isi larik l1 Mencetak hasil kali dari l1*l4
E. Screenshoot Program Screenshoot Soal 1
Screenshoot Soal 2
F. Kesimpulan - Array dapat digunakan untuk menyimpan banyak data yang mempunyai tipe datasejenis. - Data yang jenisnya berbeda tidak dapat ditempatkan pada satu array yang sama.
- Umumnya indeks array diawali dari indeks ke-0, sehingga jika ingin mengakses data ke-1 pada array bisa kita aksesmenggunakan indeks data ke-0 pada array dan seterusnya - Sebelum menggunakan array, perlu membuatnya dan mendeklaraskannya terlebih dahulu. - Array satu Dimensi mempunyai 1 nama tetapi memiliki banyak tempat dan setiap tempat harus dibedakan, untuk membedakannya dibutuhkan penunjuk, pentunjuk dapat berupa karakter(char) atau integer. - Array yang sudah disimpan dalam penunjuk yang sama(berbentuk indeks), maka isinya tidak akan hilang kecuali indeksnya diisi oleh nilai yang lain.