Laporan2 155150207111141 LuthfiFawwazPutranto
Laporan2 155150207111141 LuthfiFawwazPutranto
A. DEFINISI MASALAH
1. Kembangkan program di atas dengan menambahkan method berikut :
a. Mencari posisi bilangan genap yang terletak diantara bilangan x1 dan
bilangan x2 dengan header sebagai berikut :
int findPosGenap(int x1, int x2)
b. Gunakan algoritma pengurutan yang lain BubleSort dan MergeSort
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.
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
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
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
142
/**
143
* fungsi untuk mencari posisi data terkecil suatu array
144
* mulai dari posisi awal sampai posisi akhir
145
* @param awal : posisi awal
146
* @param akhir : posisi akhir
147
* @return posisi data terkecil
148
*/
149
public int getPosKecil(int awal, int akhir){
150
// lenkapi bagian ini
151
}
151
152
/**
153
* fungsi pengurutan suatu larik lAsal dimana kondisi
154 lAsal
155
* akan tetap setelah proses pengurutan
156
* @param lAsal : Array asal yang akan diurutkan
157
* @param status : 0-> urut dari kecil ke besar
158
*
1-> urut dari besar ke kecil
159
* @return Array baru hasil pengurutan
160
*/
161
public static Larik SelectionSort(Larik lAsal, int
162 status){
163
int n = lAsal.getSize();
164
Larik lhasil = Larik.copyLarik(0, n, lAsal);
165
if (status == 0){// urutkan data dari kecil ke
166 besar
167
for (int i=0; i<n; i++){
168
int posKecil = lhasil.getPosKecil(i,
169 n);
170
double itemKecil =
171 lhasil.getItem(posKecil);
172
double itemI = lhasil.getItem(i);
173
lhasil.isiItem(i, itemKecil);
174
lhasil.isiItem(posKecil, itemI);
public
class AppPr1 {
175
}
args)dari
{ besar ke kecil
176 public static} void
else main(String[]
{ // urutkan data
// implementasi
untuk
ADT_Larik
177
for (int i=0; i<n; i++){
double []A = {3,4,1,10,5,2,10,20,16};
178
int posBesar = lhasil.getPosBesar(i,
double []B = {4,3,1,11,7};
179 n);
Larik L1 = new Larik(A);
180
double itemBesar =
Larik L2 = new Larik(B);
181 lhasil.getItem(posBesar);
182
double itemI = lhasil.getItem(i);
L1.cetak("L1");
183
lhasil.isiItem(i, itemBesar);
L2.cetak("L2");
184
lhasil.isiItem(posBesar, itemI);
Larik L3 = Larik.sambung(L1,
L2);
185
}
L3.cetak("L3");
186
}
Larik L4
= Larik.copyLarik(0,
L1.getSize(), L1);
187
return
lhasil;
L1.cetak("L1");
188
}
L4.cetak("L4");
189 }
190
Larik
L5 = utama
Larik.SelectionSort(L1,0);
Gambar 1. Potongan
program
L5.cetak("L5");
Larik L6 =Larik.SelectionSort(L1, 1);
L6.cetak("L6");
L1.cetak("L1");
int []posisi = L1.FindPosPos(10);
double hasil = Larik.LarikKaliLarik(L1, L4);
System.out.printf("HASIL KALI %.3f\n",hasil);
}
}
B. SOURCE CODE
1
Larik.java(nomor 1)
public class Larik{
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
40
41
42
43
44
45
46
47
48
49
50
51
52
akhir){
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
91
92
93
94
95
96
97
98
99
10
0
10
1
10
2
10
3
10
4
10
5
10
6
10
7
10
8
10
9
11
0
11
1
11
2
11
3
11
4
11
5
11
6
11
7
11
8
11
9
12
0
12
1
12
2
12
3
12
4
12
for(a=x2+1;a<x1;a++){
b=itemDt[a];
if(b%2==0)break;}}
else{
for(a=x1+1;a<x2;a++){
b=itemDt[a];
if(b%2==0)break;}
}return a;}
public Larik BubbleSort( int pilihan )
{
Larik BSort= copyLarik(0,size);
int j;
boolean flag = true;
int temp;
while ( flag )
{
flag= false;
if(pilihan==1){
for( j=0; j < size-1; j++ )
{
if ( BSort.itemDt[j] <BSort.itemDt[j+1] )
{ temp = BSort.itemDt[ j ];
BSort.itemDt[ j ] =
BSort.itemDt[ j+1 ];
BSort.itemDt[ j+1 ] = temp;
flag = true; } } }
else{
for( j=0; j < size-1; j++ ){
if ( BSort.itemDt[j] >BSort.itemDt[j+1] ){
temp = BSort.itemDt[ j ];
BSort.itemDt[ j ] =
BSort.itemDt[ j+1 ];
BSort.itemDt[ j+1 ] = temp;
flag = true;
} }}
}return BSort; }
public static void mergeSort(int[] inputArray) {
int size = inputArray.length;
if (size < 2)
return;
int mid = size / 2;
int leftSize = mid;
int rightSize = size - mid;
int[] left = new int[leftSize];
int[] right = new int[rightSize];
for (int i = 0; i < mid; i++) {
left[i] = inputArray[i];}
for (int i = mid; i < size; i++) {
right[i - mid] = inputArray[i];}
mergeSort(left);
mergeSort(right);
merge(left, right, inputArray);}
public static void merge(int[] left, int[] right, int[]
arr) {
int leftSize = left.length;
5
12
6
12
7
12
8
12
9
13
0
13
1
13
2
13
3
13
4
13
5
13
6
13
7
13
8
13
9
14
0
14
1
14
2
14
3
14
4
14
5
14
6
14
7
14
8
14
9
15
0
15
1
15
2
15
3
15
4
15
5
15
6
15
7
15
8
15
9
16
0
16
1
16
2
16
3
16
4
16
5
16
6
16
7
1
2
3
4
5
6
7
8
9
10
11
12
Larik.java
public class Larik{
private int size;
private double []itemDt;
public Larik(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];}
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
else if(komentar.equalsIgnoreCase("L4"))
System.out.println("L4 Copy dari L1");
else if(komentar.equalsIgnoreCase("L5"))
System.out.println("L5 Hasil pengurutan dari L1
kecil -> besar");
else if(komentar.equalsIgnoreCase("L6"))
System.out.println("L6 Hasil pengurutan dari L1
besar -> kecil");
System.out.println("Isi Larik "+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 Larik copyLarik(int k, int n, Larik l){
Larik a= null;
a=new Larik(l.itemDt);
while(k<=n-1){
a.isiItem(k, l.itemDt[k]);k++;}
return a;}
public int getPosBesar(int awal, int akhir){
int posBesar = -1;
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
91
92
93
94
95
96
97
98
99
10
0
10
1
10
2
10
3
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 posKecil = -5;
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 Larik SelectionSort(Larik lAsal, int
status){
int n = lAsal.getSize();
Larik lhasil = Larik.copyLarik(0, n, lAsal);
if (status == 0){
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 {
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 static double LarikKaliLarik(Larik l1,Larik l2){
double a,b,c,total=0;
for(int d=0;d<l1.getSize();d++){
a=l1.itemDt[d];
b=l2.itemDt[d];
c=a*b;
10
4
10
5
10
6
10
7
10
8
10
9
11
0
11
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
total+=c;
}return total; }}
AppPr1.java
public class AppPr1 {
public static void main(String[] args) {
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");
Larik L6 =Larik.SelectionSort(L1, 1);
L6.cetak("L6");
L1.cetak("L1");
double hasil = Larik.LarikKaliLarik(L1, L4);
System.out.printf("HASIL KALI Larik L1*L4 =
%.3f\n",hasil);}}
C. PEMBAHASAN
1
AppPr1.java
Deklarasi kelas dengan nama AppPr1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
larik.java(nomor 1)
Deklarasi kelas larik
Deklarasi variable integer size
Deklarasi variable array integer itemDt
Deklarasi method void dengan nama buatLarik dengan parameter integer n
Memberikan nilai size dengan n
Memberikan panjang array pada itemDt dengan size
Deklarasi constructor dengan parameter integer n, kemudian menjalankan method
buatLarik dengan parameter n
Deklarasi method integer dengan nama getSize, kemudian mengembalikan nilai
size
Deklarasi method yang akan mengembalikan object larik dengan parameter array
integer dt
Menjalankan method buatLarik dengan argumen dt.length
Melakukan perulangan for i=0 i<dt.length;i++
Deklarasi method void isiItem dengan parameter int id, dan dt
Memberikan nilai pada itemDt[id] dengan dt
Deklarasi method void cetak dengan parameter string komentar
Mencetak komentar
Perulangan for dengan int i=0;i<size
17
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
Mencetak itemDt[i]
Melakukan ganti baris
deklarasi method findBesar
deklarasi dan insialisai
deklarasi method variable besar dengan dt cari
kondisi besar<itemDt[i]
besar=itemDt[i]
mengembalikan variable besar
deklarasi getposisi dengan parameter dtCari
deklarasi variable pos =-99
deklarasi variable booolean ketemu=false
deklarasi variable int i=0
perulangan while dengan kondisi ketemu=false dan i lebih kecil dari size
kondisi dtCari= itemDt[i]
mengubah ketemu menjadi true
mengubah pos menjadi i
i diincrementkan
mengembalikan nilai pos
deklarasi method getPosMax dengan parameter int id
deklarasi max = itemDt[id]
deklarasi int posMax=id
looping for i=id+1;i<size;i diincrementkan
kondisi max<=itemDt[i]
max=itemDt[i]
posmax =i
mengembalikan nilai posMax
deklarasi method getPosMin dengan parameter int id
deklarasi min = itemDt[id]
deklarasi int posMin=id
looping for i=id+1;i<size;i diincrementkan
kondisi max>=itemDt[i]
min=itemDt[i]
posMin =i
mengembalikan nilai posMin
deklarasi method integer dengan nama PencarianBiner dengan parameter integer
dtCari,awal,akhir
deklarasi int pos =-99
deklarasi int tengah = (awal+akhir)/2
kondisi dtCari<itemDt[tengah]
mengembalikan dengan rekursif dengan argumen dtCari,awal,akhir
kondisi dtCari>itemDt[tengah]
mengembalikan dengan rekursif dengan argumen dtCari, tengah+1,akhir
kondisi dtCari=itemDt[tengah], mengembalikan tengah
mengembalikan pos
Deklarasi method larik copyLarik dengan parameter int k,n
Deklarasi larik lHasil=null
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
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
142
143
144
145
146
147
148
149
150
151
157
158
159
150
161
162
163
164
165
166
167
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
larik.java
Deklarasi kelas larik
Deklarasi variable integer size
Deklarasi variable array double itemDt
Deklarasi constructor dengan parameter double [] A
Mengubah size menjadi a.length
Mengubah itemDt menjadi panjang[size]
Looping for int i=0;i<size;i diincrementkan
Mengubah itemDt[i] menjadi A[i]
Deklarasi method int getSize
Mengembalikan nilai size
Deklarasi method getItem dengan parameter int i
Mengembalikan nilai itemDt[i]
Deklarasi method Larik sambung dengan parameter Larik l1,l2
Deklarasi double a[] dengan panjang l1.size+l2.size
Deklarasi int d=0
Looping for int b=0;b<l1.size;b++
Mengubah a[d]=l1.itemDt[b], d diincrementkan
Looping for int c=0;c<l2.size;c++
Mengubah a[d]=l2.itemDt[c], c diincrementkan
Instansiasi Larik z dengan parameter a
Mengembalikan nilai z
Deklarasi method isiItem dengan parameter int id, double dt
Mengubah itemDt[id] menjadi dt
Deklarasi method cetak dengan parmeter String komentqar
Kondisi komentar sama dengan L3
Mencetak "L3 = gabungan dari l1 dan l2")
Kondisi komentar sama dengan ("L4")
Mencetak "L4 Copy dari L1"
Kondisi komentar sama dengan "L5"
Menetak "L5 Hasil pengurutan dari L1 kecil -> besar"
Kondisi komentar sama dengan "L6"
Mencetak "L6 Hasil pengurutan dari L1 besar -> kecil"
Mencetak Isi Larik "+komentar
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
104
105
106
107
108
109
110
111
D. SCREENSHOT PROGRAM
1.
2.
E. KESIMPULAN