Pengulangan
Selanjutnya adalah pengulangan, pengulangan atau panggilan akrabnya
looping merupakan salah satu cara untuk mengulangi beberapa bentuk nilai yang di
ulang berkali-kali sesuai dengan batas yang kita tentukan. Pengulan dapat
memudahkan kita dalam pemrograman juga mempersingkat pengodean, adanya
pengulan, kita tidak perlu memasukan nilai satu persatu. Pengulan ini memiliki
beberapa jenis mulai dari for, while, juga do while.
For untuk mengulangi proses yang sudah di ketahui jumlahnya. While untuk
mengulangi proses yang belum di ketahui jumlahnya, pengecakan kondisi di awalkan
jika bernilai true maka akan di kerjakan jika false maka akan di hentikan. Do While
untuk mengulangi proses yang belum di ketahui jumlahnya, bedanya dengan while,
do while akan mengerjakan terlebih dahulu lalu mengcek kondisi.
import java.util.Scanner;
public class IfElse {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
System.out.println("Nilai Mu\n=========\nInput Nama\t:");
String nama=in.nextLine();
System.out.println("Input Nilai\t:");
int nilai=in.nextInt();
if(nilai>=60){
System.out.println("Nama\t: "+nama);
System.out.print("Keterangan\t: Anda dinyatakan Lulus");
}
else{
System.out.println("Nama\t: "+nama);
System.out.print("Keterangan\t: Maaf Anda Belum Lulus");
}
}
}
• Deklarasi
K : integer {pencacah pengulangan}
Deskripsi
K ← 1 {inisialisasi}
While k ≤ 10 do
Write (‘HALO’)
K ←K+1
Endwhile
{kondisi berhenti : k > 10}.
import java.util.Scanner;
public class While{
public static void main (String [] args){
Scanner in = new Scanner (System.in);
int K;
K=1;
while(K<=10){
System.out.println("HALO");
K+=1;
}
}
}
import java.util.Scanner;
public class Modulus {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
System.out.println("Modulus");
System.out.println("Input Bilangan\t: ");
int n=in.nextInt();
if(n%2==1){
System.out.println(n+"%2 Merupakan bilangan Ganjil");
}
else{
System.out.println(n+"%2 Merupakan bilangan Genap");
}
}
}
import java.util.Scanner;
public class PerhitunganDuaBilangan {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
System.out.println("Modulus");
System.out.println("Input x\t: ");
int x=in.nextInt();
System.out.println("Input y\t: ");
int y=in.nextInt();
int P=x+y;
if(P>=0){
int q=x*y;
System.out.println("Karena P>=0, maka hasil dari "+x+" * "+y+" adalah : "+q); }
else{
int q=x/y;
System.out.println("Karena P<=0, maka hasil dari "+x+" / "+y+" adalah : "+q);
}}
PRAKTIKUM 2
RECORD
Recor adalah suatu struktur data yang terdiri dari kumpulan elemen-elemen dat
yang di gabungkan menjadi suatu kesatuan, masing-masing elemen data tersebut
disebut dengan field. Setiap field boleh berbeda type datanya. Tetapi record ini
hanya ada di bahasa pemrograman Pascal. Kalau dalam bahasa java iktilap (berbeda
pendapat), ada yang menyebut kan di java juga terdapat record, dan ada juga yang
menyebutkan bahwa di java tidak ada record.
Ini merupakan contoh Recor dalam Java :
class Tanggal { int hari,bulan,tahun; }
class record{ public static void main(String[]args){
/*sesuaikan dengan nama class-nya, termasuk besar kecilnya huruf*/
Tanggal t1 = new Tanggal();
t1.hari = 2;
t1.bulan = 10;
t1.tahun = 2013; /*data yang lain*/
Tanggal t2 = new Tanggal();
t2.hari = 7;
t2.bulan = 5;
t2.tahun = 2016;
System.out.println("waktu sebelumnya : "+t1.hari+"-"+t1.bulan+"-"+t1.tahun);
System.out.println("sekarang : "+t2.hari+"-"+t2.bulan+"-"+t2.tahun); }
}
Buatlah Program Java untuk menentukan suatu tahun kabisat atau bukan?
Input: Tahun
Ouput: Tahun Kabisat/ Bukan Tahun Kabisat
Buatlah Program Java untuk untuk menghitung akar-akar persamaan kuadrat
dengan rumus:
D=B*B-4*A*C
Jika D < 0 maka didapat akar imajiner
Jika D = 0 maka X1 = X2 yang didapat dari D = -B / (2 * A)
Jika D > 0 maka ada dua akar X 1 B D / 2 * A dan X 2 B D / 2 * A
Buat Program Java untuk memasukan suhu dalam celcius (t) dengan ketentuan sbb:
jika dimasukan t<0 maka padat, 0<=t<=100 cair, t>100 gas.
import java.util.Scanner;
public class PraktikumDua {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
System.out.println("Menu Tugas Praktikum 2");
System.out.println("1. Tahun Kabisat\n2. Menghitung Akar Persamaan
Kuadrat\n3. Suhu Dalam Celcius");
int pil=in.nextInt();
switch(pil){
case 1:
System.out.println("\t\t\tProgram Tahun Kabisat");
System.out.print("Masukan Tahun\t: ");
int th=in.nextInt();
if(th%400==0||th%4==0){
System.out.println(th+" Merupakan Tahun Kabisat");
}
else{
System.out.println(th+" Bukanlah Tahun Kabisat");
}
break;
case 2:
System.out.print("\t\tMenghitung Akar Persamaan Kuadrat");
double a,b,c,D,x1,x2;
System.out.print("Masukan Nilai a\t: ");
a=in.nextDouble();
System.out.print("Masukan Nilai b\t: ");
b=in.nextDouble();
System.out.print("Masukan Nilai c\t: ");
c=in.nextDouble();
D =(b*b) - (4*a*c);
x1 = (-b+Math.sqrt(D))/2*a;
x2 = (-b-Math.sqrt(D))/2*a;
if(D<0){
System.out.println(D+" Merupakan Akar Imaginer");
}
else{
System.out.println("Akar Pertama\t"+x1+"\nAkar Kedua\t"+x2);
}
break;
case 3:
System.out.println("Golongan Suhu Celcius");
System.out.print("Masukan Suhu Celcius\t");
double t=in.nextDouble();
if (t<0){
System.out.print(t+" : Padat");
}
else if(t>100){
System.out.print(t+" : Gas");
}
else if(t<=100 || t>=0){
System.out.print(t+" : Cair");
}
}
}
}
PRAKTIKUM 3
CASTING & KONVERSI
Casting adalah perubahan tipe data ke tipe data lainnya dengan memperhatikan
ukuran juga kapasitas di setiap tipe data. Beberapa casting di sebut juga konversi.
Proses konversi disarankan dari tipe data kecil ke besar. Alasannya Karena jika
konversi dilakukan dari ukuran besar ke kecil ada kemungkinan akan
menghilangkan beberapa data karena kapasitas yang tidak mencukupi.
Contoh programnya :
public class BelajarCasting {
public static void main(String[] args) {
int nilai = 9; //memasukant nilai untuk tipe data integer
String duapuluh ="20"; //memasukan nilai untuk tipe data string
int ubah = Integer.parseInt(duapuluh); //merubah tipe data integer ke
string
System.out.println("Tanggal Lahir Saya = " +(nilai + ubah)); //menampilkan
hasil ke layar
}
}
class Number {
public static void main(String[] args) {
Double n1 = -1.0, n2 = 4.5, n3 = -5.3, largestNumber;
if (n1 >= n2) {
if (n1 >= n3) {
largestNumber = n1;
} else {
largestNumber = n3;
}
} else {
if (n2 >= n3) {
largestNumber = n2;
} else {
largestNumber = n3;
}
}
System.out.println("Largest number is " + largestNumber);
}
}
import java.util.Scanner;
public class Evaluasi {
public void prosesHasilUjian(){
Scanner input = new Scanner(System.in);
//Inisialisasi
int jumlahLulus = 0;
int jumlahGagal = 0;
int counterSiswa = 1;
int hasil;
//while loop
while(counterSiswa <= 8){
System.out.print("Masukkan hasil ujian (1 = lulus atau 2 = gagal): ");
hasil = input.nextInt();
//if...else yang bersarang di while loop
if(hasil == 1){
jumlahLulus = jumlahLulus + 1;
}
else {
jumlahGagal = jumlahGagal + 1;
}
counterSiswa = counterSiswa + 1;
}
System.out.printf("Lulus : %d\nGagal : %d\n", jumlahLulus, jumlahGagal);
if (jumlahLulus > 4){
System.out.print("Kursus telah berhasil!");
}
else{
System.out.print("Kursus tidak berhasil!");
}
}
}
class Overload
{
void demo (int a)
{
System.out.println ("a: " + a);
}
void demo (int a, int b)
{
System.out.println ("a and b: " + a + "," + b);
}
double demo(double a) {
System.out.println("double a: " + a);
return a*a;
}
}
class MethodOverloading
{
public static void main (String args [])
{
Overload Obj = new Overload();
double result;
Obj .demo(10);
Obj .demo(10, 20);
result = Obj .demo(5.5);
System.out.println("O/P : " + result);
}
}
class CetakDataTipe {
// membuat method dengan nama sama tapi berbeda tipe data
public void CetakData(String Cetak) {
System.out.println(Cetak);
}
public void CetakData(int Cetak) {
System.out.println(Cetak);
}
public void CetakData(double Cetak) {
System.out.println(Cetak);
}
public void CetakData(char Cetak) {
System.out.println(Cetak);
}
}
import java.util.Scanner;
public class NilaiMhs{
public static void main (String [] args){
Scanner in = new Scanner (System.in);
System.out.print("Input Nilaimu\t:");
double nAkhir=in.nextDouble();
if (nAkhir >=85 && nAkhir<=100){
System.out.print("Grade Mu Adalah\t:A");
}
else if (nAkhir >=75 && nAkhir<=84){
System.out.print("Grade Mu Adalah\t:AB");
}
else if (nAkhir >=65 && nAkhir<=74){
System.out.print("Grade Mu Adalah\t:B");
}
else if (nAkhir >=50 && nAkhir<=64){
System.out.print("Grade Mu Adalah\t:BC");
}
else if (nAkhir >=35 && nAkhir<=49){
System.out.print("Grade Mu Adalah\t:C");
}
else if (nAkhir >=20 && nAkhir<=34){
System.out.print("Grade Mu Adalah\t:D");
}
else if (nAkhir >=0 && nAkhir<=19){
System.out.print("Grade Mu Adalah\t:E");
}
}
}
PRAKTIKUM 5
REKURSIF
Rekursif adalah suatu proses atau prosedur dari fungsi yang memanggil dirinya
sendiri secara berulang-ulang. Karena proses dalam Rekursif ini terjadi secara
berulang-ulang maka harus ada kondisi yang membatasi pengulangan persebut, jika
tidak maka proses tidak akan pernah berhenti sampai memori yang digunakan
untuk menampung proses tersebut tidak dapat menampung lagi/penuh. Kelebihan
Fungsi Rekursif adalah program menjadi lebih singkat. Pada beberapa kasus, lebih
mudah menggunakan fungsi rekursif, contohnya: pangkat, factorial, dan fibonacci,
dan beberapa proses deret lainnya. Fungsi rekursif lebih efisien dan cepat
dibandingkan proses secara iteratif. Kekurangan Fungsi Rekursif adalah memakan
memori lebih besar, karena setiap bagian dari dirinya dipanggil, akan
membutuhkan sejumlah ruang memori untuk penyimpanan. Rekursif sering kali
tidak bisa berhenti sehingga memori akan terpakai habis dan program bisa hang.
Contoh penerapan Rekursif :
1. Faktorial dari bilangan bulat positif n didefinisikan sebagai berikut.
n! = n x (n-1)! Untuk n > 1
0! = 1 Untuk n = 0 atau n = 1
secara pemrograman dapat ditulis sebagai
Faktorial(0) = 1 (1)
Faktorial(N) = N*Faktorial(N-1) (2)
Persamaan (2) di atas adalah contoh hubungan rekurens (recurrence relation), yang
berarti bahwa nilai suatu fungsi dengan argumen tertentu bisa dihitung dari fungsi
yang sama dengan argumen yang lebih kecil. Persamaan (1) tidak bersifat rekursif,
disebut nilai awal atau basis. Setiap fungsi rekursif paling sedikit mempunyai satu
nilai awal, jika tidak fungsi tersebut tidak bisa dihitung secara eksplisit.
import java.util.Scanner;
public class palindrome {
static boolean kataPalindrome(String kata) {
int left = 0;
int right = kata.length()-1;
while (left < right) {
if (kata.charAt(left) != kata.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
public static void main (String args []) {
Scanner input = new Scanner(System.in);
System.out.println("PALINDROME CHECKER");
System.out.println("==================");
System.out.print("\ninput kalimat : ");
String kata2 = input.nextLine();
if (kataPalindrome(kata2))
System.out.println(kata2+" adalah Palindrome");
else
System.out.println(kata2+" Bukan Palindrome");
}
}
import java.util.Scanner;
public class Hanoi {
public static void main(String[]args) {
Scanner input = new Scanner(System.in);
System.out.println("jumlah piringan?");
int N=input.nextInt();
System.out.println();
hanoi(N, 'a', 'b', 'c');
}
static void hanoi(int n, char awal, char temp, char akhir) {
if(n==1)
System.out.println("pindahkan "+n+" dari "+awal+" ke "+akhir);
else{
hanoi(n-1, awal,akhir,temp);
System.out.println("pindahkan "+n+" dari "+awal+" ke "+akhir);
hanoi(n-1,temp,awal,akhir);
}
}
}
public class prima {
private static int ambilNilaiRekursif(int number, int index){
if (index == 1) {
return 1;
}
else if (number % index == 0) {
return 1 + ambilNilaiRekursif(number, --index);
} else {
return 0 + ambilNilaiRekursif(number, --index);
}
}
public static boolean cekBilanganPrima(int num){
if (num > 1) {
return (ambilNilaiRekursif(num, num) == 2);
PRAKTIKUM 6
TUMPUKAN ATAU STACK
Salah satu konsep yang efektif untuk menyimpan dan mengambil data adalah
“terakhir masuk sebagai pertama yang keluar” (Last In First Out/FIFO). Dengan
konsep ini, pengambilan data akan berkebalikan urutannya dengan penyimpanan
data. Stack(tumpukan) adalah sebuah kumpulan data dimana data yang diletakkan di
atas data yang lain. Dengan demikian stack adalah struktur data yang menggunakan
konsep LIFO. Elemen terakhir yang disimpan dalam stack menjadi elemen pertama
yang diambil. Dalam proses komputasi, untuk meletakkan sebuah elemen pada
bagian atas stack disebut dengan push. Dan untuk memindahkan dari tempat teratas
tersebut, kita melakukan pop.
Ada 2 operasi paling dasar dari stack yang dapat dilakukan, yaitu :
1. Operasi push yaitu operasi menambahkan elemen pada urutan terakhir (paling
atas).
2. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir
dan menghapus elemen tersebut dari stack.
Operasi pada Stack :
a. Push
Dari ilustrasi di atas, bisa kita lihat bahwa notasi postfix dari ungkapan:
( A + B ) / (( C – D ) * E ^ F)
adalah
AB+CD–F^*
Tabel 2. Contoh Infix ke Postfix
import java.util.Stack;
public class InfixToPostfix {
String infixExp = "";
String postfixExp = "";
Stack<Character> s = new Stack<Character>();
public void setInfixExp(String infixExp) {
this.infixExp = infixExp;
}
public boolean isOperator(char ch) {
if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^') {
return true;
}
return false;
}
public int degreeOp(char op) {
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
} else if (op == '^') {
return 3;
} else {
return 0;
}
}
public String toPostfix() {
char ch;
PRAKTIKUM 7
QUEUE / ANTRIAN
A. Tujuan
Mahasiswa mampu :
Memahami struktur data queue
Memahami cara pengoperasian struktur data queue
Mengimplementasikan struktur data queue dengan array dan linked list
B. Dasar Teori
Antrian (queue) adalah sekumpulan elemen, jika ada elemen baru yang
ditambahkan, maka elemen tersebut akan berada di bagian belakang antrian Jika
ada elemen yang harus dihapus atau keluar dari antrian, maka elemen yang keluar
adalah elemen yang berada di sisi depan antrian. Atau konsep ini sering juga
disebut dengan konsep FIFO (First In First Out). Operasi yang terdapat pada queue
adalah:
• Enqueue atau push adalah proses untuk memasukkan elemen artinya menambah
data baru.
• Dequeue atau pop adalah proses untuk mengeluarkan elemen artinya
menghapus data.
• Peek adalah proses untuk mengetahui elemen yang paling depan.
• Front : pointer bantu yang digunakan untuk menunjuk element yang paling
depan.
• Rear : pointer bantu yang digunakan untuk menunjuk element yang paling
belakang.
Array pada Queue
Array pada Queue adalah suatu array yang dibuat seakan-akan merupakan suatu
garis lurus dengan satu pintu masuk dan satu pintu keluar. Pada gambar 1
merupakan implementasi queue menggunakan array. qfront untuk menandai
elemen yang pertama, sedangkan qback untuk menambahkan elemen baru pada
queue.
import java.util.LinkedList;
import java.util.Queue;
public class QueueAntrian {
public void queueExample() {
Queue queue = new LinkedList();
queue.add("Cau");
queue.add("Apel");
queue.offer("Kadongdong");
queue.offer("Sampeu");
System.out.println("remove: " + queue.remove());
System.out.println("element: " + queue.element());
System.out.println("poll: " + queue.poll());
System.out.println("peek: " + queue.peek());
}
public static void main(String[] args) {
new MainDemo().queueExample();
}
Karena di File Tidak Ada Praktikum 8 nya, jadi langsung ke Praktikum 9
PRAKTIKUM 9
Sorting & Searching
A. Tujuan
Mahasiswa mampu :
Memahami sorting dan searching
Memahami algoritma Shell Sort, Quick Sort, Binary Search, Linear Search
Mengimplementasikan sorting dan searching
B. Sub Topik
• Shell Sort
• Quick Sort
• Binary Search
• Linear Search
• Implementasi Shell Sort
• Implementasi Quick Sort
• Implementasi Binary Search
• Implementasi Linear Search
C. Dasar Teori
Shell Sort
Metode ini disebut juga dengan metode pertambahan menurun (diminishing
increment). Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959,
sehingga sering disebut dengan Metode Shell Sort. Metode ini mengurutkan
data dengan cara membandingkan suatu data dengan data lain yang memiliki
jarak tertentu, kemudian dilakukan penukaran bila diperlukan Proses
pengurutan dengan metode Shell dapat dijelaskan sebagai berikut :
Pertama-tama adalah menentukan jarak mula-mula dari data yang akan
dibandingkan, yaitu N / 2. Data pertama dibandingkan dengan data dengan
jarak N / 2. Apabila data pertama lebih besar dari data ke N / 2 tersebut maka
kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan
jarak yang sama yaitu N / 2. Demikian seterusnya sampai seluruh data
dibandingkan sehingga semua data ke-j selalu lebih kecil daripada data ke-(j
+ N / 2).
Pada proses berikutnya, digunakan jarak (N / 2) / 2 atau N / 4. Data
pertama dibandingkan dengan data dengan jarak N / 4. Apabila data
pertama lebih besar dari data ke N / 4 tersebut maka kedua data tersebut
ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama yaitu
N / 4. Demikian seterusnya sampai seluruh data dibandingkan sehingga
semua data ke-j lebih kecil daripada data ke-(j + N / 4). Pada proses
berikutnya, digunakan jarak (N / 4) / 2 atau N / 8. Demikian seterusnya
sampai jarak yang digunakan adalah 1. Algoritma metode Shell dapat
dituliskan sebagai berikut :
1 Jarak ← N
2 Selama (Jarak > 1) kerjakan baris 3 sampai dengan 9
3 Jarak ← Jarak / 2. Sudah ← false
4 Kerjakan baris 4 sampai dengan 8 selama Sudah = false
5 Sudah ← true
6j←0
7 Selama (j < N – Jarak) kerjakan baris 8 dan 9
8 Jika (Data[j] > Data[j + Jarak] maka tukar Data[j], Data[j
+ Jarak]. Sudah ← true
9j←j+1
Untuk lebih memperjelas langkah-langkah algoritma penyisipan langsung
dapat dilihat pada tabel 1. Proses pengurutan pada tabel 1 dapat dijelaskan
sebagai berikut:
• Pada saat Jarak = 5, j diulang dari 0 sampai dengan 4. Pada pengulangan
pertama, Data[0] dibandingkan dengan Data[5]. Karena 12<17, maka tidak
terjadi penukaran. Kemudian Data[1] dibandingkan dengan Data[6]. Karena
35>23 maka Data[1] ditukar dengan Data[6]. Demikian seterusnya sampai
j=4.
• Pada saat Jarak = 5/2 = 2, j diulang dari 0 sampai dengan 7. Pada
pengulangan pertama, Data[0] dibandingkan dengan Data[2]. Karena 12>9
maka Data[0] ditukar dengan Data[2]. Kemudian Data[1] dibandingkan
dengan Data[3] juga terjadi penukaran karena 23>11. Demikian seterusnya
sampai j=7. Perhatikan untuk Jarak = 2 proses pengulangan harus dilakukan
lagi karena ternyata Data[0] > Data[2]. Proses pengulangan ini berhenti bila
Sudah=true.
• Demikian seterusnya sampai Jarak=1.
Contoh Programnya :
import java.util.*;
public class ShellSort{
public static void sort(int[] array) {
int inner, outer;
int temp;
int h = 1;
while (h <= array.length / 3) {
h = h * 3 + 1;
}
while (h > 0) {
for (outer = h; outer < array.length; outer++) {
temp = array[outer];
inner = outer;
while (inner > h - 1 && array[inner - h] >= temp) {
array[inner] = array[inner - h];
inner -= h;
}
array[inner] = temp;
}
h = (h - 1) / 3;
}
}
public static void main(String[] args) {
int [] array = {5,3,0,2,4,1,0,5,2,3,1,4};
System.out.println("Before: " + Arrays.toString(array));
sort(array);
System.out.println("After: " + Arrays.toString(array));
}}
Quick Sort
Quick Sort mengurutkan data dengan pendekatan divide-and-conquer, yaitu
membagi masalah semula menjadi beberapa submasalah sejenis yang lebih kecil dan
menyelesaikannya . quick sort melakukan pengurutan dalam putaran secara rekursif
jika data yang di urutkan lebih dari satu buah.
Berikut contoh programnya :
import java.util.*;
public class QuickSort {
public static void swap (int A[], int x, int y) {
int temp = A[x];
A[x] = A[y];
A[y] = temp;
}
public static int partition(int A[], int f, int l) {
int pivot = A[f];
while (f < l) {
while (A[f] < pivot) f++;
while (A[l] > pivot) l--;
swap (A, f, l);
}
return f;
}
public static void Quicksort(int A[], int f, int l) {
if (f >= l) return;
int pivotIndex = partition(A, f, l);
Quicksort(A, f, pivotIndex);
Quicksort(A, pivotIndex+1, l);
}
public static void main(String argv[]) {
int []numbers={55,2,93,1,23,10,66,12,7,54,3};
System.out.println(Arrays.toString(numbers));
Quicksort(numbers, 0, numbers.length-1);
System.out.println(Arrays.toString(numbers));
}
}
Binary Search
Binary search tree adalah salah satu bentuk dari pohon. Di mana masing-masing
pohon tersebut hanya memiliki dua buah upapohon, yakni upapohon kiri dan
upapohon kanan.Ciri khas yang melekat pada binary search tree ini yang bisa juga
dibilang sebagai keunggulan dari binary search tree adalah peletakan isi dari
nodenya yang terurut berdasarkan besarnya dari isinya tersebut. Isinya bisa saja
berupa integer, karakter, atau apapun sesuai dengan spesifikasi binary search tree
yang ada.
Contoh Programnya adalah :
import java.util.Scanner;
class BinarySearch
{
public static void main(String args[])
{
int c, first, last, middle, n, search, array[];
Scanner in = new Scanner(System.in);
System.out.println("Enter number of elements");
n = in.nextInt();
array = new int[n];
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++)
array[c] = in.nextInt();
first = 0;
last = n - 1;
middle = (first + last)/2;
while( first <= last )
{
if ( array[middle] < search )
first = middle + 1;
else if ( array[middle] == search )
{
System.out.println(search + " found at location " + (middle + 1) + ".");
break;
}
else
last = middle - 1;
middle = (first + last)/2;
}
if (first > last)
System.out.println(search + " isn't present in the list.\n");
}
}
Linear Search
Algoritma linear search adalah algoritma pencarian yang paling sederhana. Linear
search bekerja dengan membandingkan nilai yang dicari dengan setiap element
pada array (biasanya).
di bawah ini merupakan contoh program linear search dalam bahasa java :
import java.util.Scanner;
class LinearSearch
{
public static void main(String args[])
{
int c, n, search, array[];
Scanner in = new Scanner(System.in);
System.out.println("Enter number of elements");
n = in.nextInt();
array = new int[n];
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++)
array[c] = in.nextInt();
System.out.println("Enter value to find");
search = in.nextInt();
for (c = 0; c < n; c++)
{
if (array[c] == search) /* Searching element is present */
{
System.out.println(search + " is present at location " + (c + 1) + ".");
break;
}
}
if (c == n) /* Element to search isn't present */
System.out.println(search + " isn't present in array.");
}
}
PRAKTIKUM 10
COLLECTION & ARRAY LIST SET
Collection adalah suatu obyek yang bisa digunakan untuk menyimpan sekumpulan
obyek. Obyek yang ada dalam Collection disebut elemen. Collection menyimpan
elemen yang bertipe Object, sehingga berbagai tipe obyek bisa disimpan dalam
Collection. Class-class mengenai Collection tergabung dalam Java Collection
Framework. Collection terbagi menjadi 3 kelompok yaitu Set, List dan Map.
• Set
Set mengikuti model himpunan, dimana obyek/anggota yang tersimpan dalam Set
harus unik. Urutan maupun letak dari anggota tidaklah penting, hanya keberadaan
anggota saja yang penting. Class-class yang mengimplementasikan interface Set
adalah HashSet. Interface SortedSet merupakan subInterface dari interface Set.
Untuk mengurutkan Set, kita dapat menggunakan class yang
mengimplementasikan interface SortedSet yaitu class TreeSet.
• List
List digunakan untuk menyimpan sekumpulan obyek berdasarkan urutan masuk
(ordered) dan menerima duplikat. Terdapat interface Queue yang cara
penyimpanan seperti List, interface ini menyimpan obyek menggunakan metode
FIFO (First In First Out) yaitu obyek yang masuk pertama keluar pertama.
• Map
Perbedaaan mendasar map dengan collection yang lain, untuk menyimpan obyek
pada Map, perlu sepasang obyek, yaitu key yang bersifat unik dan nilai yang
disimpan. Untuk mengakses nilai tersebut maka kita perlu mengetahui key dari
nilai tersebut. Map juga dikenal sebagai dictionary/kamus.
Hirarki dali Collection
Contoh Programnya :
import java.util.HashSet;
public class HashSetExample {
public static void main(String args[]) {
HashSet<String> hset =
new HashSet<String>();
hset.add("Apple");
hset.add("Mango");
hset.add("Grapes");
hset.add("Orange");
hset.add("Fig");
hset.add("Apple");
hset.add("Mango");
hset.add(null);
hset.add(null);
System.out.println(hset);
}
}
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String args[]) {
TreeSet<String> tset = new TreeSet<String>();
// Adding elements to TreeSet<String>
tset.add("ABC");
tset.add("String");
tset.add("Test");
tset.add("Pen");
tset.add("Ink");
tset.add("Jack");
System.out.println(tset);
TreeSet<Integer> tset2 = new TreeSet<Integer>();
tset2.add(88);
tset2.add(7);
tset2.add(101);
tset2.add(0);
tset2.add(3);
tset2.add(222);
System.out.println(tset2);
}
}
import java.util.LinkedHashSet;
public class LinkedHashSetExample {
public static void main(String args[]) {
LinkedHashSet<String> lhset = new LinkedHashSet<String>();
lhset.add("Z");
lhset.add("PQ");
lhset.add("N");
lhset.add("O");
lhset.add("KK");
lhset.add("FGH");
System.out.println(lhset);
LinkedHashSet<Integer> lhset2 = new LinkedHashSet<Integer>();
lhset2.add(99);
lhset2.add(7);
lhset2.add(0);
lhset2.add(67);
lhset2.add(89);
lhset2.add(66);
System.out.println(lhset2);
}
}
import java.util.*;
class JavaExampleArraylist{
public static void main(String args[]){
ArrayList<String> alist=new ArrayList<String>();
alist.add("Steve");
alist.add("Tim");
alist.add("Lucy");
alist.add("Pat");
alist.add("Angela");
alist.add("Tom");
System.out.println(alist);
alist.add(3, "Steve");
System.out.println(alist);
}
}
import java.util.Scanner;
import java.util.TreeSet;
public class TreesetMhs {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
TreeSet<String> treeSet = new TreeSet<String>();
System.out.print("Masukan Nama Yang Ingin di Masukan\t :");
String mhs = in.nextLine();
treeSet.add(mhs);
System.out.print("Nama Mahasiswa yang di Tambahkan\t: "+treeSet);
}
}
import java.util.*;
class ArraylistMhs{
public static void main(String args[]){
ArrayList<String> alist=new ArrayList<String>();
Scanner in=new Scanner(System.in);
System.out.print("Masukan Nama Yang Ingin di Masukan\t :");
String mhs = in.nextLine();
alist.add(mhs);
System.out.print("Nama Mahasiswa yang di Tambahkan\t: "+alist);
}
}
PRAKTIKUM 11
SINGLE LINKEDLIST DAN DOUBLE LINKEDLIST
Single Linked list adalah sekumpulan elemen bertipe sama, yang mempunyai
keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian. Struktur berupa
rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain
melalui pointer. Pointer adalah alamat elemen.Penggunaan pointer untuk mengacu
elemen berakibat elemen-elemen bersebelahan secara logik walau tidak
bersebelahan secara fisik di memori.
Double Linked List terdiri dari tiga bagian yaitu untuk menyimpan nilai dan
dua reference yang menunjuk ke node selanjutnya (next node) dan node sebelumnya
(previous node). Untuk bergerak maju dan mundur pada double linked list
menggunakan link next dan prev pada node.
Contoh Programnya :
LINKED LIST
public class Node {
int data;
Node next;
public Node(int data){
this.data = data;
}
public void tampil(){
System.out.print("{"+data+"}");
}
}
public class LinkedList {
Node first ;
public LinkedList(){
first = null;
}
public boolean isEmpty(){
return (first==null);
}
public void addFirst(int data){
Node node = new Node(data);
node.next = first;
first = node;
}
public void addLast(int data){
Node node, help;
node = new Node(data);
node.next = null;
if(isEmpty()){
first = node;
first.next = null;
}else{
help = first;
while(help.next!=null){
help=help.next;
}
help.next=node;
}
}
public Node deleteFirst(){
if(!isEmpty()){
Node temp = first;
first = first.next;
return temp;
}else{
return null;
}
}
public Node deleteLast(){
if(!isEmpty()){
Node temp, current;
current=first;
while(current.next.next != null){
current=current.next;
}
temp=current.next;
current.next=null;
return temp;
}else{
Node temp = first;
first = null;
return temp;
}
}
public void tampilkan(){
Node current = first;
if(current == null){
System.out.println("Kosong!");
}else{
while(current != null){
current.tampil();
current = current.next;
}
System.out.println();
}
}
}
while(current != null){
current.tampil();
current = current.next;
}
System.out.println("");
}
//menampilkan data dari terakhir - pertama
public void displayBackward(){
System.out.print("List (last-->first): ");
DNode current = last;
while(current != null){
current.tampil();
current = current.prev;
}
System.out.println("");
}
}
public class DoubleLinkedListApp {
public static void main(String[] args){
DoubleLinkedList theList = new DoubleLinkedList();
theList.insertFirst(22);
theList.insertFirst(44);
theList.insertFirst(66);
theList.insertLast(11);
theList.insertLast(33);
theList.insertLast(55);
theList.displayForward();
theList.displayBackward();
theList.deleteFirst();
theList.deleteLast();
theList.deleteKey(11);
theList.displayForward();
theList.insertAfter(22, 77);
theList.insertAfter(33, 88);
theList.displayForward();
}
}
PRAKTIKUM 12
TREE
Struktur pohon (tree) biasanya digunakan untuk menggambarkan hubungan
yang bersifat
hirarkis antara elemen-elemen yang ada. Contoh penggunaan struktur pohon :
• Silsilah keluarga
• Hasil pertandingan yang berbentuk turnamen
• Struktur organisasi dari sebuah perusahaan
Sebuah binary tree adalah sebuah pengorganisasian secara hirarki dari
beberapa buah simpul, dimana masing-masing simpul tidak mempunyai anak lebih
dari 2. Simpul yang berada di bawah sebuah simpul dinamakan anak dari simpul
tersebut.
Simpul yang berada di atas sebuah simpul dinamakan induk dari simpul
tersebut Masing-masing simpul dalam binary tree terdiri dari tiga bagian yaitu
sebuah data dan dua buah pointer yang dinamakan pointer kiri dan kanan. Simpul
juga mempunyai sibling, descendants, dan ancestors. Sibling dari sebuah simpul
adalah anak lain dari induk simpul tersebut. Descendants dari sebuah simpul adalah
semua simpul-simpul merupakan cabang (berada di bawah) simpul tersebut.
Anchestors dari sebuah simpul adalah semua simpul yang berada di atas antara
simpul tersebut dengan root.
Binary Tree Pree Order
class BT
{
private BTNode root;
public BT()
{
root = null;
}
public boolean isEmpty()
{
return root == null;
}
public void insert(int data)
{
root = insert(root, data);
}
private BTNode insert(BTNode node, int data)
{
if (node == null)
node = new BTNode(data);
else
{
if (node.getRight() == null)
node.right = insert(node.right, data);
else
node.left = insert(node.left, data);
}
return node;
}
public int countNodes()
{
return countNodes(root);
}
private int countNodes(BTNode r)
{
if (r == null)
return 0;
else
{
int l = 1;
l += countNodes(r.getLeft());
l += countNodes(r.getRight());
return l;
}
}
public void inorder()
{
inorder(root);
}
private void inorder(BTNode r)
{
if (r != null)
{
inorder(r.getLeft());
System.out.print(r.getData() +" ");
inorder(r.getRight());
}
}
public void preorder()
{
preorder(root);
}
private void preorder(BTNode r)
{
if (r != null)
{
System.out.print(r.getData() +" ");
preorder(r.getLeft());
preorder(r.getRight());
}
}
public void postorder()
{
postorder(root);
}
private void postorder(BTNode r)
{
if (r != null)
{
postorder(r.getLeft());
postorder(r.getRight());
System.out.print(r.getData() +" ");
}
}
}
PRAKTIKUM 13
HASH
Hash merupakan salahsatu fasilitas yang telah di sediakan oleh java untuk
memudahkan pelabelan suatu array. Kalau di analogi kan hash seperti kamus, ketika
memanggil kata tertentu, nanti akan keluar hasil balik dari kata kunci tersebut.
import java.util.Collection;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Set;
public class HashtableDemo {
public static void main(String args[]) {
Hashtable companies = new Hashtable();
companies.put("Google", "United States");
companies.put("Nokia", "Finland");
companies.put("Sony", "Japan");
companies.get("Google");
System.out.println("Does hashtable contains Google as key: " +
companies.containsKey("Google"));
System.out.println("Does hashtable contains Japan as value: "+
companies.containsValue("Japan"));
Enumeration enumeration = companies.elements();
while (enumeration.hasMoreElements()) {
System.out.println("hashtable values: " + enumeration.nextElement());}
System.out.println("Is companies hashtable empty: "+ companies.isEmpty());
System.out.println("Size of hashtable in Java: " + companies.size());
Set hashtableKeys = companies.keySet();
Enumeration hashtableKeysEnum = companies.keys();
Enumeration hashtableValuesEnum = companies.elements();
Collection hashtableValues = companies.values();
companies.clear();
}
}
Contoh 2
import java.util.Hashtable;
import java.util.Enumeration;
public class HashtableExample {
public static void main(String[] args) {
Enumeration names;
String key;
Hashtable<String, String> hashtable = new Hashtable<String, String>();
hashtable.put("Key1","Chaitanya");
hashtable.put("Key2","Ajeet");
hashtable.put("Key3","Peter");
hashtable.put("Key4","Ricky");
hashtable.put("Key5","Mona");
names = hashtable.keys();
while(names.hasMoreElements()) {
key = (String) names.nextElement();
System.out.println("Key: " +key+ " & Value: " +
hashtable.get(key));
}
}
}
PRAKTIKUM 14
GRAPH
Sebuah graph G=<V,E> terdiri dari sekumpulan titik (vertices) V dan sekumpulan
garis (edges) E. Sebuah garis e = (u,v) menghubungkan dua titik u dan v. Self – loop
adalah garis yang menghubungkan ke titik itu sendiri.
Dua titik u, v dikatakan adjacent to u, jika u dan v dihubungkan dengan garis. Path
antara dua titik v dan w adalah sekumpulan garis yang menghubungkan titik v ke titik
w. Panjang path adalah jumlah garis dalam path.
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Stack;
public class DFS {
private Stack<Integer> stack;
public DFS() {
stack = new Stack<Integer>();
}
public void dfs(int adjacency_matrix[][], int source){
int number_of_nodes = adjacency_matrix[source].length - 1;
int visited[] = new int[number_of_nodes + 1];
int element = source;
int i = source;
System.out.print(element + "\t");
visited[source] = 1;
stack.push(source);
while (!stack.isEmpty()){
element = stack.peek();
i = element;
while (i <= number_of_nodes){
if (adjacency_matrix[element][i] == 1 && visited[i] == 0){
stack.push(i);
visited[i] = 1;
element = i;
i = 1;
System.out.print(element + "\t");
continue;
}
i++;
}
stack.pop();
}
}
public static void main(String...arg){
int number_of_nodes, source;
Scanner scanner = null;
try{
System.out.println("Enter the number of nodes in the graph");
scanner = new Scanner(System.in);
number_of_nodes = scanner.nextInt();
int adjacency_matrix[][] = new int[number_of_nodes + 1][number_of_nodes +
1];
System.out.println("Enter the adjacency matrix");
for (int i = 1; i <= number_of_nodes; i++)
for (int j = 1; j <= number_of_nodes; j++)
adjacency_matrix[i][j] = scanner.nextInt();
System.out.println("Enter the source for the graph");
source = scanner.nextInt();
System.out.println("The DFS Traversal for the graph is given by ");
DFS dfs = new DFS();
dfs.dfs(adjacency_matrix, source);
}catch(InputMismatchException inputMismatch){
System.out.println("Wrong Input format");
}
scanner.close();
}
}
import java.util.InputMismatchException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class BFS
{
private Queue<Integer> queue;
public BFS()
{
queue = new LinkedList<Integer>();
}
public void bfs(int adjacency_matrix[][], int source)
{
int number_of_nodes = adjacency_matrix[source].length - 1;
int[] visited = new int[number_of_nodes + 1];
int i, element;
visited[source] = 1;
queue.add(source);
while (!queue.isEmpty())
{
element = queue.remove();
i = element;
System.out.print(i + "\t");
while (i <= number_of_nodes)
{
if (adjacency_matrix[element][i] == 1 && visited[i] == 0)
{
queue.add(i);
visited[i] = 1;
}
i++;
}
}
}
public static void main(String... arg)
{
int number_no_nodes, source;
Scanner scanner = null;
try
{
System.out.println("Enter the number of nodes in the graph");
scanner = new Scanner(System.in);
number_no_nodes = scanner.nextInt();
int adjacency_matrix[][] = new int[number_no_nodes +
1][number_no_nodes + 1];
System.out.println("Enter the adjacency matrix");
for (int i = 1; i <= number_no_nodes; i++)
for (int j = 1; j <= number_no_nodes; j++)
adjacency_matrix[i][j] = scanner.nextInt();
System.out.println("Enter the source for the graph");
source = scanner.nextInt();
System.out.println("The BFS traversal of the graph is ");
BFS bfs = new BFS();
bfs.bfs(adjacency_matrix, source);
} catch (InputMismatchException inputMismatch)
{
System.out.println("Wrong Input Format");
}
scanner.close();
}
}