Showing posts with label Program. Show all posts
Showing posts with label Program. Show all posts

Thursday, November 26, 2015

Binary Tree Search

Yooootttt, seperti yang kita tahu bahwa metode search (pencarian data) ada bermacam-macam, seperti double link list search dan array search, namun pada kesempatan kali ini saya akan membagikan source salah satu metode pencarian. Metode pencarian yang saya pakai kali ini adalah binary tree search, karena menurut saya cara ini adalah cara yang paling efektif.

Berikut ini adalah source code nya:

package binarytree;

class Node {

    Node left;
    Node right;
    Node parent;
    int data;
}

public class BinaryTree {

    static Node root;

    static void insert(int data){
        // buat node baru
        Node new_node = new Node();
        new_node.data = data;
        if(root == null){ // tree kosong
            root = new_node;
        }else{
            Node position = root;
            boolean found = false;
            while(!found){
                if(new_node.data < position.data){
                    if(position.left == null){
                        found = true;
                        new_node.parent = position;
                        position.left = new_node;
                    }else{
                        position = position.left;
                    }
                }else{
                    if(position.right == null){
                        found = true;
                        new_node.parent = position;
                        position.right = new_node;
                    }else{
                        position = position.right;
                    }
                }
            }
        }
    }

    static void view(){
        node_view(root, "");
    }
    static void node_view(Node node, String spaces){
        if(node == null){
            System.out.println(spaces + "EMPTY");
        }else{
            System.out.println(spaces + node.data);
            node_view(node.left, spaces+"    ");
            node_view(node.right, spaces + "    ");
        }
    }

    static void postfix (Node localroot){
        if(localroot != null){
            System.out.print("(");
            postfix(localroot.left);
            postfix(localroot.right);
            System.out.print(" "+localroot.data+" ");
            System.out.print(")");
        }
    }

    static void delete(int deleted){
        boolean found = false;
        Node x = root;
        while(x != null){
            if(x.data == deleted){
                found = true;
                break;
            }else if(x.left != null  && deleted < x.data){
                x = x.left;
            }else if(x.right != null && deleted > x.data){
                x = x.right;
            }else{
                found = false;
                break;
            }
        }
        if(!found){
            // do nothing, node not found
        }else{
            boolean is_root = x.parent == null;
            boolean is_right = !is_root && x == x.parent.right;
            boolean is_left = !is_root && x == x.parent.left;
            // jika tidak punya anak
            if(x.left == null && x.right == null){
                if(is_root){ //  tdk punya anak & adalah root
                    root = null;
                }else{ // tdk punya anak & bukan root
                    if(is_left){ // tdk punya anak & adalah anak kiri
                        x.parent.left = null;
                    }else if(is_right){ // tdk punya anak & adalah anak kanan
                        x.parent.right = null;
                    }
                    x.parent = null; // putuskan hubungan dengan parent
                }
            }else if(x.left != null && x.right == null){ // hanya punya anak kiri
                if(is_root){
                    root = x.left;
                    root.parent.left = null;
                    root.parent = null;
                }else{
                    if(is_left){
                        x.parent.left = x.left;
                    }else if(is_right){
                        x.parent.right = x.left;
                    }
                    x.left.parent = x.parent;
                    x.parent = null;
                    x.left = null;
                }
            }else if(x.left == null && x.right != null){ // hanya punya anak kanan
                if(is_root){ // root
                    root = x.right;
                    root.parent.right = null;
                    root.parent = null;
                }else{ // bukan root
                    if(is_left){
                        x.parent.left = x.right;
                    }else if(is_right){
                        x.parent.right = x.right;
                    }
                    x.right.parent = x.parent;
                    x.parent = null;
                    x.right = null;
                }
            }else{ // punya 2 anak
                Node replacement = x.right; // kanan sekali
                while(replacement.left != null){ // kiri sekiri-kirinya
                    replacement = replacement.left;
                }
                if(x != replacement.parent){
                    if(replacement.right != null){ // kalau replacement punya anak kanan
                        replacement.parent.left = replacement.right;
                        replacement.right.parent = replacement.parent;
                    }else{ // kalau replacement tidak punya anak
                        replacement.parent.left = null;
                    }
                }else{
                    x.right = null;
                }
                // replace x
                if(is_root){
                    replacement.parent = null;
                    root = replacement;
                }else if(is_left){
                    replacement.parent = x.parent;
                    x.parent.left = replacement;
                }else if(is_right){
                    replacement.parent = x.parent;
                    x.parent.right = replacement;
                }
                replacement.left = x.left;
                replacement.right = x.right;
                if(replacement.left != null){
                    replacement.left.parent = replacement;
                }
                if(replacement.right != null){
                    replacement.right.parent = replacement;
                }
                // hapus x dari tree
                x.parent = null;
                x.left = null;
                x.right = null;
            }
        }
    }

    public static void main(String[] args) {
        insert(5);
        insert(7);
        insert(6);
        insert(8);
        insert(2);
        insert(4);
        insert(1);
        view();
        delete(2);
        view();
    }

}

Thursday, November 12, 2015

Sorting Menggunakan Order Link List Java

Pada postingan saya kali ini, saya akan mencoba membuat programm sorting sederhana dengan menggunakan bahasa pemrograman java. Bagi anda yang belum tahu apa itu link list bisa dilihat di sini.

Oke, langsung aja disedot gan source code nya :
class node{
    int data;
    node next,prev; //untuk berikut dan sebelum
}

public class Linklist {
static node head,tail;
static void insert(int x){
        node new_node=new node();
        new_node.data=x;
        if(head == null && tail == null){ // jika masih kosong
            head = tail=new_node;
        }else {
            tail.next=new_node;
            new_node.prev=tail;
            tail=new_node;
        }
    }
static void view()
{
    node x =new node();
        while(x!=null)
        {
            x=head;
            while(x!=null)
            {
                node next=x.next;
                node doublenext=x.next.next;
                if (x.data>next.data) {
                    next.prev=x.next=null;
                    next.next=x;
                    x.prev=next;
                    x.next=doublenext;
                    doublenext.prev=x;
                }
                x=x.next;
            }
        }
        x=head;
        while(x != null){ //saat node masih ada
            System.out.print(x.data + " - ");
            x = x.next;
        }
        System.out.println();
}
    public static void main(String[] args) {
        insert(5);
        insert(3);
        insert(1);
        System.out.println();
        view();
    }
}

Monday, September 21, 2015

Apa itu Queue ?

Nah, jika pada postingan sebelumnya saya sudah membahas mengenai apa itu stack ?, sekarang saya akan membahas mengenai apa yang dimaksud dengan queue.

Secara pengertian queue adalah antrian. Pengertian secara teknis nya queue adalah suatu kumpulan data yang mana penambahan elemen hanya bisa dilakukan pada satu ujung (dari tail) dan pengambilan data dilakukan dari ujung lainnya (head).

Berbeda dengan stack yang menggunakan prinsip LIFO (Last in First out), pada queue menggunakan prinsip FIFO
(First in First out).

Contoh penggunaannya dalam kehidupan nyata adalah misalnya kita sedang mengantri di rumah sakit / puskesmas untuk mendapatkan pelayanan medis, maka orang yang datang terlebih dahulu akan dilayani lebih dahulu dari pada yang datang setelahnya.



Contoh source code program queue:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#define MAX 10

typedef struct
{
char data[MAX];
char head;
char tail;
} Queue;
Queue antrian;
void Create()
{
antrian.head=antrian.tail=-1;
}
char IsEmpty()
{
if(antrian.tail==-1)
return 1;
else
return 0;
}
char IsFull()
{
if(antrian.tail==MAX-1) return 1;
else return 0;
}
void Enqueue(int data)
{
if(IsEmpty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
cout<<"Data "<<antrian.data[antrian.tail]<<" Masuk!!";
}
else if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
cout<<"Data "<<antrian.data[antrian.tail]<<" Masuk!!";
}
else if (IsFull() == 1)
{
cout<<"Maaf, penuh"<<endl;
cout<<data<<" Data tidak masuk";
}
}

void Dequeue()
{
char i;
char e = antrian.data[antrian.head];
if (antrian.tail == -1)
{
cout<<"Data Kosong"<<endl;
}
else
{
for(i=antrian.head;i<=antrian.tail-1;i++)
{
antrian.data[i] = antrian.data[i+1];
}
antrian.tail--;
cout<<"Data yang Keluar lebih dulu = "<<e<<endl;
}
}
void Clear()
{
antrian.head=antrian.tail=-1;
cout<<"Data dihapus"<<endl;

}
void Tampil()
{
if(IsEmpty()==0)
{
cout<<"Data Dalam Antrian"<<endl;
cout<<"==========================="<<endl;
cout<<endl;
for(char i=antrian.head;i<=antrian.tail;i++)
{
cout<<"| "<<antrian.data[i]<<" |";
}
}
else cout<<"Data Kosong";
}
void main()
{
int pil;
char data;
Create();
do
{
clrscr();
cout<<"Queue data berupa String"<<endl;
cout<<"=================================="<<endl;
cout<<endl;

cout<<"1. Masukkan data"<<endl;
cout<<"2. Hapus data"<<endl;
cout<<"3. Cetak"<<endl;
cout<<"4. Hapus semua"<<endl;
cout<<"5. Keluar"<<endl;
cout<<"Pilihan Anda= "; cin>>pil;
switch(pil)
{
case 1:
{
cout<<endl;
cout<<"Data = "; cin>>data;
Enqueue(data);
break;
}
case 2:
{
cout<<endl;
Dequeue();
break;
}
case 3:
{
cout<<endl;
Tampil();
break;
}
case 4:
{
cout<<endl;
Clear();
break;
}
}
getch();
} while(pil!=5);
}


Eksekusi / Menjalankan Program Kursi Bioskop

Di postingan saya kali ini saya akan share cara menjalankan program perl yang sudah disimpan di notepad sebelumnya. Bagi yang belum punya programnya bisa di download di sini

Untuk mengeksekusi program ada 2 cara, silakan agan simak video saya berikut ini:

Thanks for Watching, semoga agan terbantu dengan video saya.... :)

Tuesday, September 15, 2015

Linklist in Perl

Haloo, kali ini saya akan menyambung postingan mengenai link list dari postingan sebelumnya di sini http://ngeblogapik.blogspot.co.id/2015/09/konsep-dasar-algoritma-link-list.html bagi yang belum tahu apa itu link list silakan dibuka dulu url di atas. Mohon agan baca dulu postingan saya yang sebelumnya supaya bisa nyambung sama yang sekarang ini gan :)

Kali ini akan saya share source code nya, monggo ....

$list = $tail = undef;

foreach (1..5) {
    my $node = [ undef, $_ * $_ ];
    $list = undef;
    $tail = \$list; #tail linklist nya
    foreach (1..5) {
my $node = [ undef, $_ * $_ ];
$$tail = $node; #tail = node setelah linklist terisi
$tail = \$node->[NEXT]; #isi linklist berikutnya
    }
}


nah, terima kasih, semoga bermanfaat :)

Monday, September 14, 2015

Program Kursi Bioskop menggunakan Perl

http://images.solopos.com/2012/03/the-raid.jpg
Yo frenss, siapa yang di sini belum pernah nonton di bioskop ? Pasti sudah pernahkan... Sebelum agan masuk ke bioskop kan pasti harus beli tiket dulu di mbak-mbak kasir yang jaga, nah pada saat beli karcis pasti mbaknya yang cantik bilang "mau duduk di kursi yang mana mas ?" jangan sampai agan jawab "mau duduk di pelaminan sama kamuuhhh ...." :') pasti langsung dipanggilin security nya entar.

Kalau agan jeli, sebenarnya nomor-nomor yang ada pada kursi biskop itu merupakan sebuah array 2 dimensi yang disusun sedemikian rupa agar
mudah dipanggil.

Pengertian array adalah sekumpulan variabel yang memiliki tipe data yang sama dan dinyatakan dengan nama yang sama.

Nah, pada kesempatan kali ini saya akan membagikan tutorial bagaimana cara membuat program sederhana untuk pemesanan kursi bioskop menggunakan bahasa pemrograman Perl, silakan disimak caranya :

1. Pertama, buka notepad
2. Kedua, silakan copy dan paste source code saya di bawah ini ke dalam notepad

@nomor = ([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]); #ini adalah deklarasi isi arraynya
for(;;){ #ini adalah fungsi untuk melakukan infinite loop
for($a=0;$a<6;$a=$a+1){  #dan ini adalah kondisi yang ingin diulang
for($b=0;$b<5;$b=$b+1){
print " [$nomor[$a][$b]] "; #hasil perulangan yang ingin ditampilkan (sampai bawah)

}print "\n";}
print "pesan nomor berapa ?\n"; #di sini untuk input mau pesan nomor berapa
$x = <>;  #input dan deklarasi variabel
chomp($x);
if($x<=30 and $x>=1){ print "\n"; #pada program ini jumlah kursinya 30 jadi if nya seperti ini
if($x>=1 and $x<=5)
{
if($nomor[0][$x-1] == "X" ){print "SUDAH DIPESAN \n\n"} #apabila kursi sudah dipesan
$nomor[0][$x-1] = "X" ; #setelah kursi dipesan maka nomor akan berubah menjadi X
}
if($x>=6 and $x<=10)
{
if($nomor[1][$x-6] == "X" ){print "SUDAH DIPESAN \n\n"}
$nomor[1][$x-6]="X";

}
if($x>=11 and $x<=15)
{
if($nomor[2][$x-11] == "X" ){print "SUDAH DIPESAN \n\n"}
$nomor[2][$x-11]="X";

}
if($x>=16 and $x<=20)
{
if($nomor[3][$x-16] == "X" ){print "SUDAH DIPESAN \n\n"}
$nomor[3][$x-16]="X";

}
if($x>=21 and $x<=25)
{
if($nomor[4][$x-21] == "X" ){print "SUDAH DIPESAN \n\n"}
$nomor[4][$x-21]="X";

}
if($x>=26 and $x<=30)
{
if($nomor[5][$x-26] == "X" ){print "SUDAH DIPESAN \n\n"}
$nomor[5][$x-26]="X";

}}
else {print "\nKURSI TIDAK ADA \n\n";} #output apabila ada inputan yang bukan merupakan nomor kursi

}

3. Setelah disalin maka simpan file ini dalam bentuk .pl .mis: bioskop.pl dan save type as :all files
4. Untuk menjalankannya bisa lewat cmd dulu (win+R) ketik "cmd" tanpa tanda petik <enter>
masuk ke dalam direktori penyimpanan misal: saya simpan di data D dalam folder perl
D:
cd perl
bioskop.pl
atau agan bisa double click pada file bioskop yang sudah agan buat.

Kalau berhasil tampilannya akan seperti ini:





Apa itu Stack ?

Stack adalah sebuah kumpulan data yang diletakkan di atas data lain. Dengan begitu stack bisa diartikan juga sebagai LIFO (Last in First out), jadi data yang terakhir masuk akan keluar pertama (lebih awal).


Pada stack kegiatan menginputkan data dapat disebut push, dan
mengambil data disebut pop.
Pada saat sebuah stack masih kosong maka stack tersebut adalah top sekaligus bottom. Dan saat dilakukan push maka data yang pertama adalah top, dan jika kemudian dilakukan push lagi maka data yang kedua adalah top begitu pula seterusnya.

Pada stack top merupakan data yang keluar pertama, karena letaknya berada di paling atas.

Berikut ini adalah contoh push pada stack:
Dan ini proses pop :