laporan praktikum algoritma dan struktur data...
Post on 10-Mar-2019
228 Views
Preview:
TRANSCRIPT
LAPORAN PRAKTIKUM ALGORITMA DANSTRUKTUR DATAARRAY 2 DIMENSI
Disusun oleh :
Nama : Gustian Ri’piNIM : 135150201111060Asisten 1 : Az Zahra Rahma Putri AfifaAsisten 2 : Fitri Bibi SuryaniDosen Pengampu : Lailil Muflikhah, S.Kom., M.Sc.
LABORATORIUM KOMPUTER DASARPROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA2014
PengesahanTanggal:
Asisten
A. Definisi Masalah
Membuat sebuah program matriks dari array 2 dimensi dimanamatriks diinputkan kemudian terdapat proses cetak, kali, kalikonstanta, tambah, kurang, determinan, transpose dan vektor kalimatriks.
B. Pseudocode
1. Pseudocode Soal 1
BeginVar 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 dobegin
isiItem(i, dt[i]);
endEnd
isiItem(id, dt : int) : void;Begin
this.itemDt[id] <- dt;End
cetak( komentar : String) : void;Begin
Print komentar;for i <- 0 to this.size dobegin
Print this.itemDt[i] , " ";end
End
findBesar() : int;Begin
Var besar : int;besar <- this.itemDt[0];for i <- 1 to this.size dobegin
if (besar < this.itemDt[i]) thenbesar <- this.itemDt[i];
endifreturn 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]) thenketemu <- true;pos <- i;
endifi++;
endreturn 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]) thenmax <- this.itemDt[i];posMax <- i;
endifendreturn 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]) thenmin <- this.itemDt[i];posMin <- i;
endifendreturn 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]) thenreturn PencarianBiner(dtCari, tengah + 1, akhir);else if (dtCari == this.itemDt[tengah]) thenreturn tengah;elsereturn pos;
endifEnd
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
endifreturn 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);endifVar dt1 : int <- lsort.itemDt[i];Var dt2 : int<- lsort.itemDt[posData];lsort.itemDt[i] <- dt2;lsort.itemDt[posData] <- dt1;
endreturn lsort;
End
findPosGenap(x1, x2 : int) : int;Begin
Var genap : int;for i <- x1 to x2 do
for j = 0 to size doif (itemDt[j] == i) then
if (itemDt[j] % 2 == 0) thengenap <- itemDt[j];Print genap , " terletak pada indeks " , j;
endifendif
endendreturn 0;
End
BeginVar 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.javaBeginVar 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]);endfor <- 0 to l2.size do
l3.isiItem(j++, l2.itemDt[i]);endreturn l3;
EndisiItem(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]) thenbesar <- this.itemDt[i];
endifendreturn 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]) thenketemu <- true;pos <- i;
endifi++;
endreturn 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
endifreturn 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;
endifend
endifreturn 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;
endifend
endifreturn 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 doVar 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);
endelse
for i = 0 to n doVar 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);
endendifreturn lhasil;
End
LarikKaliLarik(l1, l4 : Larik) : double;
BeginVar hasilKali : <- 0;for i = 0 to l1.size do
for j = 0 to l4.size doif (i == j) then
hasilKali <- hasilKali + l1.itemDt[i] * l4.itemDt[j];endif
endendreturn hasilKali;
End
Pseudocode class AppPr1.javaBeginVar 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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
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;
47484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
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;}
}
93949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
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) {
139140141142143144145146147148149150151152153154155156157
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 ygberada diantara 0 dan 100 ");
lA.SelectionSort(0).findPosGenap(0, 100);System.out.println();
}}
Source code Soal 2
1234567891011121314151617181920212223
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
24252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
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,
707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
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;
116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
}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;
}}
123456789101112131415161718192021222324252627282930313233
package ADT_Larik;
public class AppPr1 {
public static void main(String[] args) {// implementasi untuk ADT_Larikdouble[] 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
12-35-78-1011-1314-1920-22
23-3031-3940-5253-6364-7475-9293-104
105-122
123-137
138139140142143-144152-155
Dekalarasi kelas dengan nama Larik2Deklarasi variabel dan array data (struktur data)Deklarasi Method dengan nama buatLarikConstructor untuk membuat larik, inisialisasi n (jumlah larik)Getter untuk jumlah indeks larikConstructor untuk membuat larik, inisialisasi variabel array dtProsedur untuk isiItem suatu larik dengan parmeter id : indekslarik, dan dt : item data yang akan disisipkan.Prosedur cetak suatu array, deklarasi variabel String komentarMethod untuk mencari nilai indeks terbesarProgram untuk mencari posisi suatu data tertentu di larikMethod untuk mendapatkan indeks array ke- yang terbesarMethod untuk mendapatkan indeks array ke- yang terkecilMethod untuk pencarian biner dalam arrayProgram untuk mencopy isi suatu Larik2 mulai dari posisi ksebanyak n item. hasilnya dikeluarkan sebagai array baru.Method untuk mengurutkan data array dari kecil ke besar denganmenggunakan Algoritma pengurutan selection sortFungsi untuk mencari bilangan genap yang berada diantara x1dan x2. Parameter x1 : batas awal pencarian bilangan genap,Parameter x2 : batas akhir pencarian bilangan genapDeklarasi method main untuk kelas Larik2Inisialisasi variabel integer array A = {2, 34, 5, 7, 10}Membuat sebuah objek dari kelas Larik2 dengan nama lAMencetak data yang belum diurutkanMencetak data yang sudah diurutkanPerintah untuk Mencetak bilangan genap yang berada diantara 0dan 100 dalam array tersebut.
Pembahasan Soal 2
234-9
10-16
17-1920-22
Dekalarasi kelas dengan nama LarikDeklarasi variabel static array, data (strukur data)Contructor untuk membuat ADT larik dari suatu array bertipeinteger.Fungsi untuk membuat larik baru(copy larik), deklarasivariabel n (ukuran larik)Fungsi untuk mendapatkan ukuran larik, return size dari larikFungsi untuk mendapatkan item ke i dari suatu larik. parameter
23-34
35-37
39-4647-5556-68
69-80
81-98
99 -116
117-119
122-130132-144145-155
i : posisi item, return item larik.Fungsi static untuk menyambung dua buah larik l1 dan l2 danmenyimpannya ke larik l3Prosedur untuk isiItem suatu larik. parameter id : indeks larik,
Parameter dt : item data yang akan disisipkanProsedur untuk mencetak suatu arrayFungsi untuk mendapatkan nilai terbesar dari suatu larikFungsi untuk mencari posisi suatu data tertentu di arrayParameter 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 posisiawal sampai akhirFungsi untuk mencari posisi data terkecil suatu array mulaidari posisi awal sampai posisi akhirFungsi pengurutan suatu larik lAsal dimana kondisi lAsal akantetap setelah proses pengurutan.Untuk mengurutkan data dari kecil ke besarUntuk mengrutkan data dari besar ke kecilFungsi untuk mencari hasil perkalian antara l1 dan l4
1-3
57-910-11131415-18192021-2324-2627-2930-31
Dekalarasi kelas dengan nama AppPr1. implementasi untukADT_LarikDekalarasi kelas dengan nama AppPr1Inisialisasi array double [] A dan array double [] BMengambil isi larik l1(A) dan l2 (B)ke variabel new larik.Mencetak isi larik l1Mencetak isi larik l2Mencetak isi larik l3 (gabungan dari l1 dan l2)Mencetak isi larik l1Mencetak isi larik l4Mencetak isi larik l5 (hasil pengurutan dari l1 kecil -> besar)Mencetak isi larik l6 (hasil pengurutan dari l1 besar ke kecil)Mencetak isi larik l1Mencetak hasil kali dari l1*l4
E. Screenshoot Program
Screenshoot Soal 1
Screenshoot Soal 2
F. Kesimpulan
- Array dapat digunakan untuk menyimpan banyak data yangmempunyai tipe datasejenis.
- Data yang jenisnya berbeda tidak dapat ditempatkan pada satuarray yang sama.
- Umumnya indeks array diawali dari indeks ke-0, sehingga jikaingin mengakses data ke-1 pada array bisa kitaaksesmenggunakan indeks data ke-0 pada array dan seterusnya
- Sebelum menggunakan array, perlu membuatnya danmendeklaraskannya terlebih dahulu.
- Array satu Dimensi mempunyai 1 nama tetapi memiliki banyaktempat dan setiap tempat harus dibedakan, untukmembedakannya dibutuhkan penunjuk, pentunjuk dapat berupakarakter(char) atau integer.
- Array yang sudah disimpan dalam penunjuk yangsama(berbentuk indeks), maka isinya tidak akan hilang kecualiindeksnya diisi oleh nilai yang lain.
top related