LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA
ARRAY 2 DIMENSI
Disusun oleh :
Nama : Gustian Ri’pi
NIM : 135150201111060
Asisten 1 : Az Zahra Rahma Putri Afifa Asisten 2 : Fitri Bibi Suryani
Dosen Pengampu : 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 getPosMax(int id) { int max = this.itemDt[id];
int posMax = id;
for (int i = id + 1; i < size; i++) { if (max <= this.itemDt[i]) {
max = this.itemDt[i];
posMax = i;
} }
return posMax;
}
private int getPosMin(int id) { int min = this.itemDt[id];
int posMin = id;
for (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
12 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);
} }