Anda di halaman 1dari 15

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER


UNIVERSITAS BRAWIJAYA

BAB : ADT ARRAY 1 DIMENSI


NAMA : CAHYO GUSTI INDRAYANTO
NIM : 185150707111013
TANGGAL : 13/09/2019
ASISTEN : AFIF MUSYAYYIDIN

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.

Gambar 1. Potongan program utama


public class AppPr1 {
public static void main(String[] args) {
// implementasi untuk ADT_Larik
double []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("L1");
L2.cetak("L2");
Larik L3 = Larik.sambung(L1, L2);
L3.cetak("L3");
Larik L4 = Larik.copyLarik(0, L1.getSize(),
L1);
L1.cetak("L1");
L4.cetak("L4");

Larik L5 = Larik.SelectionSort(L1, 0);


L5.cetak("L5");
L1.cetak("L1");
int []posisi = L1.FindPosPos(10);

double hasil = Larik.LarikKaliLarik(L1, L4);


System.out.printf("HASIL KALI %.3f\n",hasil);
}
}

Dengan hasil keluaran sebagai berikut :


Isi Larik L1
3.00 4.00 1.00 10.00 5.00 2.00 10.00 20.00 16.00
Isi Larik L2
4.00 3.00 1.00 11.00 7.00
L3 = gabungan dari L1 dan L2
3.00 4.00 1.00 10.00 5.00 2.00 10.00 20.00 16.00 4.00 3.00
1.00 11.00
7.00
Isi Larik L1
3.00 4.00 1.00 10.00 5.00 2.00 10.00 20.00 16.00
L4 Copy dari L1
3.00 4.00 1.00 10.00 5.00 2.00 10.00 20.00 16.00
L5 Hasil pengurutan dari L1 kecil -> besar
1.00 2.00 3.00 4.00 5.00 10.00 10.00 16.00 20.00
L6 Hasil pengurutan dari L1 besar -> kecil
20.00 16.00 10.00 10.00 5.00 4.00 3.00 2.00 1.00
Isi Larik L1
3.00 4.00 1.00 10.00 5.00 2.00 10.00 20.00 16.00
HASIL KALI Larik L1*L4 = 911.000

B. SOURCE CODE
Larik.java
1 public class Larik {
2
3 private int size;
4 private int[] itemDt;
5
6 //method
7 public void buatLarik(int n) {
8 this.size = n;
9 this.itemDt = new int[this.size];
10 }
11
12 public Larik(int n) {
13 buatLarik(n);
14 }
15
16 public int getSize() {
17 return this.size;
18 }
19
20 public Larik(int[] dt) {
21 buatLarik(dt.length);
22 for (int i = 0; i < dt.length; i++) {
23 isiItem(i, dt[i]);
24 }
25 }
26
27 public void isiItem(int id, int dt) {
28 this.itemDt[id] = dt;
29 }
30
31 public void cetak(String komentar) {
32 System.out.println(komentar);
33 for (int i = 0; i < this.size; i++) {
34 System.out.print(this.itemDt[i] + " ");
35 }
36 System.out.println();
37 }
38
39 public int findBesar() {
40 int besar = this.itemDt[0];
41 for (int i = 1; i < this.size; i++) {
42 if (besar < this.itemDt[i]) {
43 besar = this.itemDt[i];
44 }
45 }
46 return besar;
47 }
48
49 /**
50 * * program ini mencari posisi suatu data tertentu di
51 larik
52 */
53 public int getPosisi(int dtCari) {
54 int pos = -99;
55 boolean ketemu = false;
56 int i = 0;
57 while (!ketemu && i < this.size) {
58 if (dtCari == this.itemDt[i]) {
59 ketemu = true;
60 pos = i;
61 }
62 i++;
63 }
64 return pos;
65 }
66
67 private int getPosMax(int id) {
68 int max = this.itemDt[id];
69 int posMax = id;
70 for (int i = id + 1; i < size; i++) {
71 if (max <= this.itemDt[i]) {
72 max = this.itemDt[i];
73 posMax = i;
74 }
75 }
76 return posMax;
77 }
78
79 private int getPosMin(int id) {
80 int min = this.itemDt[id];
81 int posMin = id;
82 for (int i = id + 1; i < size; i++) {
83 if (min >= this.itemDt[i]) {
84 min = this.itemDt[i];
85 posMin = i;
86 }
87 }
88 return posMin;
89 }
90
91 private int PencarianBiner(int dtCari, int awal, int
92 akhir) {
93 int pos = -99;
94 int tengah = (awal + akhir) / 2;
95 if (dtCari < this.itemDt[tengah]) {
96 return PencarianBiner(dtCari, awal, tengah);
97 } else if (dtCari > this.itemDt[tengah]) {
98 return PencarianBiner(dtCari, tengah + 1,
99 akhir);
100 } else if (dtCari == this.itemDt[tengah]) {
101 return tengah;
102 } else {
103 return pos;
104 }
105 }
106
107 /**
108 * * program untuk mencopy isi suatu Larik * mulai dari
109 posisi k sebanyak n
110 * item hasilnya * dikeluarkan sebagai array baru
111 */
112 public Larik copyLarik(int k, int n) {
113 Larik lHasil = null;
114 if (n <= this.size - k) {
115 lHasil = new Larik(n);
116 int j = 0;
117 for (int i = k; i < k + n; i++) {
118 lHasil.isiItem(j++, this.itemDt[i]);
119 }
120 }
121 return lHasil;
122 }
123
124 /**
125 * * pilihan 0 : urutkan dari kecil ke besar * lainya :
126 urutkan dari besar
127 * ke kecil * Algoritma pengurutan ini menggunakan
128 selection sort
129 */
130 public Larik SelectionSort(int pilihan) {
131 Larik lsort = copyLarik(0, size);
132 for (int i = 0; i < lsort.getSize(); i++) {
133 int posData;
134 if (pilihan == 0) {
135 posData = lsort.getPosMin(i);
136 } else {
137 posData = lsort.getPosMax(i);
138 }
139 int dt1 = lsort.itemDt[i];
140 int dt2 = lsort.itemDt[posData];
141 lsort.itemDt[i] = dt2;
142 lsort.itemDt[posData] = dt1;
143 }
144 return lsort;
145 }
146
147 int findPosKelipatan(int x0, int x1, int x2) {
148 int pos = 0;
149 for (int i = 0; i < x2; i++) {
150 if (this.itemDt[i] % x0 == 0) {
151 pos = i;
152 System.out.println(pos + " ");
153 }
154 }
155 System.out.println("");
156 return pos;
157 }
158
159 public void Sorting(int[] array) {
160 for (int i = 0; i < array.length; i++) {
161 for (int j = array.length - 1; j >= 1; j--) {
162 if (array[j] < array[j - 1]) {
163 int sort = array[j];
164 array[j] = array[j - 1];
165 array[j - 1] = sort;
166 }
167 }
168 System.out.println(array[i] + " ");
169 }
170 }
171
172 public static void main(String[] args) {
173 int[] A = {2, 34, 5, 7, 10};
174 Larik lA = new Larik(A);
175
176 lA.cetak("Sebelum");
177 lA.SelectionSort(0).cetak("Sesudah di sort");
178 //int k = lA.PencarianBiner(34,0,5);
179 //System.out.println(k);
180 Larik lB = lA.SelectionSort(0);
181 int p = lB.PencarianBiner(10, 0, 5);
182 System.out.println("Pencarian Biner");
183 System.out.println(p);
184 System.out.println("Hasil Pencarian Bilangan
185 Kelipatan 2");
186 lA.findPosKelipatan(2, 0, 5);
187 System.out.println("Pengurutan dengan algoritma
lain");
188 lA.Sorting(A);
189 System.out.println("");

190 }

191 }

Larik2.java
1 public class Larik2 {
2
3 private int size;
4 private double[] itemDt;
5
6 public Larik2(int n) {
7 buatLarik(n);
8 }
9
10 public void buatLarik(int n) {
11 this.size = n;
12 this.itemDt = new double[this.size];
13 }
14
15 public Larik2(double[] A) {
16 this.size = A.length;
17 this.itemDt = new double[this.size];
18 for (int i = 0; i < this.size; i++) {
19 this.itemDt[i] = A[i];
20 }
21 }
22
23 public int getSize() {
24 return this.size;
25 }
26
27 public double getItem(int i) {
28 return this.itemDt[i];
29 }
30
31 public static Larik2 sambung(Larik2 l1, Larik2 l2)
32 {
33 int j = 0;
34 Larik2 larikSambung = new Larik2(l1.getSize() +
35 l2.getSize());
36 for (int i = 0; i < l1.getSize(); i++) {
37 larikSambung.isiItem(j++, l1.itemDt[i]);
38 }
39 for (int i = 0; i < l2.getSize(); i++) {
40 larikSambung.isiItem(j++, l2.itemDt[i]);
41 }
42 return larikSambung;
43 }
44
45 public void isiItem(int id, double dt) {
46 this.itemDt[id] = dt;
47 }
48
49 public void cetak(String komentar) {
50 System.out.println(komentar);
51 for (int i = 0; i < this.size; i++) {
52 System.out.printf("%.2f ", this.itemDt[i]);
53 }
54 System.out.println();
55 }
56
57 public double findBesar() {
58 double besar = this.itemDt[0];
59 for (int i = 1; i < this.size; i++) {
60 if (besar < this.itemDt[i]) {
61 besar = this.itemDt[i];
62 }
63 }
64 return besar;
65 }
66
67 public int getPosisi(double dtCari) {
68 int pos = -99;
69 boolean ketemu = false;
70 int i = 0;
71 while (!ketemu && i < this.size) {
72 if (dtCari == this.itemDt[i]) {
73 ketemu = true;
74 pos = i;
75 }
76 i++;
77 }
78 return pos;
79 }
80
81 public static Larik2 copyLarik(int k, int n, Larik2
82 l) {
83 Larik2 copy = new Larik2(new double[n]);
84 for (int i = k; i < n; i++) {
85 copy.isiItem(i, l.getItem(i));
86 }
87 return copy;
88 }
89
90 public int getPosBesar(int awal, int akhir) {
91 int posBesar = -1;
92 double itemBesar;
93 if (awal <= akhir) {
94 posBesar = awal;
95 itemBesar = this.getItem(awal);
96 for (int i = awal + 1; i < akhir; i++) {
97 double nilaiItem = this.getItem(i);
98 if (itemBesar < nilaiItem) {
99 itemBesar = nilaiItem;
100 posBesar = i;
101 }
102 }
103 }
104 return posBesar;
105 }
106
107 public int getPosKecil(int awal, int akhir) {
108 int posKecil = -1;
109 double itemKecil;
110 if (awal <= akhir) {
111 posKecil = awal;
112 itemKecil = this.getItem(awal);
113 for (int i = awal + 1; i < akhir; i++) {
114 double nilaiItem = this.getItem(i);
115 if (itemKecil > nilaiItem) {
116 itemKecil = nilaiItem;
117 posKecil = i;
118 }
119 }
120 }
121 return posKecil;
122 }
123
124 public static Larik2 SelectionSort(Larik2 lAsal,
int status) {
125 int n = lAsal.getSize();
126 Larik2 lhasil = Larik2.copyLarik(0, n, lAsal);
127 if (status == 0) {
128 for (int i = 0; i < n; i++) {
129 int posKecil = lhasil.getPosKecil(i,
130 n);
131 double itemKecil =
132 lhasil.getItem(posKecil);
133 double itemI = lhasil.getItem(i);
134 lhasil.isiItem(i, itemKecil);
135 lhasil.isiItem(posKecil, itemI);
136 }
137 } else {
138 for (int i = 0; i < n; i++) {
139 int posBesar = lhasil.getPosBesar(i,
140 n);
141 double itemBesar =
142 lhasil.getItem(posBesar);
143 double itemI = lhasil.getItem(i);
144 lhasil.isiItem(i, itemBesar);
145 lhasil.isiItem(posBesar, itemI);
146 }
147 }
148 return lhasil;
149 }
150
151 public static double LarikKaliLarik(Larik2 a,
Larik2 b) {
152 double hasilKali = 0;
153 if (a.getSize() == b.getSize()) {
154 int j = a.getSize();
155 for (int i = 0; i < j; i++) {
156 hasilKali = hasilKali + a.getItem(i) *
b.getItem(i);
157 }
158 }
159 return hasilKali;
160 }

161 }

MainLarik2.java
1 public class MainLarik2 {
2
3 public static void main(String[] args) {
4 double[] A = {3, 4, 1, 10, 5, 2, 10, 20, 16};
5 double[] B = {4, 3, 1, 11, 7};
6 Larik2 L1 = new Larik2(A);
7 Larik2 L2 = new Larik2(B);
8
9 L1.cetak("Isi Larik L1");
10 L2.cetak("Isi Larik L2");
11 Larik2 L3 = Larik2.sambung(L1, L2);
12 L3.cetak("L3 = gabungan dari L1 dan L2");
13 Larik2 L4 = Larik2.copyLarik(0, L1.getSize(), L1);
14 L1.cetak("Isi Larik L1");
15 L4.cetak("L4 copy dari L1");
16 Larik2 L5 = Larik2.SelectionSort(L1, 0);
17 L5.cetak("L5 Hasil pengurutan dari L1 kecil ->
18 besar");
19 Larik2 L6 = Larik2.SelectionSort(L1, 1);
20 L6.cetak("L6 Hasil pengurutan dari L1 besar ->
21 kecil");
22 double hasil = Larik2.LarikKaliLarik(L1, L4);
23 L1.cetak("Isi Larik L1");
24 System.out.printf("HASIL KALI Larik L1*L4 =
25 %.3f\n", hasil);
26 }
27 }

C. PEMBAHASAN
Larik.java
1 Deklarasi class Larik
2 Deklarasi atribut size dengan tipe data integer, modifier private, atribut
itemDt bertipe data integer dengan modifier private yang merupakan array 1
dimensi
3 Deklarasi method void dengan nama buatLarik dan berparameter n bertipe
data integer. Method ini berfungsi untuk membuat larik baru.
4 Deklarasi konsturktor Larik berparameter n bertipe data integer
5 Deklarasi method non void dengan nama getSize bertipe data integer. Method
ini mengembalikan nilai size.
6 Deklarasi konstruktor Larik berparameter array 1 dimensi
7 Deklarasi method void dengan nama isiItem dan berparameter id dan dt yang
bertipe data integer. Method ini berfungsi untuk mengisi larik.
8 Deklarasi method void dengan nama cetak dan berparameter komentar bertipe
data String. Method ini berfungsi untuk mencetak larik.
9 Deklarasi method non void dengan nama findBesar. Method ini berfungsi
untuk menemukan elemen terbesar dari larik.
10 Deklarasi method non void dengan nama getPosisi dan berparameter dtCari
bertipe data integer. Method ini berfungsi untuk menemukan posisi dari
elemen yang dicari.
11 Deklarasi method non void dengan nama getPosMax dan berparameter id
bertipe integer. Method ini berfungsi untuk mencari posisi elemen dengan
nilai tertinggi dari larik.
12 Deklarasi method non void dengan nama getPosMin dan berparameter id
bertipe data integer. Method ini berfungsi untuk mencari posisi elemen
dengan nilai terendah dari larik.
13 Deklarasi method non void dengan nama PencarianBiner dan berparameter
dtCari, awal, dan akhir bertipe data integer. Method ini berfungsi untuk
mencari nilai biner dalam larik.
14 Deklarasi method dengan nama copyLarik dan berparameter k dan n bertipe
data integer. Method ini berfungsi menyalin larik dan menampilkan sebagai
larik baru.
15 Deklarasi method dengan nama SelectionSort dan berparameter pilihan
bertipe data integer. Method ini berfungsi untuk mengurutkan larik. Jika
pilihan bernilai 0 maka akan mengurutkan dari kecil ke besar, sedangkan jika
pilihan bernilai selain 0 maka akan mengurutkan dari besar ke kecil.
16 Deklarasi method non void dengan nama findPosKelipatan berparameter
x0,x1,x2 bertipe data integer. Method ini berfungsi untuk menemukan posisi
dari kelipatan angka yang diinputkan. Deklarasi method void dengan nama
Sorting. Method ini berfungsi untuk mengurutkan larik. Method ini
merupakan metode pengurutan selain selection sort.
17 Deklarasi main class
18 Pemanggilan method cetak Pemanggilan method SelectionSort, lA
merupakan larik yang sudah diurutkan dari kecil ke besar
19 Pemanggilan method pencarianBiner, p merupakan variabel berisi biner yang
dicari.
20 Pemanggilan method findPosKelipatan, lA merupakan larik berisi posisi
bilangin kelipatan 2 di dalam larik A.
21 Pemanggilan method Sorting, lA merupakan larik berisi larik yangsudah
diurutkan dari kecil ke besar.

Larik2.java
1 Deklarasi class Larik2
2 Deklarasi atribut size dengan tipe data integer, modifier private, atribut
itemDt bertipe data double dengan modifier private yang merupakan array 1
dimensi
3 Deklarasi konstruktor Larik2 dengan parameter n bertipe data integer.
4 Deklarasi method void buatLarik dan memiliki parameter n bertipe data n.
5 Method ini berfungsi untuk membuat larik baru.
6 Konstruktor Larik2 dengan parameter array satu dimensi. Deklarasi method
non void getSize bertipe data integer. Method ini mengembalikan nilai size.
7 Deklarasi method non void dengan nama getItem dan berparameter i bertipe
data integer. Method ini berfungsi untuk mendapatkan isi dari larik.
8 Deklarasi method static dengan nama sambung. Method ini berfungsi untuk
menyambung antara larik 1 dengan larik 2. Cara kerja method ini yaitu
membuat larik baru dengan nama lariksambung, kemudian dengan
menggunakan method getItem mendapatkan isi dari kedua larik. Lalu mengisi
larik dengan memanfaatkan method isiItem.
9 Deklarasi method void dengan nama isiItem dan memiliki parameter id yang
bertipe data integer dan parameter dt yang bertipe data double. Method ini
berfungsi untuk mengisi larik.
10 Deklarasi method void dengan nama cetak dan memiliki parameter komentar
bertipe data String. Method ini berfungsi untuk mencetak larik.
11 Deklarasi method non void dengan nama findBesar. Method ini berfungsi
untuk menemukan elemen dengan nilai terbesar dari larik.
12 Deklarasi method void bernama getPosisi dan memiliki parameter dtCari
bertipe data double. Method ini berfungsi untuk menemukan posisi dari
elemen yang dicari.
13 Deklarasi method static dengan nama copyLarik. Method ini berfungsi untuk
menyalin sebuah larik menjadi larik baru.
14 Deklarasi method void bernama getPosBesar dan memiliki parameter awal
dan akhir bertipe integer. Method ini berfungsi untuk mencari posisi elemen
dengan nilai tertinggi dari larik.
15 Deklarasi method void bernama getPosKecil dan memiliki parameter awal
dan akhir bertipe data integer. Method ini berfungsi untuk mencari posisi
elemen dengan nilai terendah dari larik.
16 Deklarasi method dengan nama SelectionSort. Method ini berungsi untuk
mengurutkan elemen dari larik.
17 Deklarasi method dengan nama LarikKaliLarik. Method ini berfungsi untuk
mengalikan antara dua larik.

MainLarik2.java
1 Deklarasi class dengan nama MainLarik2
2 Pengisian array A dan B
3 Pembuatan objek dengan nama L1 dan L2
4 Deklarasi main class
5 Pemanggilan method cetak
6 Pemanggilan method sambung, L3 berisi larik sambung L1 dan L2
7 Pemanggilan method copyLarik, L4 berisi salinan dari larik L1
8 Pemanggilan method SelectionSort, L5 berisi larik pengurutan dari L1 dari
kecil ke besar
9 Pemanggilan method SelectionSort, L5 berisi larik pengurutan dari L1 dari
besar ke kecil
10 Pemanggilan method LarikKaliLarik, L6 berisi hasil dari perkalian L1 dengan
L4
D. SCREENSHOT PROGRAM

Output Soal 1.

Output Soal 2.

E. KESIMPULAN
1. ADT (abstract data type) adalah model matematika dari objek data yang
menyempurnakan tipe data dengan cara mengaitkan dengan fungsi-fungsi yang
beroperasi pada data yang bersangkutan. ADT dapat berupa tipe data dasar
namun diberi nama baru atau berupa kumpulan tipe data berbeda yang diberi
nama baru. Beberapa contoh dari tipe data abstrak diantaranya adalah Stack,
Queue, dan List. Implementasi dari ADT harus menyediakan cara tertentu untuk
merepresentasikan unsur tipe data dan cara mengimplementasikan operasi-
operasi. Secara umum, kita akan mendeskripsikan operasi-operasi pada ADT
dengan algoritma tertentu. Algoritma ini biasanya berupa urutan instruksi yang
menspesifikasi secara tepat bagaimana operasi-operasi akan dilakukan atau
dieksekusi oleh komputer. Contoh penerapannya:

… ….
7 struct tgl { int
8 hari; int
9 bulan; int
10 tahun;
11 }
… …

2. Array adalah struktur data yang terdiri atas banyak variable dengan tipe data
sama, dimana masing-masing elemen variable mempunyai nilai indeks. Array
adalah representas data pada lokasi memori secara berurutan dan bertipe sama.
Array menggunakan indeks integer untuk menentukan urutan elemen-elemennya,
dimana suatu array yang berjumlah n elemen, indeksnya selalu dimulai dari 0
sampai n-1.
Cara mendeklarasikan array yaitu sama dengan deklarasi tipe data biasa hanya
saja pada array diberi tanda kurung siku [ ].
Tipe_Data[ ] Nama_Array = new Tipe_Data [Jumlah_Elemen];
Contoh:

… … int [] bil = new int [7];


2

Cara mengakses array dapat dilakukan dengan menyebutkan elemen ke berapa


dari array yang akan diakses.
Nama_Array[Elemen_Array];
Contoh:

… …
5 Bil = [10];

Terdapat 2 macam array yaitu array 1 dimensi dan array 2 dimensi. Array 1
dimensi adalah kumpulan-kumpulan elemen yang memiliki tipe data yang sama
dan hanya memiliki satu indeks saja. Array 2 dimensi merupakan sebuah
perluasan dari sebuah array satu dimensi. Jika pada array 1 dimensi hanya terdiri
dari sebuah baris dengan beberapa kolom elemen, maka pada array 2 dimensi
terdiri dari beberapa baris dan beberapa kolom elemen yang bertipe data sama.
Contoh array 1 dimensi:

… …
5 String [] nama = new String [2];

Contoh array 2 dimensi:

… …
5 String [][] nama = new String [2][4];

3. Cara penggunaan dari array yang pertama yaitu mendeklarasikan array dengan
sintaks Tipe_data [] nama_array = new tipe_data[jumlah_elemen];. Kemudian
menentukan berapa jumlah elemen dengan sebuah konstruktor atau bisa juga
disebut proses instansiasi. Kemudian jika akan mengakses yaitu dengan sintaks
nama_array[elemen_array] Contoh:

… …
5 String [] nama = new String [2];
6 nama [0] = “ara”; nama [1] =
7 “vio”;
8 System.out.println(nama[0]);
9 System.out.println(nama[1]);
… …

Anda mungkin juga menyukai