Kamis, 31 Mei 2018

PROGRAM BINARY TREE (POHON BINER)

CONTOH PROGRAM BINARY TREE PADA HURUF


#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<iomanip>

using namespace std;

typedef struct tree *pohon;
// Deklarasi dari tree dengan menggunakan linked list
struct tree{
    char info;
    pohon kiri;
    pohon kanan;
};
// Fungsi untuk membuat simpul yang pertama
pohon baru(char hrf)
{
    pohon br;
    br=(pohon)malloc(sizeof(struct tree));
    br->info=hrf;
    br->kiri=NULL;
    br->kanan=NULL;
    return (br);
}

//Fungsi untuk menyisipkan simpul pada tree yang sudah dibangun
void sisip (pohon ph, pohon sp)
{
    pohon P,Q;
    P = ph;
    Q = ph;
    while((sp->info != ph->info)&&(Q!=NULL))
    {
        P = Q;
        if (sp->info < P->info)
        Q = P->kiri;
        else
        Q = P->kanan;
    }
    if(sp->info == P->info)
    cout<<"Sudah ada";
    else
    if(sp->info < P->info)
    P->kiri=sp;
    else
    P->kanan=sp;
}

//Fungsi-fungsi untuk metode traversal secara rekurs
void inorder(pohon ph)
{
    if (ph != NULL)
    {
        inorder(ph->kiri);
        cout<<" "<<ph->info<<" ";
        inorder(ph->kanan);
    }
}

void preorder(pohon ph)
{
    if (ph != NULL)
    {
        cout<<" "<<ph->info<<" ";
        preorder(ph->kiri);
        preorder(ph->kanan);
    }
}

void postorder(pohon ph)
{
    if (ph != NULL)
    {
        postorder(ph->kiri);
        postorder(ph->kanan);
        cout<<" "<<ph->info<<" ";
    }
}

main()
{
    int j=0;char input,jawab[2];
    pohon br, ssp;
    while(1)
    {
        cout<<endl;
        cout<<"Ketikkan huruf :"; scanf("%c",&input);
        fflush(stdin);
        if (j==0) br = baru(input);
        else
        {
            ssp = baru(input);
            sisip(br,ssp);
        }
        cout<<"Ada data lagi(y/t):"; scanf("%s",&jawab);
        fflush(stdin);
        if((strcmp(jawab,"Y")==0)||(strcmp(jawab,"y")==0))
        {
            j++;continue;
        }
        else
        if((strcmp(jawab,"T")==0)||(strcmp(jawab,"t")==0))
        break;
    }
    cout<<endl;
    cout<<"Inorder\t\t : "; inorder(br); cout<<"\n";
    cout<<"Pre-order\t : "; preorder(br); cout<<"\n";
    cout<<"Post-order\t : "; postorder(br); cout<<"\n";
}






HASIL OUTPUT PROGRAM DI ATAS

Screenshoot output program binary tree





ALGORITMA PROGRAM DI ATAS

Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan logis. Langkah-langkah dalam algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar. Teknik penyajian algoritma dibagi menjadi dua yaitu pseudocode (bentuk tulisan) dan flowchart (bentuk gambar). 

Pseudocode program binary tree
Pseudocode merupakan algoritma yang berbentuk tulisan. Dari pseudocode di atas dapat dibaca yang dimulai dengan start sebagai awal dari suatu program. Lalu menginputkan data dengan mengetik huruf sehingga akan dilanjutkan pilihan "Ada data lagi (y/ t)". Pilihan Ya atau tidak tersebut merupakan jawaban yang akan dieksekusi. Sehingga akan menghasilkan output yang terdiri dari Inorder, Pre-order dan Post-order. Kemudian program akan keluar.


Flowchart program binary tree

Flowchart merupakan salah satu bentuk algoritma yang berupa gambar. Dari flowchart di atas dapat dibaca yang di mulai dari atas yaitu Start. Lalu menginput data dengan mengetikkan huruf. Sehingga akan muncul pilihan "Ada data lagi (ya/tidak)", jika pilih "ya" maka akan kembali penginputan data, pengeksekusian ini akan dilakukan sampai  pengguna memilih "tidak". Maka program akan keluar.





Referensi :

http://arna.lecturer.pens.ac.id/Praktikum_ASD/16%20Tree.pdf

PROGRAM QUEUE (ANTRIAN)

CONTOH PROGRAM QUEUE PADA TELLER BANK


#include <iostream>
#include <conio.h>
#include <windows.h>
#define max 2
using namespace std;

struct antri
{
    int data;
};

struct identitas
{
    char nama[20];
    char no_rek[15];
    char transaksi;
    int nominal;
};

main()
{

    identitas id[15];
    antri ant[15];
    int cek=0, y=0, hapus;
    char pil;
    do {
            system("cls");
            cout<<"\n\t\t ====================================";
            cout<<"\n\t\t ||  PROGRAM TELLER BANK OF ARAYA  ||";
            cout<<"\n\t\t ===================================="<<endl<<endl;
            cout<<"1. Masukan Antrian"<<endl;
            cout<<"2. Proses Antrian"<<endl;
            cout<<"3. Keluar"<<endl;
         cout<<endl;
            cout<<"Masukkan pilihan Anda (1-3)\t= ";
            cin>>pil;
         cout<<endl;
if(pil!='1' && pil !='2' && pil !='3' )
{
    cout<<"Anda salah memasukkan pilihan\n\n";
    system("PAUSE");
}
            else
            {
                if(pil=='1')   //PUSH
                {
                    if(cek==15 && y==15)
                    {
                        cout<<"ANTRIAN PENUH!!!";
                    }

                        cout<<endl;
                        system("cls");
                        cout<<"Nama Nasabah\t: ";
                        cin>>id[cek].nama;
                        cout<<"Nomor Rekening\t: ";
                        cin>>id[cek].no_rek;
                        ulang:
                        cout<<"Jenis Transaksi\t: \n";
                        cout<<"\t: A.Debet\n";
                        cout<<"\t  B.Kredit\n"<<"Pilih\t: ";
                        cin>>id[cek].transaksi;
                        if(id[cek].transaksi=='a' || id[cek].transaksi=='A' || id[cek].transaksi=='b' || id[cek].transaksi=='B')
                        {
                            cout<<"Nominal\t\t: ";
                            cin>>id[cek].nominal;
                        }
                        else
                        {

                            cout<<"\n\nAnda Salah Memilih Jenis Transaksi\n\n";
                            cout<<"\n\n";
                            goto ulang;
                        }

                        cout<<endl;
                        cek++;
                        system("cls");

                        cout<<"Antrian saat ini\t:\n\n";
                                for(int z=0;z<cek;z++)
                                {

                                    cout<<"Nomor Antri\t: "<<z+1;
                                    cout<<endl;
                                    cout<<"Nama Nasabah\t: "<<id[z].nama<<endl;
                                    cout<<"Nomor Rekening\t: "<<id[z].no_rek<<endl;
                                    cout<<"Jenis Transaksi\t: ";
                                    if(id[z].transaksi=='a' || id[z].transaksi=='A')
                                    {
                                        cout<<"Debet";
                                    }
                                    else if(id[z].transaksi=='b' || id[z].transaksi=='B')
                                    {
                                        cout<<"Kredit";
                                    }
                                    cout<<endl;
                                    cout<<"Nominal\t\t: "<<id[z].nominal<<endl;
                                    cout<<endl<<endl;

                                }




                    cout<<"\n\n";
                    system("PAUSE");
                }
                else
                {
                    if(pil=='2')     //POP
                    {
                        if(cek==0)
                            cout<<"Antrian kosong";
                        else
                        {
                            for(int z=0;z<cek;z++)
                            hapus=z;
                            for(int v=0;v<cek;v++)
                                ant[v].data=ant[v+1].data;
                            ant[cek].data=NULL;
                            cek--;
                            system("cls");
                            cout<<"\nAntrian dengan nomor 1 diproses\n";
                            cout<<"\n\t\tData Nasabah \n\n";
                            cout<<"Nama Nasabah\t: "<<id[0].nama<<endl;
                            cout<<"Nomor Rekening\t: "<<id[0].no_rek<<endl;
                            cout<<"Jenis Transaksi\t: "<<id[0].transaksi<<endl;
                            cout<<"Nominal\t\t: "<<id[0].nominal<<endl;
                            cout<<endl;
                            {
                                int b;
                                for(b=0;b<cek;b++)
                                id[b]=id[b+1];
                                b--;
                            }
                        }

                        cout<<endl;
                        if(cek==0)
                            cout<<"Antrian kosong";
                        else
                            cout<<"Nomor Antrian saat ini : ";
                                for(int z=0;z<cek;z++)
                                {
                                    cout<<" | ";
                                    cout<<" "<<z+1;
                                    cout<<" | ";
                                }
                    cout<<endl<<endl;
                    system("PAUSE");
                    }

                }
            }

    }while(pil!='3');
}




HASIL OUTPUT DARI PROGRAM QUEUE DI ATAS

Ketika menu ke 1 dipilih

Penginputan data nasabah
Daftar antrian pada bank tersebut

Ketika menu ke 2 dipilih

Antrian nomor 1 sedang diproses

Antrian nomor 2 sedang diproses

Ketika menu ke 3 dipilih dan jalan keluar dari program



Referensi :

Rangga Hidayat, Ady. 2015. PROGRAM C++ TELLER BANK MENGGUNAKAN ANTRIAN. From https://loecari.blogspot.com/2015/06/program-c-teller-bank-menggunakan.html. Juni 2015.

Rabu, 02 Mei 2018

LINKED LIST ATAU SENARAI BERANTAI


SOAL
Jelaskan beberapa hal terkait dengan Struktur Data jenis Senarai Berantai (Linked List), antara lain meliputi :
A.    Pengertian
B.    Jenis-jenis Linked List
C.    Beberapa jenis operasi yang terdapat didalamnya
D.    Algoritma dan contoh program untuk operasi didalamnya.

JAWAB
A.    Pengertian Linked List
Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari urutan record data dimana setiap record memiliki field yang menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data yang dihubungkan dengan link pada Linked List disebut Node. Biasanya didalam suatu linked list, terdapat istilah head dan tail.
1.     Head adalah elemen yang berada pada posisi pertama dalam suatu linked list.
2.     Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list.

B.    Jenis-jenis Linked List
Ada beberapa macam Linked List, yaitu :
1.     Single Linked List
Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail menunjuk ke NULL.
Contoh :
Contoh codingannya : 
struct Mahasiswa{
      char nama[25];
      int usia;
      struct Mahasiswa *next;
}*head,*tail;

2.     Double Linked List
Double Linked List merupakan suatu linked list yang memiliki dua variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunjuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL.
Contoh :

Contoh codingannya :
struct Mahasiwa{
     char nama[25];
     int usia;
     struct Mahasiswa *next,*prev;
}*head,*tail;

3.     Circular Linked List
Circular Linked List merupakan suatu linked list dimana tail (node terakhir) menunjuk ke head (node pertama). Jadi tidak ada pointer yang menunjuk NULL. Ada 2 jenis Circular Linked List, yaitu :
a.     Circular Single Linked List
b.     Circular Double Linked List

4.     Multiple Linked List
Multiple Linked List merupakan suatu linked list yang memiliki lebih dar 2 buat variabel pointer. Contoh :
 

C.    Beberapa jenis operasi yang terdapat didalamnya
1.     Operasi Pada Single Linked List 
a.     Insert = Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked  list.
b.     Konstruktor = Fungsi ini membuat sebuah  linked list yang baru dan masih kosong. 
c.     IsEmpty = Fungsi ini menentukan apakah linked list kosong atau tidak.
d.     Find First = Fungsi ini mencari elemen pertama dari linked  list.
e.     Find Next = Fungsi ini mencari elemen sesudah elemen yang ditunjuk now. 
f.      Retrieve = Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan oleh fungsi. 
g.     Update = Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu. 
h.    Delete Now = Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang di hapus adalah elemen pertama dari linked list (head), head akan berpindah ke elemen berikut. 

2.     Operasi – operasi pada Double Linked List
a.     Insert Tail = Fungsi insert tail berguna untuk menambah simpul di belakang (sebelah kanan) pada sebuah linked list. 
b.     Insert Head = Sesuai dengan namanya, fungsi Insert Head berguna untuk menambah simpul di depan (sebelah kiri). Fungsi ini tidak berada jauh dengan fungsi Insert Tail yang telah dijelaskan sebelumnya.
c.     Delete Tail = Fungsi Delete Tail berguna untuk menghapus simpul dari belakang. Fungsi ini merupakan kebalikan dari fungsi Insert Tail yang menambah simpul di belakang. Fungsi Delete Tail akan mengarahkan Now kepada Tail dan kemudian memanggil fungsi Delete Now.
d.     Delete Head  = Fungsi Delete Head merupakan kebalikan dari fungsi Delete Tail yang menghapus simpul dari belakang, sedangkan Delete Head akan menghapus simpul dari depan (sebelah kiri). Fungsi Delete Head akan mengarahkan Now kepada Head dan kemudian memanggil fungsi Delete Now. 

D.    Algoritma dan contoh program untuk operasi didalamnya.
1.   Contoh penggunaan malloc:  
int *px = (int *) malloc(sizeof(int));   

char *pc = (char *) malloc(sizeof(char));     
struct Facebook *curr = (structFacebook*)malloc(sizeof(struct Facebook)); 

2.   Insert dan Delete Node dalam Single Linked List
Insert (push) dan delete (pop) node pada linked list dapat dilakukan pada posisi depan (head), tengah (mid) dan belakang (tail).
a.  Insert (Push)
Contoh codingan push depan :
 
Contoh codingan push belakang :

 

b.   Delete (Pop)
Contoh codingan pop depan :
Contoh codingan pop belakang :

 

 

3.   Insert dan Delete Node dalam Double Linked List
Insert (push) dan delete (pop) node pada linked list dapat dilakukan pada posisi depan (head), tengah (mid) dan belakang (tail).
a.  Insert (Push)
Contoh codingan push depan :
 

Contoh codingan push belakang :

 

b.  Delete (Pop)
Contoh codingan pop depan :
 
Contoh codingan pop belakang :
 
4.      Contoh codingan priority queue :
     


Referensi :
Sucianti, Novi. 2014. STRUKTUR DATA – Linked List. From http://suciantinovi.blogspot.co.id/2014/03/linked-list-i_14. html. 15 Maret 2014.
Juniawan, Aditia. 2016. Operasi-operasi Dasar Single dan Double Linked List. From http://temanbukuku.blogspot.co.id/2016/ 01/operasi-operasi-dasar-single-dan-double.html. 30 Januari 2016.

Template by:

Free Blog Templates