Jumat, 05 Januari 2018

, ,

ALGORITMA & STRUKTUR DATA BAB 2 : ADT ARRAY 1 DIMENSI

Laporan Praktikum Algoritma & Struktur Data Bab 2 Fakultas Ilmu Komputer Universitas Brawijaya 2017/2018

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
Share:

0 comments:

Posting Komentar