Laporan Praktikum Algoritma & Struktur Data Bab 2 Fakultas Ilmu Komputer Universitas Brawijaya 2017/2018
Soal :
Source code :
Class Bab2Array1D
Class Bab2ADT
Class Bab2ADTMain
Download the file here
Soal :
1.
Kembangkan program di atas
dengan menambahkan method berikut :
a. Mencari posisi bilangan yang merupakan kelipatan dari
x0 yang terletak diantara index x1 dan index x2 dengan header sebagai berikut :
int findPosKelipatan (int x0, int x1, int x2)
Contoh : Sebuah set {1, 2, 3, 4, 5, 6, 7} dan dengan
memanggil method findPosKelipatan(3, 1, 6) maka akan menghasilkan 2 5 karena
kelipatan dari nilai 3 adalah 3 dan 6, dimana keduanya ada di antara index 1 –
6 dan memiliki indeks 2 dan indeks 5.
b. Pengurutan dengan
menggunakan algoritma pengurutan yang lain selain Selection Sort.
2.
Pada Latihan kedua ini
anda diminta untuk melengkapi bagian dari program ADT_Larik sehingga jika diberikan program utama pada
gambar 1 akan menghasilkan keluaran sebagaimana gambar 2.
Source code :
Class Bab2Array1D
package asdmodul1; import javax.swing.JTextArea; public class Bab2Array1D { public static final double inf = 999999999.0; private int size; private int[] itemDt; public void buatLarik(int n) { this.size = n; this.itemDt = new int[this.size]; } public Bab2Array1D(int n) { buatLarik(n); } public int getSize() { return this.size; } public Bab2Array1D(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; 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, genap; 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; } } public int cariPosisi(int y, 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] % y == 0) { genap = itemDt[j]; System.out.println(genap + " terletak pada indeks " + j); } } } } return 0; } /** * program untuk mencopy isi suatu Larik mulai dari posisi k sebanyak n item * hasilnya dikeluarkan sebagai array baru */ public Bab2Array1D copyLarik(int k, int n) { Bab2Array1D lHasil = null; if (n <= this.size - k) { lHasil = new Bab2Array1D(n); int j = 0; for (int i = k; i < k + n; i++) { lHasil.isiItem(j++, this.itemDt[i]); } } return lHasil; } /** * pilihan 0 : urutkan dari kecil ke besar lainya : urutkan dari besar ke * kecil Algoritma pengurutan ini menggunakan selection sort */ /*public Bab2Array1D SelectionSort(int pilihan) { Bab2Array1D 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 static int[] InsertionSort(int[] a) { int s = a.length; int z, h, m; for (z = 1; z < s; z++) { h = z; m = a[z]; while (h > 0 && m < a[h - 1]) { a[h] = a[h - 1]; h = h - 1; } a[h] = m; } return a; } public static double LarikKaliLarik(Bab2Array1D a, Bab2Array1D b) { double sau = 0; if (a.size != b.size) { return inf; } else { for (int i = 0; i < a.size; i++) { sau += a.itemDt[i] * b.itemDt[i]; } } return sau; } public static void main(String[] args) { String show; JTextArea showArea; int indeks, s, z; int[] A = {1, 7, 4, 5, 3, 2, 6}; Bab2Array1D lA = new Bab2Array1D(A); lA.cetak("Sebelum diurutkan :"); for (s = 0; s < A.length; s++) { InsertionSort(A); } System.out.print("\nSetelah diurutkan :"); for (s = 0; s < A.length; s++) { System.out.print(A[s] + " "); } Bab2Array1D lB = new Bab2Array1D(A); System.out.println("\nBilangan kelipatan 3 yaitu :"); for (s = 0; s < A.length; s++) { lB.InsertionSort(A); } lB.cariPosisi(3, 1, 6); System.out.println(); } }
Class Bab2ADT
package asdmodul1; public class Bab2ADT { static double LarikKaliLarik(Bab2ADT L1, Bab2ADT L4) { double result = 0; for (int i = 0; i < L1.size; i++) { for (int j = 0; j < L4.size; j++) { if (i == j) { result = result + L1.itemDt[i] * L4.itemDt[j]; } } } return result; } private int size; private double[] itemDt; public Bab2ADT(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 Bab2ADT(int s) { createArray(s); } public void createArray(int s) { this.size = s; this.itemDt = new double[this.size]; } public int getSize() { return this.size; } public double getItem(int i) { return this.itemDt[i]; } public static Bab2ADT sambung(Bab2ADT l1, Bab2ADT l2) { int i = 0; int b = l1.size + l2.size; Bab2ADT l3 = new Bab2ADT(b); for (int j = 0; j < l1.size; j++) { l3.isiItem(i++, l1.itemDt[j]); } for (int a = 0; a < l2.size; a++) { l3.isiItem(i++, l2.itemDt[a]); } 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 Bab2ADT copyLarik(int k, int n, Bab2ADT l) { Bab2ADT result = null; if (n <= l.size - k) { result = new Bab2ADT(n); int j = 0; for (int i = k; i < k + n; i++) { result.isiItem(j++, l.itemDt[i]); } } return result; } 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 small = -1; double items; if (awal <= akhir) { small = awal; items = this.getItem(awal); for (int i = awal + 1; i < akhir; i++) { double vitem = this.getItem(i); if (items > vitem) { items = vitem; small = i; } } } return small; } public static Bab2ADT SelectionSort(Bab2ADT lAsal, int status) { int n = lAsal.getSize(); Bab2ADT lhasil = Bab2ADT.copyLarik(0, n, lAsal); if (status == 0) {// urutkan data dari kecil ke besar 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 { // urutkan data dari besar ke kecil 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; } }
Class Bab2ADTMain
package asdmodul1; public class Bab2ADTMain { public static void main(String[] args) { double[] A = {3, 4, 1, 10, 5, 2, 10, 20, 16}; double[] B = {4, 3, 1, 11, 7}; Bab2ADT L1 = new Bab2ADT(A); Bab2ADT L2 = new Bab2ADT(B); L1.cetak("Isi Larik L1"); L2.cetak("Isi Larik L2"); Bab2ADT L3 = Bab2ADT.sambung(L1, L2); L3.cetak("L3 = gabungan dari L1 & L2"); Bab2ADT L4 = Bab2ADT.copyLarik(0, L1.getSize(), L1); L1.cetak("Isi Larik L1"); L4.cetak("L4 copy dari L1"); Bab2ADT L5 = Bab2ADT.SelectionSort(L1, 0); L5.cetak("L5 Hasil pengurutan dari L1 kecil -> besar"); Bab2ADT L6 = Bab2ADT.SelectionSort(L1, 1); L6.cetak("L6 Hasil pengurutan dari L1 besar -> kecil"); L1.cetak("Isi Larik L1"); double hasil = Bab2ADT.LarikKaliLarik(L1, L4); System.out.printf("HASIL KALI %.3f\n", hasil); } }
Download the file here
0 comments:
Posting Komentar