ARRAY
7
thweek
Aplikasi
2x
Java
Piramida Bilangan
Piramida bilangan adalah deretan bilangan yang tersusun
sedemikian rupa, sehingga membentuk suatu piramida bilangan.
Puncak piramida ditempati oleh bilangan l, baris kedua oleh
bilangan 2,1,2, baris ketiga oleh 3,
2,1,2,3, dan seterusnya. Angka 1 akan menjadi cermin yang
simetris bagi deret, baik di sebelah kanan, maupun di sebelah
kiri.
Latihan 36
PiramidaBilangan :
/**
* Title : Program Membuat Piramida Bilangan
* Deskripsi : Membuat struktur tampilan piramida
bilangan.
*/
public class PiramidaBilangan
{
/** main method */
public static void main(String[] args)
{
int jumBaris;
System.out.println ( " \nPROGRAM MENCETAK
PIRAMIDA BILANGAN" );
System.out.println ("---\n");
// Menginstruksikan user untuk memasukkan jumlah
baris
System.out.print("Masukkan jumlah baris : ");
jumBaris = InputConsole.readInt ();
for (int baris = 1; baris < (jumBaris + 1); baris++)
{
tengah
// Untuk mamanipulasi tampilan
// Mencetak spasi di urutan depan hingga posisi
// Mencetak bilangan di urutan depan hingga posisi
tengah
for (int bilangan = baris; bilangan >= 1; bilangan--)
System.out.print ( bilangan) ;
// Mencetak bilangan di urutan dari posisi tengah
hingga belakang
for (int bilangan = 2; bilangan <= baris; bilangan++
)
System.out.print (bilangan) ;
// Memulai baris baru
System.out.println () ;
} } }
Latihan 37
Bilangan Prima :
Bilangan Prima adalah bilangan yang lebih besar
dari 1 dan habis dibagi oleh bilangan itu sendiri
dan bilangan 1 terdiri dari: 2, 3, 5, 7, dan
seterusnya.
/**
* Title : program Bilangan prima
* Deskripsi : Mengaplikasikan beberapa elemen kendali
* (while, for, if) untuk mencari bilangan Prima
*/
public class Bilanganprima {
/**Main method*/
public static void main(String[] args)
{
int jumBilPrima;
int counter = 1; // Counter penghitung jumlah bilangan
prima
int bilangan = 2; // Bilangan yang diperiksa atau bukan
// Variabel ini diinisialisasi dengan 2
// karena merupakan bilangan prima pertama
// Selanjutnya bilangan ini akan diupdate
// dangan bilangan berikutnya (3,4,5,..)
boolean testPrima = true; // Kondisi yang akan menyatakan
// suatu bilangan sebagai prima
// atau bukan.
System.out.println ("\n PROGRAM MENCARI N BILANGAN
PRIMA " + " PERTAMA");
System.out.println (" PROGRAM MENCARI N BILANGAN
PRIMA " + "---\n");
// Meninstruksikan user untuk memasukkan N
// (jumlah bilangan prima) yang akan dicari.
System.out.println (" Masukkan jumlah Bilangan PRIMA :");
jumBilPrima = InputConsole.readInt();
System.out.println("\n Mencari " + jumBilPrima
// Blok yang mengulang pemeriksaan bila bilangan
// yang baru adaLah bilangan prima
while (counter <= jumBilPrima)
{
// mengasumsikan suatu bilangan merupakan bilangan Prima
testPrima = true;
// Mengeset testPrima menjadi false, jika bilangan
// tersebut ternyata bukan bilangan prima
for (int pembagi = 2; pembagi <= bilangan/2; pembagi++)
{
if (bilangan % pembagi== 0) // Jika bernilai true, maka
// biLangan bukan Prima
{
testPrima = false;
break; // Ke1uar dari blok perulangan for
} }
// Mencetak bilangan Prima dan menambahl<an counter
if (testPrima)
{
if (counter%10 == 0)
{
// Mencetak bilangan Prima
System.out.println (bilangan) ;
}
else
System.out.print(bilangan + " " );
counter++; // menambah satu ke counter
ARRAY ATAU LARIK
8
thweek
Definisi Larik
Larik atau array dapat didefinisikan sebagai tabel yang terstruktur.
Semua array terdiri dari tabel
2
yang dapat diisi dengan variabel
2
bertipe sama.
Array bertipe integer hanya dapat menampung integer.
Array bertipe char hanya dapat menampung karakter.
Tiap tabel memiliki indeks (nomor tabel), pada java indeks dimulai
dari 0 (nol).
Definisi Larik
Array adalah:
Suatu entitas (kesatuan) yang beranggotakan
elemen-elemen/ variabel bertipe data sama dan dapat
diakses dengan memanggil nama array beserta
indeks elemennya
Definisi Larik
Variabel array dapat dideklarasikan dengan dua
cara:
1. tipedata [ ] namaArray;
atau
Array 1 tingkat
Array 1 tingkat hanya terdiri atas satu jenis
indeks.
Saat
mendeklarasikan
array
kita
harus
menentukan banyaknya indeks dan tipe data
untuk variabel
Array 1 tingkat
Array 1 tingkat
Array 2 tingkat
Pada dasarnya konsep array 2 tingkat sama seperti
array 1 tingkat, hanya saja pada deklarasinya array 2
tingkat ada dua macam indeks yang harus kita
tentukan.
Salah satu penggunaan array 2 tingkat adalah pada
operasi matriks, dimana saat mendeklarasikan array
kita harus menentukan jumlah kolom dan jumlah
indeks baris.
Array 2 tingkat
Array 2 tingkat
Contoh
Contoh pertama akan membentuk variabel array
deretBilangan dengan tipe integer sebanyak 10
elemen.
Pada contoh kedua akan terbentuk varibel array
namaHari dengan tipe String sebanyak 7 elemen.
Perhatikan ilustrasi berikut.
Ilustrasi array
Menginisialisasi Array
Pada saat array terbentuk pertama kali, elemen-elemennya akan
memiliki nilai default 0 untuk tipe numerik, blank (kosong) untuk char,
dan salah (false) untuk boolean. Gunakan bentuk berikut untuk
mengakses suatu elemen dari array.
Indeks adalah bilangan integer yang merrunjukkan letak urutan elemen
dalam array. Indeks dari array berukuran N dimulai dari 0 hingga N-1.
Gunakan method
length ( )
untuk mengetahui berapa panjang/jumlah
Menginisialisasi Array
Anda harus menunjuk elemen tersebut dan kemudian mengisinya nilai yang
dikehendaki untuk menginisialisasi suatu elemen.
Bila ingin menginisialisasi seluruh elemen dari array, bisa digunakan
statement perulangan.
Sebagai ilustrasi, kita ingin rnembuat array deretBilangan yang
elernen-elemennya adalah { 10, 20, 30,..,100).
Proses inisialisasi elemennya bisa dilakukan dalam tiga cara, yaitu: pertama
bersamaan dengan deklarasi variabel, kedua dengan mengakses dan memberi
nilai elemen satu persatu, atau ketiga dengan bentuk perulangan (biasanya
for) agar lebih praktis.
Menginisialisasi Array
1.
int il deretBilangan = (10, 20, 30,40, 50, 60, 70, 80,
90, 100 );
2.
Inisialisasi elemen satu per satu sebagai berikut:
deretBilangan [0] = 1g0;
deretBilangan [l] = 20;
deretBilangan [9] = 100;
3.
Inisialisasi dengan for sebagai berikut:
for (i = 0, i < 10, i++) {
deretBilangan [i] = 10 + l0*i;
}
Melewatkan Array ke Method
Java menggunakan dua jenis nrekanisme untuk tnelervatkan argumen ke suatu method:
1.
Untuk variabel bertipe data primitif, yang akan dilewatkan ke method adalah nilai
aktualnya. Perubahan nilai variabel pada saat nrengoperasikannya di dalam method
tidak akan mengubah nilai variabel tersebut. Mekanisme ini dinamakan Pass by
Value.
2.
Pada variabel array, nilai yang dilewatkan pada hakikatnya adalah alamat referensi
rnemory yang menunjuk array tersebut, bukan nilai aktual masing-masing elemennya.
Bila alar,rat referensi ini berubah pada saat mengoperasikannya di dalam method,
maka akan mengubah nilai variabel array asalnya. Mekanisme ini disebut Pass by
Reference.
Melewatkan Array ke Method
Namun, bila kita mengambil nilai suatu elemen dari
array, dan kemudian melewatkannya ke method,
maka elemen itu akan diperlakukan seperti pada
tipe data primitif.
Menyalin (meng-copy) Array
Ada tiga cara menyalin array, Yaitu:
1. Menggunakan perulangan untuk meng-copy masing-masing elemen
Contoh berikut akan meng-copy array deretBilangan menjadi array baru sepuluhBilangan: for (int i = 0; i < deretBilangan.length; i++)
sepuluhBilangan [i] = deretBilangan [i];
2. Mcmakai method static arraycopy () dari kelas java.lang.System
Bentuk:
arrycopy (arrayAsal, posisiArmyAsal, arrayBaru, posisiArrayAsal panjang);
posisiArrayAsal dan posisiArrayBaru menunjukkan posisi elemen yang akan di-copy pada array asal dan array baru. Banyaknya elemen yang akan di-copy ditunjukkan oleh panjang.
int[] arrayAsal = (10,20, 30,40,50,60,70,80,90, 100); int[] arrayBaru = new int[arrayAsal.length];
System.an:rycopy (zrmyAsr I, 0, armyBzru, Q a rray Asa l - I e n gth ) ;
3. Menggunakan method clone
Array Multidimensi
Selain berupa deretan variabel satu dimensi, kita dapat pula membuat
arrayyang berukuran lebih dari satu dimensi atau disebut juga array
multidimensi.
Pada bagian ini kita akan membahas mengenai array dua dimensi atau
yang lebih dikenal sebagai matrix dua dimensi berukuran m x n.
Keterangan:
exy = Elemen pada baris ke-x dan kolom ke-y.
Gunakanlah bentuk deklarasi berikut untuk membuat matriks dua
dimensi.
Susunan elemen
array multidimensi
Contoh:
int [] [] = new int [3][2]; //Membuat matriks berukuran 3x2
int [] U = new int [4][4]; //Membuat matriks 4x4
Selain bentuk di atas deklarasi matriks dapat dilakukan seperti di
bawah ini:
int [] [] matriks =
{
{2,3,6,7},
(10,4, l, 0},
(9,2,0,0},
{3,0. l, 1)
};
Operasi Matriks
Matriks memiliki operasi penjumlahan, pengurangan, perkalian, dan
pembagian. Pada bagian ini kita akan rnembahas penjumlahan dan
perkalian matriks.
Penjumlahan
Perkalian Matriks
Estu Sinduningrum, ST, MT
Syarat Penjumlah Matriks:
Dua matriks A dan B dapat dijumlahkan bila kedua matriks
tersebut berdimensi sama.
Syarat Perkalian matriks :
Matriks A (mxn) dapat dikalikan dengan B (pxq) bila
Latihan 38 :
Operasi Matriks
C
ij
= aij x b1j + ai2 x b2j +
Estu Sinduningrum, ST, MT
/**
•Title
* Deskripsi: Matriks
* dua matriks dalam satu file java. * Sebelum mengkompile file ini kompilelah file
* InputConsole.java terlebih dahulu. */
public class Matriks {
/** Main method */
public static void main (String [] args) {
System.out.println("\n PROGRAM PENJUMLAHAN Dan PERKALIAN MATRIKS");
// Membuat dua matriks berdimensi dua (mxn) di mana m = n = 3 System.out.print("Masukkan orde matriks :");
int ordeMatriks = InputConsole.readInt(); System.out.println();
int[][]matriks1= new int[ordeMatriks][ordeMatriks]; int[][]matriks2= new int[ordeMatriks][ordeMatriks];
// Menginstruksikan user untuk menginputkan tiap-tiap elemen // Memasukkan entry matriks 1
for (int i=0; i<matriks1.length; i++) for (int j=0; j<matriks1[i].length; j++)
{
int indeksBaris = i+1; int indeksKolom = j+1;
System.out.print("Masukkan elemen Matriks A pada baris ke "+ indeksBaris +" kolom ke " + indeksKolom +" : ");
matriks1 [i][j] = InputConsole.readInt(); }
System.out.println("---"); // Memasukkan entry matriks 2
for (int i=0; i< matriks1.length; i++) for (int j=0; j< matriks1[i].length; j++)
{
int indeksBaris = i+1; int indeksKolom = j+1;
System.out.print("Masukkan elemen Matriks B pada baris ke "+ indeksBaris + " kolom ke " + indeksKolom + " :");
matriks2 [i][j] = InputConsole.readInt();
}
// Menambahkan dua matriks dan mencetak hasilnya di monitor
int[][] matriksHasil = jumlahMatriks(matriks1,matriks2) ;
System.out.println("\n Penjumlahan Matriks"); cetakHasil (matriks1, matriks2, matriksHasil,'+'); // Mengalikan dua matriks dan mencetak hasilnya di monitor
matriksHasil = kaliMatriks(matriks1, matriks2);
System.out.println("\nPerkalian matriks" ) ; cetakHasil(matriks1, matriks2, matriksHasil,'x' ) ;
}
/** Method penjumlahan dua matriks */
public static int[][] jumlahMatriks(int[][] matriks1, int [][] matriks2) {
int[][]hasil = new
int[matriks1.length][matriks1[0].length]; for (int i = 0; i<hasil.length; i++) for (int j = 0; j<hasil[0].length; j++) hasil [i][j] = matriks1[i][j] + matriks2[i][j];
return hasil; }
/** Method perkalian dua matriks */
public static int[][] kaliMatriks(int[][] matriks1, int[][] matriks2) {
int[][]hasil=new
int[matriks1.length][matriks2[0].length]; for (int i =0; i<hasil.length; i++)
for (int j=0; j<hasil.length; j++) for (int k =0; k<matriks1[0].length; k++) hasil [i][j] += matriks1[i][k]*matriks2[k][j];
return hasil; }
/** Method untuk mencetak hasil di monitor */ public static void cetakHasil (
int[][] matriks1, int[][] matriks2, int[][] matriks3, char op) {
for (int i = 0; i<matriks1.length; i++) {
for (int j= 0; j<matriks1.length; j++)
System.out.print("" + matriks1[i][j]);
if (i== matriks1.length/2)
System.out.print(" " + op + " " ); else
System.out.print(" ");
for (int j= 0; j<matriks2[0].length; j++) System.out.print("" + matriks2[i][j]);
if (i== matriks1.length/2)
System.out.print(" " + op + " " ); Else
Mengurutkan Elemen Array
(
Sorting
)
Misalkan ada array: (2, l, 17,89, 4, 5), dan Anda diminta untuk
mengurutkan data mulai dari yang terkecil sampai terbesar sehingga
menjadi (1,2,4,5,17,89).
Mengurutkan Elemen Array
(
Sorting
)
Algoritma Sorting (pengurutan) suatu deretan elemen adalah sebagai berikut:
1.
Cari bilangan yang terbesar dan merneriksa posisi bilangan tersebut (apakah
sudah terletak di paling kanan?).
2.
Bila belum, letakkan bilangan tcrbesar tersebut pada posisi paling kanan. Proses
ini sekaligus berarti saling bertukar posisi antara bilangan yang semula
menempati posisi paling kanan dengan posisi bilangan terbesar tersebut.
3.
Selanjutnya, mencari lagi bilangan terbesar dari deretan sisa dan letakkan
bilangan tersebut di belakang bilangan terbesar hasil proses pertama.
Dari deretan {2, l, 17, 89, 4, 5}, maka proses sorting secara manual
menjadi:
Tahap 1 :2,1,17,89,4,5 // Mencari terbesar pertama
Tahap 2 : 7, I, 17, 5, 4,89 // Menukarkan posisi (swap)
Tahap 3 :2,1,17,5,4,89 l //Mencari terbesar kedua
Tahap 4 :2, 1,4,5, 17,89 // Menukarkan posisi (swap)
Tahap 5 :2,1,4,5,17,89 // Posisi bilangan 5 dan 4 telah sesuai – lewati
Tahap 6 :2,1,4,5, 17,89 // Cari terbesar sisa
Tahap 7 :1,2,4,5,17,89 // Tukarkan posisi ...selesai.
Mengurutkan Elemen Array
(
Sorting
)
Estu Sinduningrum, ST, MT
/**
* Title : Mengurutkan Array
* Description : Mengurutkan Array secara naik * (terkecil sampai terbesar)
*/
public class SortingArray2 {
/** Main method */
public static void main (String [] args) {
int [] deretanBilangan = new int[10];
System.out.println("\nPROGRAM MENGURUTKAN ELEMEN ARRAY");
System.out.println("---\n");
// Membuat deretan bilangan random
System.out.print("Deretan bilangan random sebelum diurutkan :");
for (int i = 0; i< deretanBilangan.length; i++) { deretanBilangan [i] = (int)(Math.random()*100);
System.out.print(deretanBilangan [i]+" "); }
System.out.println();
// Mengurutkan elemen array sorting(deretanBilangan);
// Mengurutkan hasil pengurutan System.out.println();
System.out.print("Deretan bilangan setelah diurutkan :"); cetakDeretan(deretanBilangan);
}
/** Method mencetak bilangan ke monitor console */ static void cetakDeretan(int[] deretan)
{
for (int i = 0; i < deretan.length; i++) System.out.print(deretan[i] + " ");
System.out.println();
}
/** Method untuk mengurutkan array */ static void sorting(int[] deretan)
{
int nilaiMax; int indeksNilaiMax;
for (int i = deretan.length-1; i >= 1; i --) {
// Mencari nilai maksimum dalam deretan [0..i] nilaiMax = deretan[i];
indeksNilaiMax = i;
for (int j= i-1; j >= 0; j --) { if (nilaiMax < deretan[j]) { nilaiMax = deretan[j]; indeksNilaiMax = j; } }
/** Menukar posisi elemen deretan[i] dengan elemen deretan[indeksNilaiMax] jika diperlukan*/
if (indeksNilaiMax !=i) {
deretan[indeksNilaiMax] = deretan[i]; deretan[i] = nilaiMax;
Mencari Elemen Array
(Searching)
Ada dua algoritma untuk mencari elemen array, yaitu:
1.
Pencarian Linier (Linear Search)
Algoritma ini akan mencari elemen berdasarkan suatu kunci
(key), yang berupa bilangan atau karakter yang diinginkan
dosesnya berlangsung dengan mencocokkan tiap-tiap elemen
dengan kunci tersebut.
Bila ditemukan. maka method akan mengembalikan indeks dari
elemen itu, sedangkan bila tidak ada, maka method akan
Mencari Elemen Array
(Searching)
/**
* Title : Mengurutkan Array
* Description : Mengurutkan Array secara naik * (terkecil sampai terbesar)
*/
public class PencarianLinier {
/** Main Method */
public static void main(String[] args) {
int[] deretan = new int[10];
System.out.println("\n PROGRAM PENCARIAN LINIER"); System.out.println("---\n");
// Membuat deretan bilangan random System.out.print("Deretan Bilangan"); for (int i = 0; i < deretan.length; i++) {
deretan[i] = (int) (Math.random()*100);
// Menginstruksikan user untuk memasukkan kunci System.out.print("\n Masukkan kunci ");
int kunci = InputConsole.readInt(); int indeks = cariKunci (kunci, deretan); if (indeks != -1)
System.out.println("\nKunci tidak ditemukan pada"+"deretan bilangan");
}
/** Method mencari kunci pada deretan bilangan */ public static int cariKunci (int kunci, int[] deretan) {
for (int i = 0; i < deretan.length; i ++) if (kunci == deretan[i])
return i; return -1; }
Mencari Elemen Array
(Searching)
2.
Pencarian Biner (Binary Search)
Algoritma pencarian biner merupakan perbaikan dari konsep
sebelumnya (pencarian linier) karena lebih efisien.
Dengan algoritma ini,kita tidak perlu merneriksa semua elemen
sehingga menghemat waktu pencarian.
Algoritma ini dibangun berdasarkan ide sebagai berikut:
a.
Urutkan terlebih dahulu elemen-elemen alray berdasarkan nilainya.
Urutan boleh naik (bilangan terkecil dahulu, kemudian terakhiri
bilangan terbesar) atau turun.
Pencarian Biner (Binary Search)
b.
Selanjutnya, ambillah nilai elemen yang terletak
pada posisi tengah urutan array tersebul Kita
sebut nilai elemen ini sebagai nilai tengah. Nilai
tengah ini membagi array menjadi dua segmen;
segmen pertama berisi elemen terkecil sampai
nilai tengah, sedangkan segmen kedua berisi
elemen nilai tengah sampai nilai terbesar.
Pencarian Biner (Binary Search)
Bandingkanlah nilai elcmen yang dicari (kunci) dengan nilai
tengah ini. Proses pembandingan ini nremilikitiga kemungkinan:
a.
Bila nilai kunci sama dengan nilai tengah, maka pencarian selesai.
b.
Bila nilai kunci lebih kecil dari nilai tengah, maka algoritma akan
mengabaikan setengah bagian dari array (mulai dari nilai tengah
sampai nilai elemen terbesar). Selanjutnya. proses pencarian
difokuskan untuk segmen yang lain, yaitu elemen terkecil sampai
kepada nilai tengah. Kemudian, algoritma akan membagi lagi
Segmen tersebut menjadi dua, dilanjutkan proses pembandingan dan
seterusnya.
Pencarian Biner (Binary Search)
Bila nilai kunci lebih besar dari nilai tengah, maka
algoritma akan mengabaikan segmen yang berisi nilai
terkecil sampai nilai tengah. Selanjutnya kaidah
pencarian mengikuti pola pembagian segmen menjadi
dua dan membandingkannya dengan nilai tengah,
sama seperti butir sebelumnya. Demikian seterusnya
sampai elemen yang dicari ditemukan atau elemen
array sudah selesai diperiksa.
Ilustrasi Pencarian Biner
Ambil data array pada contoh sebelumnya {2, l, l7, 89, 4, 5l }
Anda akan mencari elemen (kunci) dengan nilai = 2.
Tahap l:
Proses mengurutkan elemen array: (1, 2,4,5,17,89).
Tahap 2:
Algoritma akan mencari nilai tengah.
Penentuan nilai tengah dengan memperhitungkan indeks elenren, (indeks elemen pertama
+ indeks elemen tetakhir) /2.
Bila jumlah elemen gasal, tidak masalah. Bila genap, ambil pembulatan.
Dari contoh di atas, nilai tengahnya adalah 4.
Nilai tengah ini membagi array menjadi dua segmen:
Segmen pertama : 1,2, 4
Segmen kedua : 4. 5, 17,89
Ilustrasi Pencarian Biner
Tahap 3: Proses Pembandingan; nilai kunci < nilai
tengah. berarti proses pencarian selanjutnya adalah
pada segmen pertama dengan elemen-elemen 1,2,4.
Tahap 4: Dari segmen pertama tersebut dicari lagi
nilai tengahnya, diperoleh 2.
Tahap 5: Proses Pembandingan: nilai kunci = nilai
tengah, pencarian selesai.
PencarianBiner.java
/**
* Title : Pencarian Biner
* Description : Mendemonstrasikan Pencarian Elemen Array * dengan konsep Biner
*/
public class PencarianBiner {
/** Main Method */
public static void main(String[] args) {
int[] deretanTerurut = new int[10]; System.out.println("\n PROGRAM PENCARIAN BINER");
System.out.println("---\n");
// Membuat list yang terurut dan menampilkannya ke console/
System.out.print("Deretan bilangan terurut"); for (int i = 0; i< deretanTerurut.length; i++ ) {
deretanTerurut[i] = 2*i + 1; System.out.print(deretanTerurut[i] +" ");
}
System.out.println();
// Menginstruksikan user untuk memasukkan kunci.
System.out.println("\n Kunci ditemukan pada indeks ke "+ indeksElemen);
else
System.out.println("\n Kunci tidak ditemukan pada " + "deretan ini"); }
/** Method mencari kunci dari deretan terurut */
public static int cariKunci(int kunci, int[] deretanTerurut) {
int indeksTerkecil = 0; // Nilai awal indeks elemen array // selalu dimulai 0
int indeksTerbesar = deretanTerurut.length -1; return cariKunci (kunci, deretanTerurut, indeksTerkecil, indeksTerbesar);
}
/* Proses pencarian */
public static int cariKunci (int kunci, int[] deretanTerurut, int indeksTerkecil, int indeksTerbesar)
{
//Keluar dari proses pencarian karena tidak ditemukan kunci
int indeksTengah = (indeksTerkecil + indeksTerbesar)/2; if (kunci < deretanTerurut [indeksTengah])
return cariKunci (kunci, deretanTerurut, indeksTerkecil, indeksTengah-1);
else if (kunci == deretanTerurut [indeksTengah]) return indeksTengah;