23
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

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA …blog.ub.ac.id/gustiangr8/files/2014/03/Laporan-ASD-Bab3-Array-2... · Membuat sebuah program matriks dari array 2 dimensi dimana matriks

  • Upload
    vumien

  • View
    228

  • Download
    0

Embed Size (px)

Citation preview

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.