Thursday, March 21, 2019

Algoritma Pemrograman : Queue



Queue 


Kaidah utama dalam konsep queue adalah FIFO yang merupakan singkatan dari First In First Out, artinya adalah data yang pertama kali dimasukkan atau disimpan, maka data tersebut adalah yang pertama kali akan diakses atau dikeluarkan. Analoginya sama dengan antrian di sebuah loket pembelian tiket kereta, orang yang datang lebih dahulu, maka akan dilayani terlbih dahulu, dan akan selesai lebih dulu dari orang-orang yang datang setelahnya. Gambar di bawah ini mengilustrasikan kerja sebuah queue:

Pendefinisian Struktur

Sebuah queue di dalam program komputer dideklarasikan sebagai sebuah tipe bentukan baru, di dalam Bahasa C++, biasa disebut struct. Sebuah struktur data dari sebuah queue setidaknya harus mengandung dua tiga variabel, yakni variabel HEAD yang akan berguna sebagai penanda bagian depan antrian, variabel TAIL yang akan berguna sebagai penanda bagian belakang antrian dan ARRAY DATA dari yang akan menyimpan data-data yang dimasukkan ke dalam queue tersebut. Berikut adalah syntax untuk mendeklarasikan struktur data dari sebuah queue menggunakan Bahasa C++ :


typedef struct
{
      int data[MAX];       int head;       int tail;
   }Queue;

                 
Penjelasan :
Bagian program diatas merupakan pendefinisian struct bernama queue. Didalam struct tersebut terdapat variabel data[MAX] sebagai array, variabel head dan variabel tail. Ketiga variabel tersebut bertipe data integer.

a. Fungsi Create ()

Fungsi Create() berfungsi untuk mengosongkan queue. Berikut syntax untuk fungsi Create():
void Create()
{
antrian.head=antrian.tail=-1;
}
Penjelasan :
Bagian program diatas merupakan fungsi Create(), yang berfungsi untuk mengosongkan queue    dengan                 cara       meletakan antrian.head     dan antrian.tail di posisi  awal yaitu -1.

b. Fungsi IsEmpty ()

Fungsi IsEmpty() berfungsi untuk mengecek apakah queue dalam keadaan kosong atau tidak. Berikut syntax untuk fungsi IsEmpty() :
int IsEmpty()
{
if(antrian.tail==-1) return 1; else
return 0;
}
Penjelasan :
Pada fungsi IsEmpty() terdapat sebuah logika, yaitu :
1.       Jika antrian.tail berada pada posisi -1, maka return 1 dijalankan, yang berarti antrian dalam kondisi kosong.
2.       Jika tidak, maka yang akan dijalankan adalah return 0, yang berarti didalam queue terdapat data didalamnya.
      c.     Fungsi IsFull ()
Fungsi IsFull() berfungsi untuk mengecek apakah queue dalam keadaan penuh atau tidak. Berikut syntax untuk fungsi IsFull() :
int IsFull() {
if(antrian.tail==MAX-1) return 1; else
return 0;
}
Penjelasan :
Pada fungsi IsFull() terdapat sebuah logika yaitu :
1.       Jika antrian.tail berada pada posisi MAX-1, maka return 1 dijalankan yang berarti antrian dalam kondisi penuh.
2.       Jika tidak maka return  0 yang dijalankan, yang berarti antrian masih bisa diisi data.
d. Fungsi Enqueue(int data)
Fungsi Enqueue(int data) berfungsi untuk memasukkan data kedalam queue, berikut syntax untuk fungsi Enqueue(int data) :
void Enqueue(int data)
{
if(IsEmpty()==1)
{
antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; printf("%d
sudah
dimasukan",antrian.data[antrian.tail]);
} 
else if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data; printf("%d
dimasukan",antrian.data[antrian.tail]); }
}
sudah
Penjelasan :
Pada fungsi Enqueue(int data), sebelum memasukkan nilai maka dilakukan pengecekkan terhadap fungsi IsEmpty(int data) dan fungsi IsFull(). Terdapat 2 logika didalam fungsi Enqueue() yaitu :
1.       Jika fungsi IsEmpty bernilai benar (1) berarti antrian dalam kondisi kosong,
maka antrian.head dan antrian.tail dinaikkan satu tingkat, berarti posisi head dan tail sekarang berada pada posisi 0, baru kemudian data disimpan kedalam variabel data. Lalu menampilkan pemberitahuan bahwa data sudah berhasil disimpan.
2.       Jika fungsi IsFull() bernilai salah (0) berarti antrian belum penuh,  maka antrian.tail dinaikkan posisinya satu tingkat baru kemudian data yang diterima dari fungsi main akan disimpan kedalam variabel data. Lalu menampilkan pemberitahuan bahwa data sudah berhasil disimpan.

Baca juga : Aplikasi sederhana perentalan CD di toko

e. Fungsi Dequeue()

Fungsi Dequeue() berfungsi untuk  mengeluarkan data yang paling awal masuk atau yang berada pada posisi head. Berikut syntax untuk fungsi Dequeue :
int Dequeue()
{ int i;
int e = antrian.data[antrian.head]; for(i=antrian.head;       i<=antrian.tail1;i++) {
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return e;
}
Penjelasan :
Fungsi Dequeue() berfungsi untuk mengeluarkan atau menghapus data yang pertama dimasukkan. Variabel i dideklrarasikan sebagai antrian.head, e dideklarasikan sebagai array antrian.data[antrian.head];. Maka kemudian perulangan, for(i=antrian.head; i<=antrian.tail-1;i++).  Maksudnya ketika antrian.head lebih kecil sama dengan antrian.tail-1, maka i++ yang berarti posisi antrian.head dinaikkan satu tingkat. Kemudian antrian data yang berada pada head dinaikkan indeks arraynya satu tingkat. Lalu posisi antrian.tail diturunkan satu tingkat. Kemudian menjalankan e, yang berarti mengembalikan posisi antrian.head ke indeks nya semula. 

f. Fungsi clear()

Fungsi clear() berfungsi untuk membersihkan antrian. Syntax nya adalah sebagai berikut :
void Clear()
{
antrian.head=antrian.tail=-1; printf("CLEAR");
}
Penjelasan :
Fungsi Clear() berfungsi mengosongkan antrian dengan mengembalikan posisi head dan tailnya keposisi -1, setelah itu akan muncul “CLEAR” berarti antrian telah dikosongkan.

g. Fungsi Tampil()

Fungsi Tampil() berfungsi untuk menampilkan isi antrian. Syntax nya adalah sebagai berikut:
void Tampil()
{
if(IsEmpty()==0)
{ for(int
i=antrian.head;i<=antrian.tail;i++)
{
printf("%d",antrian.data[i]);
}
}else printf("data kosong!\n"); }
Penjelasan :
Sebelum menampilkan isi antrian fungsi Tampil() akan melakukan pengecekkan ke fungsi IsEmpty(). 
Dalam fungsi Tampil() terdapat dua logika yaitu :
1.       Jika fungsi IsEmpty() bernilai salah (0) berarti antrian berisi data. Baru kemudian perulangan yang berfungsi untuk menampilkan data dijalankan.  
2.       Selain itu, berarti antrian tidak berisi data, maka akan tampil “data kosong!”. 

Untuk contoh program bisa di unduh dengan cara klik caption di bawah ini :

Saturday, March 16, 2019

Aplikasi Sederhana Kasus Perentalan CD





APLIKASI SEDERHANA BERDASARKAN KASUS
“ PERENTALAN CD FILM ”

                        Dalam blog ini akan memuat sebuah program aplikasi berdasarkan kasus “Perentalan CD, yang mana berarti didalam aplikasi ini akan memunculkan sebuah program yang dapat diaplikasikan secara langsung  di kehidupan nyata pada toko perentalan CD. Program ini di koding dengan syntax  kodinganan berbahasa C++. Dalam aplikasi ini, program berwujud project yang berarti file kodingan terpisah-pisah (console application / .cbp).  Pemrograman juga menggunakan beberapa jenis operasi pemrograman, yaitu :
1.                 Operasi penyeleksian kondisi, adalah Pernyataan percabangan (penyeleksian kondisi) digunakan untuk memecahkan persoalan untuk mengambil suatu keputusan dari beberapa pilihan sesuai kondisi yang dialami program. Substatment di dalam badan pernyataan mejmuk akan di eksekusi jika kebutuhan tersebut terpenuhi.
Alur pembacaan program akan mengalir dari atas kebawah, melakukan eksekusi pernyataan. Jika dalam program ditemukan pernyataan penyeleksian, sebelum komputer memilih dan mengeksekusi pilihan yang ada, program akan memeriksa kondisi pada saat pembacaan. Jika kondisi sesuai dengan keadaan program =, maka pilihan tersebut akan di eksekusi. Pada program kali ini hanya meggunakan “if else”.
2.               Operasi perulangan, merupakan struktur program yang dapat digunakan untuk melakukan statement  yang sama secara terus-menerus dengan cara yang yang efisien dan efektif selama kondisi tersebut terpenuhi, pada program ini menggunakan operasi perulangan “for” dan “goto”.
3.               Operasi Variabel  Larik  atau  lebih  dikenal dengan ARRAY adalah Tipe terstruktur yang terdiri dari sejumlah  komponen-komponen yang mempunyai tipe yang sama. Suatu Array mempunyai jumlah komponen yang banyaknya tetap. Banyaknya komponen dalam suatu larik ditunjukan oleh suatu indeks untuk membedakan variabel yang satu dengan variabel yang lainnya.
Array terbagi tiga jenis :
1.                 Array 1 dimensi
2.               Array 2 dimensi
3.               Array 3 dimensi
Pada program kali ini hanya menggunakan “array” 2 dimensi.
4.               Operasi fungsi, Fungsi (Function)  merupakan  blok dari kode yang dirancang untuk melaksanakan tugas khusus. Kegunaan dari fungsi ini adalah untuk:
-       Mengurangi pengulangan penulisan program yang berulangan atau sama.
-       Program menjadi lebih terstruktur, sehingga  mudah  dipahami  dan dapat lebih dikembangkan.
Fungsi-fungsi yang sudah kita kenal sebelumnya adalah fungsi main(), yang bersifat mutlak, karena fungsi ini program akan dimulai, sebagai contoh yang lainnya fungsi printf(), cout(), yang mempunyai tugas untuk menampilkan informasi atau data kelayar dan masih banyak lainnya.
5.               Akses file (dari C++ ke txt), adalah sebuah operasi yang akan menghubungkan atau mengkonversi hasil running program ke ekstensi yang berbeda.
6.               Struct atau struktur  digunakan untuk mengelompokan sejumlah data yang mempunyai tipe data yang berbeda. Variabel-variabel yang membentuk sebuah struktur dinamakan elemen struktur (struktur sama seperti Record), pada program ini menggunakan struktur array.
7.               Pointer, merupakan sebuah variabel yang berisi alamat dari variabel lain. Suatu pointer dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah.

a.               SYNTAX PROGRAM   :
1.                 File 1 / main, pada file ini berisi bagia penting penyusun operasi pemrograman :
#include<iostream>
#include<fstream>

using namespace std;

int l,t,harga[5],tot[5],jum[5],toti=0;
ofstream leto;

struct pel
{
    string id[5][3],ttp[4];
};

int rum(int s, int a)
{
    tot[l]=harga[l]*jum[l];
    return (tot[l]);
}
int en();int menu1();int gar1();int gar();


int main()
{
    pel lang;

    gar1();
    cout<<"\t\t\t\t\t\t\t\t\t| SELAMAT DATANG DI TOKO RENTAL CD |"<<endl;
    gar1();
    en();
    gar();
    cout<<" Hari : ";cin>>lang.ttp[0];
    cout<<" Tanggal : ";cin>>lang.ttp[1];
    cout<<" Bulan   : ";cin>>lang.ttp[2];
    cout<<" Tahun   : ";cin>>lang.ttp[3];
    gar();
    cout<<" Masukkan jumlah pelanggan : ";cin>>t;
    for(l=0;l<t;l++)
    {
        en();
        gar();
        cout<<" Pelanggan ke-"<<l+1<<endl;
        cout<<" Masukan nama kamu : ";cin>>lang.id[l][0];
        awal1:
            menu1();
            en();
            cout<<" Silahkan kamu masukan kode menu CD yang ingin kamu rental : ";cin>>lang.id[l][2];
            if(lang.id[l][2]=="1")
            {
                lang.id[l][1]=" Venom ";
                harga[l]=13400;
            }
            else if(lang.id[l][2]=="2")
            {
                lang.id[l][1]=" Avenger 4 ";
                harga[l]=15000;
            }
            else if(lang.id[l][2]=="3")
            {
                lang.id[l][1]=" Ant-Man ";
                harga[l]=13300;
            }
            else if(lang.id[l][2]=="4")
            {
                lang.id[l][1]= " Kimi no Wa ";
                harga[l]=7500;
            }
            else if(lang.id[l][2]=="5")
            {
                lang.id[l][1]= " Shinjitsu ";
                harga[l]=9700;
            }
            else
            {
                cout<<" CD yang kamu pilih enggak ada (-_-') "<<endl;
                cout<<" Silahkan kamu isi kembali dengan benar (^_^)"<<endl;
                goto awal1;
            }
            cout<<" Berapa hari kamu ingin me-rental CD tersebut : ";cin>>jum[l];
    }
    gar();

        leto<<endl;
        leto<<endl;
        leto<<"Data Hari : "<<lang.ttp[0]<<"/"<<lang.ttp[1]<<"-"<<lang.ttp[2]<<"-"<<lang.ttp[3]<<endl;
        leto<<"List Pe-rental CD hari ini ada : "<<t<<" orang."<<endl;
        leto<<endl;
        leto<<endl;
        leto<<"========================================================================="<<endl;
        leto<<"|No \t| Nama \t|CD Film \t|J.Hari |Harga CD/hari \t|Total Bayar \t|"<<endl;
        leto<<"========================================================================="<<endl;
        for(l=0;l<t;l++)
        {
            tot[l]=rum(harga[l],jum[l]);
            leto<<"|"<<l+1<<"\t|"<<lang.id[l][0]<<"\t|"<<lang.id[l][1]<<"\t|"<<jum[l]<<"\t| Rp. "<<harga[l]<<"\t| Rp. "<<tot[l]<<"\t|"<<endl;
            toti+=tot[l];
        }
        leto<<"========================================================================="<<endl;
        leto<<"|Total Pendapatan Hari Ini\t\t\t\t| Rp. "<<toti<<"\t|"<<endl;
        leto<<"========================================================================="<<endl;
        leto.close();
        //fungsi pointer di atas
        gar();
        leto.open("Proyek.txt");
        leto<<"\t\t\t\t\t\t\t\t\t===================================="<<endl;
        leto<<"\t\t\t\t\t\t\t\t\t| SELAMAT DATANG DI TOKO RENTAL CD |"<<endl;
        leto<<"\t\t\t\t\t\t\t\t\t===================================="<<endl;
        leto<<endl;
        leto<<endl;
        leto<<"Data Hari : "<<lang.ttp[0]<<"/"<<lang.ttp[1]<<"-"<<lang.ttp[2]<<"-"<<lang.ttp[3]<<endl;
        leto<<"List Pe-rental CD hari ini ada : "<<t<<" orang."<<endl;
        leto<<endl;
        leto<<endl;
        leto<<"========================================================================================="<<endl;
        leto<<"|No \t| Nama \t|CD Film \t|J.Hari |Harga CD/hari \t|Kode CD \t|Total Bayar \t|"<<endl;
        leto<<"========================================================================================="<<endl;
        for(l=0;l<t;l++)
        {
            tot[l]=rum(harga[l],jum[l]);
            leto<<"|"<<l+1<<"\t|"<<lang.id[l][0]<<"\t|"<<lang.id[l][1]<<"\t|"<<jum[l]<<"\t| Rp. "<<harga[l]<<"\t|"<<&lang.id[l][1];
            leto<<"\t| Rp. "<<tot[l]<<"\t|"<<endl;
            toti+=tot[l];
        }
        leto<<"========================================================================================="<<endl;
        leto<<"|Total Pendapatan Hari Ini\t\t\t\t\t\t| Rp. "<<toti<<"\t|"<<endl;
        leto<<"========================================================================================="<<endl;
        leto.close();
        if(leto)
        {
            cout<<" Untuk melihat hasil pe-rentalan kamu, silahkan di cek file txt-mu ^_^ "<<endl;
        }
        else
        {
            cout<<" Maaf ! Akses File kamu gagal, silahkan kamu ulangi lagi -_- "<<endl;
        }
    return 0;
}

2.               File 2 / syntax 1, pada file ini hanya berisi pelengkap dan perapian hasil program saja :
#include<iostream>

using namespace std;

gar()
{
    cout<<"==================================================================================="<<endl;
}
en()
{
    cout<<endl;
}
gar1()
{
    cout<<"\t\t\t\t\t\t\t\t\t===================================="<<endl;
}

3.               File 3 / syntax 2, pada file ini hanya berisi keluaran untuk list menu pilihan :
#include<iostream>

using namespace std;
menu1()
{
    cout<<" List cd film yang tersedia hari ini :"<<endl;
    cout<<" 1. Venom  = Rp. 13.400/hari"<<endl;
    cout<<" 2. Avenger 4 = Rp. 15.000/hari"<<endl;
    cout<<" 3. Ant-Man = Rp. 11.300/hari"<<endl;
    cout<<" 4. Kimi no Wa = Rp. 7.500/hari"<<endl;
    cout<<" 5. Shinjitsu = Rp. 9.700/hari"<<endl;
}

b.               Running

c.               Hasil Akses File







Unduh program dengan cara klik caption dibawah ini (program bebas virus) :

Unduh sekarang via google drive

Jika tidak bisa di unduh rar nya, bisa lewat caption dibawah ini :

Unduh folder nya via google drive

Algoritma Pemrograman : Graph dan Pohon

Graph Graf adalah kumpulan noktah (simpul) di dalam bidang dua dimensi yang dihubungkan dengan sekumpulan garis (sisi). Graph dapa...