Anda di halaman 1dari 13

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER


UNIVERSITAS BRAWIJAYA

BAB : ADT ARRAY 1 DIMENSI


NAMA : PHILLIP TOTHALOVE CHRISYUONO
NIM : 185150200111003
TANGGAL : 09/09/2019
ASISTEN : PANDU DEWABRATA

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:

Gambar 2. Hasil keluaran


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 package bab2;
2 public class Larik {
3 private int size;
4 private int[] itemDt;
5
6 public Larik(int n) {
7 buatLarik(n);
8 }
9
10 public Larik(int[] dt) {
11 buatLarik(dt.length);
12 for (int i = 0; i < dt.length; i++)
13 isiItem(i, dt[i]);
14 }
15
16 public void buatLarik(int n) {
17 this.size = n;
18 this.itemDt = new int[this.size];
19 }
20
21 public int getSize() {
22 return this.size;
23 }
24
25 public void isiItem(int id, int dt) {
26 this.itemDt[id] = dt;
27 }
28
29 public int findBesar() {
30 int besar = this.itemDt[0];
31 for (int i = 1; i < this.size; i++) {
32 if (besar < this.itemDt[i]) {
33 besar = this.itemDt[i];
34 }
35 }
36 return besar;
37 }
38
39 public int getPosisi(int dtCari) {
40 int pos = -99;
41 boolean ketemu = false;
42 int i = 0;
43 while (!ketemu && i < this.size) {
44 if (dtCari == this.itemDt[i]) {
45 ketemu = true;
46 pos = i;
47 }
48 i++;
49 }
50 return pos;
51 }
52
53 private int getPosMax(int id) {
54 int max = this.itemDt[id];
55 int posMax = id;
56 for (int i = id + 1; i < size; i++) {
57 if (max <= this.itemDt[i]) {
58 max = this.itemDt[i];
59 posMax = i;
60 }
61 }
62 return posMax;
63 }
64
65 private int getPosMin(int id) {
66 int min = this.itemDt[id];
67 int posMin = id;
68 for (int i = id + 1; i < size; i++) {
69 if (min >= this.itemDt[i]) {
70 min = this.itemDt[i];
71 posMin = i;
72 }
73 }
74 return posMin;
75 }
76
77 public int PencarianBiner(int dtCari, int awal,
int akhir) {
78 int pos = -99;
79 int tengah = (awal + akhir) / 2;
80 if (dtCari < this.itemDt[tengah])
81 return PencarianBiner(dtCari, awal,
tengah);
82 else if (dtCari > this.itemDt[tengah])
83 return PencarianBiner(dtCari, tengah +
1, akhir);
84 else if (dtCari == this.itemDt[tengah])
85 return tengah;
86 else
87 return pos;
88 }
89
90 public void cetak(String komentar) {
91 System.out.println(komentar);
92 for (int i = 0; i < this.size; i++) {
93 System.out.print(this.itemDt[i] + "
");
94 }
95 System.out.println();
96 }
97
98 public Larik copyLarik(int k, int n) {
99 Larik lHasil = null;
100 if (n <= this.size - k) {
101 lHasil = new Larik(n);
102 int j = 0;
103 for (int i = k; i < k + n; i++) {
104 lHasil.isiItem(j++,
this.itemDt[i]);
105 }
106 }
107 return lHasil;
108 }
109
110 public Larik SelectionSort(int pilihan) {
111 Larik lsort = copyLarik(0, size);
112 for (int i = 0; i < lsort.getSize(); i++) {
113 int posData;
114 if (pilihan == 0)
115 posData = lsort.getPosMin(i);
116 else
117 posData = lsort.getPosMax(i);
118 int dt1 = lsort.itemDt[i];
119 int dt2 = lsort.itemDt[posData];
120 lsort.itemDt[i] = dt2;
121 lsort.itemDt[posData] = dt1;
122 }
123 return lsort;
124 }
125
126 public Larik InsertionSort() {
127 Larik lsort = copyLarik(0, size);
128 for (int i = 1; i < size; i++) {
129 for (int j = i; j >= 1 &&
lsort.itemDt[j] < lsort.itemDt[j - 1]; j--) {
130 lsort.itemDt[j] =
lsort.itemDt[j] + lsort.itemDt[j - 1];
131 lsort.itemDt[j - 1] =
lsort.itemDt[j] - lsort.itemDt[j - 1];
132 lsort.itemDt[j] =
lsort.itemDt[j] - lsort.itemDt[j - 1];
133 }
134 }
135 return lsort;
136 }
137
138 public void findPosKelipatan(int x0, int x1, int
x2) {
139 System.out.print("[");
140 for (int i = x1; i <= x2; i++) {
141 if (this.itemDt[i] % x0 == 0) {
142 System.out.print(i);
143 if (i == x2) {
144 continue;
145 }
146 System.out.print(", ");
147 }
148 }
149 System.out.println("]");
150 }
151
152 public static void main(String[] args) {
153 int[] A = { 2, 34, 5, 7, 10 };
154 Larik lA = new Larik(A);
155 lA.cetak("Sebelum");
156 lA.SelectionSort(0).cetak("Sesudah di
sort");
157
158 System.out.println("Mencari Kelipatan 5 pada
index 1 sampai 4: ");
159 lA.findPosKelipatan(5, 1, 4);
160
161 Larik lB = lA.SelectionSort(0);
162 int p = lB.PencarianBiner(10, 0, 5);
163 System.out.println(p);
164
165
lA.cetak("Sebelum");
166
lA.InsertionSort().cetak("Sesudah di sort
dengan cara selain selection sort: INSERTION SORT");
167
}
168
}

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

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

Larik.java
1 Deklarasi nama package
3 Deklarasi nama class
5 Deklarasi variabel int dengan nama size
6 Deklarasi array int dengan nama itemDt
8-10 Merupakan constructor untuk membuat Larik dengan memanggil method
buatLarik()
12-16 Merupakan constructor untuk membuat Larik dengan parameter array
integer
18-21 Merupakan method buatLarik() yang berfungsi untuk membuat Larik
dengan panjang indeks tertentu
23-25 Merupakan method getSize() yang berfungsi untuk mengembalikan nilai
panjang indeks pada Larik
27-29 Merupakan method isiItem() yang berfungsi untuk memasukkan suatu
nilai pada indeks tertentu dalam Larik
31-39 Merupakan method getBesar() yang berfungsi untuk mencari nilai
terbesar dalam Larik
41-53 Merupakan method getPosisi() yang berfungsi untuk mencari posisi nilai
tertentu di dalam Larik
55-65 Merupakan method getPosMax() yang berfungsi untuk mencari indeks
posisi nilai terbesar dalam Larik
67-77 Merupakan method getPosMin() yang berfungsi untuk mencari indeks
posisi nilai terkecil dalam Larik
79-90 Merupakan method PencarianBiner() dengan parameter tertentu, berfungsi
untuk mencari suatu nilai dalam Larik dengan batas awal dan batas akhir
92-98 Merupakan method cetak() yagn berfungsi untuk mencetak Larik dengan
komentar
100-110 Merupakan method copyLarik() dengan parameter tertentu, berfungsi
untuk menyalin isi suatu Larik dengan batasan indeks tertentu
112-126 Merupakan method SelectionSort() yang berfungsi untuk mengurutkan
Larik dari kecil ke besar jika argumennya 0, dari besar ke kecil jika
argumennya 1
128-138 Merupakan method InsertionSort() yang berfungsi untuk mengurutkan
Larik dari kecil ke besar dengan menggunakan algoritma menentukan
posisi agar posisi nilai yang kecil semakin ke depan di setiap iterasinya.
140-152 Merupakan method findPosKelipatan() dengan parameter tertentu, dengan
tujuan untuk mencari kelipatan dari suatu nilai dalam interval indeks
tertentu
154 Deklarasi method main
155 Deklarasi array int dengan nama A dan nilai 2, 34, 5, 7, 10
156 Instansiasi kelas Larik ke dalam objek lA dengan argumen constructor
array A
157 Pemanggilan method cetak dari objek lA dengan argumen "Sebelum"
158 Pemanggilan method SelectionSort berargumen 0 dari objek lA, lalu
method cetak dengan argumen "Sesudah di sort"
160 Output "Mencari Kelipatan 5 pada index 1 sampai 4: "
161 Pemanggilan method findPosKelipatan dengan argumen 5, 1 dan 4 dari
objek lA
163 Deklarasi variabel lB dengan tipe Larik lB yang mereference ke hasil
pemanggilan method SelectionSort dengan argumen dari objek lA
164 Deklarasi variabel int p dengan hasil pemanggilan method PencarianBiner
dengan argumen 10, 0 dan 5 dari objek lB
165 Output dari variabel p
167 Pemanggilan method cetak dengan argumen "Sebelum" dari objek lA
168 Pemanggilan method InsertionSort() dari objek lA, lalu method cetak
dengan argumen tertentu

Larik_1.java
1 Deklarasi nama package
3 Deklarasi nama kelas
5 Deklarasi variabel int dengan nama size
6 Deklarasi array double dengan nama itemDt
8-14 Constructor untuk membuat larik dengan parameter array double
16-18 Merupakan method getSize() yang berfungsi untuk mengembalikan nilai
panjang indeks Larik
20-22 Merupakan method getItem() yang berfungsi untuk mengembalikan nilai
dari larik dengan indeks tertentu
24-37 Merupakan method sambung() yang berfungsi untuk menyambungkan
dua larik menjadi satu
39-41 Merupakan method isiItem() yang berfungsi untuk mengisi suatu nilai
pada larik di indeks tertentu
43-49 Merupakan method cetak() yang berfungsi untuk mencetak larik dengan
komentar
51-59 Merupakan method findBesar() yang berfungsi untuk mencari nilai
terbesar dari larik
61-73 Merupakan method getPosisi() yang berfungsi untuk mencari posisi
sebuah nilai di dalam larik
75-85 Merupakan method Larik_1 copyLarik() dengan parameter tertentu,
berfungsi untuk menyalin larik lain dengan batas awal dan batas akhir ke
dalam larik lainnya
87-102 Merupakan method getPosBesar() yang berfungsi untuk mencari posisi
nilai terbesar dalam larik
104-119 Merupakan method getPosKecil() yang berfungsi untuk mencari posisi
nilai terkecil dalam larik
121-142 Merupakan method SelectionSort() ysng berfungsi mengurutkan suatu
larik dari nilai terkecil ke terbesar jika inputnya sama dengan 0 dan dari
nilai terbesar ke terkecil jika inputnya sama dengan 1
144-150 Merupakan method LarikKaliLarik() yang berfungsi untuk menghitung
jumlah hasil perkalikan nilai dari kedua larik yang memiliki indeks yang
sama

MainLarik.java
1 Deklarasi nama package
3 Deklarasi nama class
5 Deklarasi method main
6 Deklarasi array double dengan nama A dan nilai 3, 4, 1, 10, 5, 2, 10, 20,
16
7 Deklarasi array double dengan nama B dan nilai 4, 3, 1, 11, 7
8 Instansiasi kelas Larik_1 ke dalam objek L1 dengan argumen constructor
array A
Instansiasi kelas Larik_1 ke dalam objek L2 dengan argumen constructor
9 array B
Pemanggilan method cetak dengan argumen "Isi Larik L1" dari objek L1
10 Pemanggilan method cetak dengan argumen "Isi Larik L2" dari objek L2
11 Deklarasi objek L3 yang mereference ke hasil pemanggilan method
12 sambung dengan argumen objek L1 dan L2 dari kelas Larik_1
Pemanggilan method cetak dengan argumen "L3 = gabungan dari L1 dan
13 L2" dari objek L3
Deklarasi objek L4 dengan tipe Larik_1 yang mereference ke hasil
14 pemanggilan method copyLarik dengan argumen 0, objek L1 dan hasil
pemanggilan method getSize dari objek L1 dari kelas Larik_1
Pemanggilan method cetak dengan argumen "Isi Larik L1" dari objek L1
15 Pemanggilan method cetak dengan argumen "L$ Copy dari L1" dari objek
16 L4
Deklarasi objek L5 dengan tipe Larik_1 yang mereference dari
17 pemanggilan method SelectionSort dengan argumen objek L1 dan 0 dari
kelas Larik_1
Pemanggilan method cetak dengan argumen " L5 Hasil Pengurutan dari
18 L1 kecil -> besar " dari objek L5
Deklarasi objek L6 dengan tipe Larik_1 yang mereference dari
19 pemanggilan method SelectionSort dengan argumen objek L1 dan 1 dari
kelas Larik_1
Pemanggilan method cetak dengan argumen " L6 Hasil Pengurutan dari
20 L1 besar -> kecil " dari objek L6
Pemanggilan method cetak dengan argumen "Isi Larik L1" dari objek L1
21 Deklarasi variabel double dengan nama hasil dengan hasil pemanggilan
22 method LarikKaliLarik dengan argumen objek L1 dan L4 dari kelas
Larik_1
Output nilai variabel hasil dengan format "HASIL KALI %.3f\n"
23

D. SCREENSHOT PROGRAM

Gambar 1. Screenshot Output Tugas 1


Gambar 2. Screenshot Output Tugas 2

E. KESIMPULAN

ADT (Abstract Data Type) adalah model matematika dari objek data yang
menyempurnakan tipe data dengan cara mengaitkannya dengan fungsi-fungsi yang
beroprasi pada data yang bersangkutan. Contoh penerapan ADT adalah: list, stack, queue,
set, map, priority queue. Jadi untuk membuat ADT, kita harus bisa memikirkan algoritma
yang paling sederhananya terlebih dahulu.

Array adalah representasi data pada lokasi memori secara berurutan dan mempunyai
tipe yang sama. Pengaksesan data ke dalam array menggunakan indeks. Karena sifatnya
yang seperti inilah maka array cocok digunakan untuk pengornasisasian data yang
seragam.

Cara Deklarasi : typeData [] namaLarik;


Cara Akses: menggunakan indeks, namaLarik[indeks]
//contoh dari deklarasi
Int[] Sewa = {20000,15000,14000};

//contoh akses array dengan indeks


Sewa[1] = Sewa[1]+5000;

Untuk macam-macam Array ada 1 Dimensi, 2 Dimensi, dan multidimensi.

Pengunaan dari Array 1 dimensi biasanya untuk menyimpan data yang bisa
menampung hanya 1 dimensi saja. Pada dasarnya tipe data array pun juga termasuk tipe
data bentukan, sehingga atas dasar inilah kita bisa membuat varian dari aplikasi array.
Contohnya:
Larik
int size
Object [] item
BuatLarik(int)
setItem(int id, Object dt)
int getSize()
int getPos(Object dt)
int []getPosPos(Object dt)
Object getMax()
Object getMin()
Larik Sort();
Larik Copy(int id, int n)

Anda mungkin juga menyukai