UNIVERSITAS BRAWIJAYA BAB : ARRAY 1 DIMENSI NAMA : INAS AQLIYA NIM : 175150420111002 TANGGAL : 10/09/2018 ASISTEN : CANDRA ARDIANSYAH A. DEFINISI MASALAH 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. B. SOURCE CODE Soal 1 Larik.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Larik { private int size; private int[] itemDt; public void buatLarik(int n) { this.size = n; this.itemDt = new int[this.size]; } public Larik(int n) { buatLarik(n); } public int getSize() { return this.size; } public Larik(int[] dt) { buatLarik(dt.length); for (int i = 0; i < dt.length; i++) { isiItem(i, dt[i]);
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 } } public void isiItem(int id, int dt) { this.itemDt[id] = dt; } public Larik copyLarik(int k, int n) { Larik lHasil = null; if (n <= this.size - k) { lHasil = new Larik(n); int j = 0; for (int i = k; i < k + n; i++) { lHasil.isiItem(j++, this.itemDt[i]); } } return lHasil; } public void findPosKelipatan(int x0, int x1, int x2) { Larik lKelipatan = copyLarik(0, size); Larik faktorial = new Larik(lKelipatan.getSize()); int index = 0; for (int i = 0; i < lKelipatan.getSize(); i++) { if (lKelipatan.itemDt[i] % x0 == 0) { faktorial.isiItem(index, i); index++; } } System.out.println("Kelipatan 2 berada pada index ke : "); for (int j = 0; j < index; j++) { System.out.print(faktorial.itemDt[j] + " "); } System.out.println(""); System.out.println("-------------------------"); } public void Sort(int[] array) { int temp = 0; for (int i = 0; i < array.length; i++) { for (int j = 0; j < i; j++) { if (array[i] < array[j]) { temp = array[j]; array[j] = array[i]; array[i] = temp; } } } System.out.println("Setelah diurutkan menjadi : "); for (int k = 0; k < array.length; k++) { System.out.print(array[k] + " "); } System.out.println(""); } public static void main(String[] args) {
69 70 71 72 73 74 75 int[] A = {2, 34, 5, 7, 10}; Larik lC = new Larik(A); lC.findPosKelipatan(2, 1, 6); Larik lD = new Larik(A); lD.Sort(A); } } Soal 2 Larik2.java 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 public class Larik2 { private int size; private double[] itemDt; public Larik2(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 int getSize() { return this.size; } public double getItem(int i) { return this.itemDt[i]; } public static Larik2 sambung(Larik2 l1, Larik2 l2) { double[] C = new double[l1.getSize() + l2.getSize()]; int indexL1 = C.length - l2.getSize(); int indexL2 = 0; for (int indexC = 0; indexC < C.length; indexC++) { for (indexC = 0; indexC < indexL1; indexC++) { C[indexC] = l1.getItem(indexC); } for (indexC = indexC; indexC < C.length; indexC++) { C[indexC] = l2.getItem(indexL2); indexL2++; } } Larik2 L3 = new Larik2(C); 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++) {
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 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 Larik2 copyLarik(int k, int n, Larik2 l) { double[] copy = new double[l.getSize()]; double[] paste = new double[n]; for (int indeks = 0; indeks < l.getSize(); indeks++) { copy[indeks] = l.getItem(indeks); } for (int indeks = 0; indeks < n; indeks++) { paste[indeks] = copy[indeks]; } Larik2 L4 = new Larik2(paste); return L4; } 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; }
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 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 } } return posBesar; } public int getPosKecil(int awal, int akhir) { int posKecil = 0; 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; } public static Larik2 SelectionSort(Larik2 lAsal, int status) { int n = lAsal.getSize(); Larik2 lhasil = Larik2.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; } public int[] FindPosPos(double a){ int index = 0; int p[] = new int[size]; for (int i = 0; i < p.length; i++) { if (this.itemDt[i] == a){ p[index] = i; index++; }
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 } int posisi[] = new int[index]; for (int j = 0; j < index; j++) { posisi[j] = p[j]; } return posisi; } public static double LarikKaliLarik(Larik2 a, Larik2 b){ double hasil = 0; for (int i = 0; i < a.size; i++) { for (int j = 0; j < b.size; j++) { if (i == j) { hasil = hasil + a.itemDt[i] * b.itemDt[j]; } } } return hasil; } public static void main(String[] args) { double[] A = {3, 4, 1, 10, 5, 2, 10, 20, 16}; double[] B = {4, 3, 1, 11, 7}; Larik2 L1 = new Larik2(A); Larik2 L2 = new Larik2(B); L1.cetak("Isi Larik L1"); L2.cetak("Isi Larik L2"); Larik2 L3 = Larik2.sambung(L1, L2); L3.cetak("L3 = gabungan dari L1 dan L2"); Larik2 L4 = Larik2.copyLarik(0, L1.getSize(), L1); L1.cetak("Isi Larik L1"); L4.cetak("L4 Copy dari L1"); Larik2 L5 = Larik2.SelectionSort(L1, 0); L5.cetak("L5 Hasil Pengurutan dari L1 kecil -> besar"); Larik2 L6 = Larik2.SelectionSort(L1, 1); L6.cetak("L6 Hasil pengurutan dari L1 besar -> kecil"); L1.cetak("Isi Larik L1"); int []posisi = L1.FindPosPos(10); System.out.print("Posisi 10 pada L1 di index : "); for (int i = 0; i < posisi.length; i++) { System.out.print(posisi[i]+" "); } System.out.println(""); double hasil = Larik2.LarikKaliLarik(L1, L4); System.out.printf("HASIL KALI Larik L1*L4 = %.3f\n", hasil); } }
C. PEMBAHASAN Soal 1 Larik.java 1 2 3 4 8 11 14 20 23 34 51 52 Mendeklarasikan kelas menggunakan method public dengan nama Larik Mendeklarasikan variabel size beripe data integer dengan akses modifier private Mendeklarasikan array bernama itemDt dengan akses modifier private Mendeklarasikan method buatLarik dengan parameter bertipe integer dimana size diinisialisasikan dengan n dan itemDt diinstansiasi dengan n itu sendiri Mendeklarasikan method Larik dengan parameter bertipe integer yang di dalamnya terdapat method perintah untuk memuat larik Mendeklarasikan method getSize untuk mengambil nilai size Mendeklarasikan method Larik dengan parameter array bertipe integer yang di dalamnya terdapat perulangan untuk menampilkan larik sesuai dengan panjangnya Mendeklarasikan method isiItem dengan parameter bertipe integer dimana itemDt berindeks id sama dengan dt Mendeklarasikan method copyLarik dengan parameter bertipe integer yang di dalamnya memuat perintah perulangan untuk menampilkan hasil Mendeklarasikan method findPosKelipatan dengan parameter bertipe integer yang di dalamnya terdapat perintah untuk menampilkan posisi kelipatan Mendeklarasikan method sort dengan parameter array bertipe integer yang di dalamnya terdapat perulangan ....... Sehingga Mendeklarasikan method main yang di dalamnya berisi instansiasi dan pemanggilan method yang akan menampilkan posisi bilangan kelipatan dan juga method untuk menampilkan bilangan setelah diurutkan Soal 2 Larik2.java 1 2 3 4 11 14 17 34 37 Mendeklarasikan kelas menggunakan method public dengan nama Larik2 Mendeklarasikan variabel size beripe data integer dengan akses modifier private Mendeklarasikan array bernama itemDt dengan akses modifier private Mendeklarasikan method Larik2 dengan parameter array bertipe double dimana size diinisialisasikan dengan panjang dari variabel A dan itemDt diinstansiasi dengan elemen array sejumlah panjang dari variabel A itu sendiri. Lalu terjadi perulangan selama itemDt berindeks i sama dengan A berindeks i Mendeklarasikan method getSize untuk mendapatkan nilai size Mendeklarasikan method getItem dengan parameter bertipe integer untuk fungsi untuk mendapatkan item ke i dari suatu larik Mendeklarasikan method Larik2 sambung bertipe data class yang berisi instansiasi nilai c untuk menyambungkan dua larik yaitu l1 dan l2 Mendeklarasikan method isiItem dengan parameter bertipe integer untuk mengisi item suatu larik Mendeklarasikan method cetak dengan parameter bertipe string untuk mencetak isi item
44 53 66 79 95 111 134 149 160 Mendeklarasikan method findBesar untuk mendapatkan nilai terbesar dari suatu larik Mendeklarasikan method getPosisi dengan parameter bertipe double untuk mencari posisi suatu data tertentu di array Mendeklarasikan method copyLarik dengan parameter bertipe integer yang di dalamnya memuat perintah perulangan untuk mencopy isi suatu larik asal Mendeklarasikan method getPosBesar dengan parameter bertipe integer yang di dalamnya terdapat perintah untuk mencari posisi terbesar suatu data dari posisi awal sampai akhir Mendeklarasikan method getPosKecil dengan parameter bertipe integer yang di dalamnya terdapat perintah untuk mencari posisi terkecil suatu data dari posisi awal sampai akhir Mendeklarasikan method SelectionSort dengan parameter bertipe integer untuk mengurutkan suatu larik lAsal dimana kondisi lAsal akan tetap setelah proses pengurutan Mendeklarasikan method findPosPos dengan parameter bertipe double untuk mencari posisi bilangan yang diurutkan Mendeklarasikan method LarikKaliLarik dengan parameter bertipe class untuk mendapatkan hasil kali dua buah larik Mendeklarasikan method main yang di dalamnya berisi instansiasi dan pemanggilan method-method yang akan menampilkan isi larik, gabungan dari dua buah larik,hasil copy larik dari larik asal , hasil pengurutan dari kecil ke besar , dari besar ke kecil, isi larik asal, dan hasil kali L1 dengan L4 D. SCREENSHOT PROGRAM Soal 1
Soal 2 E. KESIMPULAN ADT(Abstract Data Type) adalah tipe data tertentu yang dilengkapi dengan model matematika dari objek data yaitu dengan cara mengaitkan tipe data tersebut dengan fungsi-fungsi yang beroperasi pada data yang bersangkutan. Contoh penerapan ADTd pada program menghitung umur ,sebagai berikut : Orang.java Import java.util.Calendar; public class Orang { private int tanggal,bulan,tahun; private static void Orang(int tanggal, int bulan, int tahun){ this.tanggal = tanggal; this.bulan = bulan; this.tahun = tahun; } private static int hitungUmur(int tahun) { int tahunIni = Calendar.getInstance().get(Calendar.Year); int umur = tahunIni – tahun; return umur; } public static void main(String[] args) { Orang a = new Orang(11,1,1998); System.out.println(“Umur anda = “ + a.umur); } }
Array adalah sekumpulan data homogen yang memiliki tipe data sama yang disusun oleh yang namanya elemen dan sertiap elemen diakses dengan nomor indeks dimulai dari [0]. Array terdiri dari array 1 dimensi dan array 2 dimensi . array 1 dimensi terdiri dari satu subskrip yaitu jumlah data maksimum. Sedangkan array 2 dimensi terdiri dari dua subskrip yaitu jumlah elemen baris dan jumlah elemen kolom. Array 1 Dimensi Array 2 Dimensi Deklarasi type[] namaVariabelArray atau type namaVariableArray[] Contoh deklarasi dan cara mengakses array 1 dimensi, sebagai berikut : - Pendeklarasian int [] nilai; nilai = new int[4]; - Cara mengakses nilai[0] = 31; nilai[1] = 28; nilai[2] = 31; nilai[3] = 30; Contoh deklarasi dan cara mengakses array 2 dimensi, sebagai berikut : - Pendeklarasian int array [3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}; - Cara mengakses Misalnya kita ingin mengakses nilai 6 yang ingin ditampung pada sebuah variabel (misalnya tampung) , caranya yaitu : Tampung = array[1][0] ; Data-data dalam array 1 dimensi dapat dimanipulasi baik secara individu maupun kelompok dan dapat digunakan dalam mengurutkan data maupun mencari data. Contoh penggunaan array dimensi 1 dalam kehidupan sehari-hari yaitu penyusunan buku dalam perpustakaan. penyusunan dalam rak per raknya di kelompokan dengan karya atau jenis yang lebih spesifik. type[][] namaVariabelArray atau type namaVariabelArray[][] Cara Mengakses namaArray[indeks] namaArray[baris][kolom]