Rabu, 20 Maret 2019

ALGORITMA DAN PEMROGRAMAN 2 "QUEUE"

Posted by angel's note on Maret 20, 2019 with No comments
Materi Queue (Antrian)

Pengertian Queue

Queue atau antrian merupakan suatu kumpulan data yang memiliki head/front dimana data dikeluarkan dan tali/rear dimana data dimasukkan. Aturan 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  di bank, orang yang datang lebih dahulu, maka akan terlebih dahulu dilayani oleh teller, dan akan selesai lebih dulu daripada orang-orang yang datang setelahnya.
   
     
      Deklarasi Queue dengan Array

      Proses pendeklarasian antrian adalah proses pembuatan struktur antrian dalam memori. Struktur antrian terdiri dari data dalam array, head untuk menunjukkan ujung dari antrian dan tail untuk menunjukkan akhir dari antrian.

#define MAX 5

#include <iostream>

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

      Inisialisasi Queue

Inisialisasi antrian adalah proses pembuatan suatu antrian kosong. Proses inisialisasi untuk antrian yang menggunakan array adalah dengan mengisi nilai field head dan tail dengan nilai 0 (nol) jika elemen pertama diawali dengan nomor 1. Kalau elemen pertama array dimulai dengan nilai 0 (nol) maka head dan tail diisi dengan nilai -1.
void Create()
{
    antrian.head=antrian.tail=-1;
}


Operasi Operasi Dasar dalam Queue

  1. .   Fungsi Create
    Sama pada stack, prosedur ini berfungsi untuk mengosongkan queue dengan cara meletakkan HEAD dan TAIL pada indeks array ke-(-1). Berikut deklarasi prosedur create pada queue:
    void create()
    {
       antrian.HEAD = -1;
       antrian.TAIL = -1;

    }
  2. Fungsi IsEmpty
    Sama seperti fungsinya pada stack, fungsi ini berfungsi untuk melakukan pengecekan terhadap queue, apakah queue tersebut kosong atau tidak. Jika queue tersebut kosong (artinya, HEAD dan TAIL berada pada posisi -1, atau bisa juga ketika HEAD > TAIL), maka fungsi akan mengembalikan nilai 1 (true), tetapi jika queue tersebut tidak kosong/ berisi (artinya, HEAD dan TAIL tidak berada pada posisi -1), maka fungsi akan mengembalikan nilai 0 (false). Berikut deklarasi fungsi IsEmpty:
    int IsEmpty(){
       if(antrian.HEAD=antrian.TAIL==-1)
    return 1;
       else
    return 0;
    }
  3. Fungsi IsFull
    Fungsi ini berfungsi untuk melakukan pengecekan terhadap queue, apakah queue tersebut penuh atau tidak. Jika queue tersebut penuh (artinya, TAIL berada pada posisi MAX), maka fungsi akan mengembalikan nilai 1 (true), tetapi jika queue tersebut tidak penuh (artinya, TAIL tidak berada pada posisi MAX), maka fungsi akan mengembalikan nilai 0 (false). Berikut deklarasi fungsi IsFull dalam Bahasa C:
    int IsFull(){
       if (antrian.TAIL == max-1)
    return 1;
       else
    return 0;
    }
  4. Fungsi EnQueue
    Fungsi ini digunakan untuk memasukkan sebuah data / nilai ke dalam queue. Sebelum sebuah data / nilai dimasukkan ke dalam queue, maka prosedur ini terlebih dahulu melakukan pengecekan terhadap posisi HEAD dan TAIL. Jika posisi HEAD dan TAIL masih berada pada indeks ke-(-1) (artinya queue masih kosong), maka prosedur ini akan menempatkan HEAD dan TAIL pada indeks ke-0 terlebih dahulu, baru setelah itu memasukkan data / nilai ke dalam array data queue. Namun, jika posisi HEAD dan TAIL tidak berada pada posisi ke-(-1), maka posisi TAIL yang akan dinaikkan satu level. Jadi, pada proses enqueue, TAIL-lah yang berjalan seiring masuknya data baru ke dalam antrian, sedangkan HEAD akan tetap pada posisi ke-0. Berikut deklarasi prosedur EnQueue:
    void enqueue()
    {
       if (IsEmpty()){
         antrian.HEAD=antrian.TAIL=0;
         cout<<”Masukkan data : “;
         cin>>antrian.data[antrian.TAIL];
       }
       else
       if(IsFull()){
         cout<<”ANTRIAN SUDAH PENUH!”;
       }
    }
  5. Fungsi DeQueue
    Fungsi ini digunakan untuk mengeluarkan atau membuang sebuah data/ nilai yang paling awal masuk (yang berada pada posisi HEAD, yakni yang paling depan dari antrian) ke dalam queue. Pekerjaan yang dilakukan oleh fungsi ini adalah menaikkan nilai HEAD satu level. Jadi, setiap satu kali data dikeluarkan, maka posisi HEAD naik bertambah satu level. Misalkan HEAD berada pada indeks ke-0, maka ketika akan mengeluarkan/ menghapus data pada posisi paling depan (pada posisi HEAD), prosedur ini akan menaikkan posisi HEAD ke indeks array ke-1. Atau dengan cara menggeser semua elemen antrian kedepan dan mengurangi TAIL dengan 1 penggeseran dilakukan dengan menggunakan looping. Berikut deklarasi fungsi DeQueue:
    int Dequeue(){
       int i;
       int e = antrian.data[antrian.HEAD];
       for(i=antrian.HEAD;i<=antrian.Tail-1;i++){
              antrian.data[i]=antrian.data[i+1];
       }Antrian.TAIL--;
       Return e;
    }
  6. Fungsi Clear
    Untuk menghapus elemen-elemen queue dengan cara membuat Tail dan Head= -1. Penghapusan elemen-elemen queue sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen queue tidak lagi terbaca. Berikut deklarasi fungsi clear:
    void clear(){
       antrian.HEAD = -1;
       antrian.TAIL = -1
            cout<<"Antrian sudah dikosongkan! ";
         }
  7. Fungsi Tampil
    Untuk menampilkan nilai-nilai elemen queue menggunakan looping dari HEAD sampai dengan TAIL. Berikut deklarasi fungsi tampil:
                void Tampil(){
       if(IsEmpty()){
              cout<<"Antrian kosong! ";
            }
            else {
              for(i=antrian.HEAD;i<=antrian.TAIL;i++)
             cout<<"Data pada antrian ke "<<i<<" = "<<antian.data[i]<<endl;
            }
         }

Contoh Program Queue

Berikut adalah contoh dari program queue: 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 5
#include <iostream>
using namespace std;

typedef struct
{
    int data [MAX];
    int head;
    int tail;
}Queue;
Queue antrian;
void Create()
{
    antrian.head=antrian.tail=-1;
}
int IsEmpty()
{
    if(antrian.tail==-1)
        return 1;
    else
        return 0;
}
int IsFull()
{
    if(antrian.tail==MAX-1)
    return 1;
    else
    return 0;
}
void Enqueue(int data)//menginput sebah dta
{
    if(IsEmpty()==1)
    {
        antrian.head=antrian.tail=0;
        antrian.data[antrian.tail]=data;
        printf("%d Data Telah Masuk !",antrian.data[antrian.tail]);
    }
    else
    if(IsFull()==0)
    {
        antrian.tail=antrian.tail+1;
        antrian.data[antrian.tail]=data;
        printf("%d masuk !", antrian.data[antrian.tail]);
    }
}
int Dequeue()
{
    int i;
    int e=antrian.data[antrian.head];
    for(i=antrian.head;i<=antrian.tail-1;i++)
    {
        antrian.data[i]=antrian.data[i+1];
    }
antrian.tail--;
return e;
}
void Clear()
{
    antrian.head=antrian.tail=-1;
    printf("Data Clear");
}
void Tampil()
{
    if (IsEmpty()==0)
    {
        for (int i=antrian.head;i<=antrian.tail; i++)
        {
            printf("%d ",antrian.data[i]);
        }
    }
    else
    {
        printf("Data Kosong\n");
    }
}
int main()
{
    int pil;
    int data;
    Create();
    do
    {
        system("cls");
        printf ("\n MENU PILIHAN PROGRAM QUEUE\n");
        printf ("1. Enqueue\n");
        printf ("2. Dequeue\n");
        printf ("3. Tampil\n");
        printf ("4. Clear\n");
        printf ("5. Keluar\n");
        printf ("Masukkan Pilihan Anda : ");
        scanf("%d",&pil);
        switch(pil)
        {
            case 1:
            printf("Data : ");
            scanf("%d",&data);
            Enqueue(data);
            break;
            case 2:
            printf("Elemen yang keluar : %d", Dequeue());
            break;
            case 3:
            Tampil();
            break;
            case 4:
            Clear();
            break;
            case 5:
            break;
        }
        getch();
    } while(pil!=5);
}


Referensi: 


Kamis, 14 Maret 2019

ALGORITMA DAN PEMROGRAMAN 2 "KUIS KASUS PENJUALAN KOSMETIK"

Posted by angel's note on Maret 14, 2019 with No comments
KUIS KASUS PENJUALAN KOSMETIK 


A. KASUS
     
Pada kali ini saya akan menjelaskan program penjualan kosmetik yang telah saya buat sebelumnya dengan operasi struct, struct array dan pointer. Berikut adalah menu kosmetik yang tersedia di program saya.Menu di bawah ini muncul setelah kita memasukkan identitas kita seperti nama dan nomor handphone.



NO
JENIS KOSMETIK
HARGA
DISKON
1
Mud Mask Jafra Bib & Headband
Rp 290.000
10%
2
Jafra Mattifying Cleanser   
Rp 107.000
10%
3
Serum Royal Jelly Lift Concentrate               
Rp 899.000
10%
4
Royal Olive Exfol       
Rp 259.000
10%
5
Royal Olive Bath Shower Gel             
Rp 149.000
10%
6
Cream Concealer Light                             
Rp 129.000
10%
7
Cream Jafra Jande ED  
Rp 509.000
10%
8
Lipstik Jafra Lip Polish Pinky                         
Rp 149.000
10%
9
Royal Jelly Eye Concentrate Capsules  
Rp 559.000
10%
10
Long Wear LipGloss Infinite Red    
Rp 149.000
10%



B. PROGRAM
      
Di bawah ini adalah listing program, hasil running dan akses file dari kasus penjualan kosmetik yang saya buat menggunakan struct, struct array dan pointer.

  • LISTING PROGRAM
#include <iostream>
#include <string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<fstream>
using namespace std;

struct identitas
{
  char nama[20];
  char nohp[50];
  int jlhbarang;
  int pil, harga, diskon;
  char lagi;

}dt;

    void header()
    {
        cout<<"======================================================"<<endl;
        cout<<"|                                                   ANGEL'S SHOP                                          |"<<endl;
        cout<<"|                               SELAMAT DATANG DI TOKO KAMI                         |"<<endl;
        cout<<"|                                        SELAMAT BERBELANJA                                    |"<<endl;
        cout<<"======================================================"<<endl;
    }

    void footer()
    {
        cout<<"===================================================== "<<endl;
        cout<<"|                                                                                                                       |"<<endl;
        cout<<"|                       TERIMA KASIH ATAS KUNJUNGAN ANDA                   |"<<endl;
        cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++ "<<endl;
    }

    void Jafra_Mudmask_BibHeadband ()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=290000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;
}
    void  Jafra_Mattifying_Cleanser()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=107000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;
}
    void SerumRJ_Lift_Concentrate()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=899000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;
}
    void Royal_Olive_Exfol ()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=259000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;
}
    void RoyalOlive_Bath_Shower_Gel  ()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=149000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;
}
    void Cream_Concealer_Light ()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=129000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;
}
    void Cream_Jafra_Jande_ED ()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=509000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;

}
    void Lipstik_Jafra_LipPolishPinky  ()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=149000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;
}
    void RoyalJelly_EyeConcentrate_Capsules ()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=559000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;
}
    void LongWear_LipGloss_InfiniteRed  ()
{
    cout<<" Masukkan Jumlah Barang : "; cin>>dt.jlhbarang;
    dt.harga=149000*dt.jlhbarang;
    cout<<" Total Harga adalah : "<<dt.harga<<endl;
    dt.diskon=dt.harga*10/100;
    cout<<" Total Pembayaran adalah : "<<dt.harga-dt.diskon<<endl;

}

int main()
{
    header ();
    cout<<endl;
    cout<<endl;
    cout<<"----------------------------------------------------------------------------------"<<endl;
    cout<<"|                                            Isi Identitas Anda                                   |"<<endl;
    cout<<"----------------------------------------------------------------------------------"<<endl;

    cout<<"Data Pelanggan";
    cout<<endl;
    cout<<"Nama : ";
    cin.getline(dt.nama,sizeof(dt.nama));
    cout<<"Alamat dari nama pelanggan adalah : "<<&dt.nama<<endl;
    atas1:
    cout<<"Nomor Handphone: ";
    cin.getline(dt.nohp,sizeof(dt.nohp));
    if(strlen(dt.nohp) > 10 && strlen(dt.nohp) <= 12)
    {
        cout<<"Nomor yang Anda masukkan valid \n";
    }
    else
    {
        cout<<"Nomor yang Anda masukkan tidak valid. Silahkan masukkan kembali :)\n";
        goto atas1;
    }
    getch();

    system("cls");

    header();

    cout<<endl;

    struct kosmetik
    {
        string DaftarHargaJafra [10][3]=
    {{" 1. Mud Mask Jafra Bib & Headband ","        Rp 290.000","  10%"},
    {" 2. Jafra_Mattifying_Cleanser","                Rp 107.000","  10%"},
    {" 3. Serum Royal Jelly Lift_Concentrate","        Rp 899.000","  10%"},
    {" 4. Royal Olive Exfol","                        Rp 259.000","  10%"},
    {" 5. Royal Olive Bath Shower Gel","                Rp 149.000","  10%"},
    {" 6. Cream Concealer Light","                Rp 129.000","  10%"},
    {" 7. Cream Jafra Jande ED","                Rp 509.000","  10%"},
    {" 8. Lipstik Jafra Lip Polish Pinky","        Rp 149.000","  10%"},
    {" 9. Royal Jelly Eye Concentrate Capsules","Rp 559.000","  10%"},
    {" 10.Long Wear LipGloss Infinite Red ","        Rp 149.000","  10%"},};
    }jkm;

    kembali:
    cout<<"======================================================"<<endl;
    cout<<"====================DAFTAR HARGA JAFRA=============="<<endl;
    cout<<"======================================================="<<endl;
    cout<<"\tJENIS KOSMETIK\t\t\t\t"<<"HARGA\t\t"<<"DISKON\t\t"<<endl;
    cout<<"----------------------------------------------------------------------"<<endl;
    for (int i=0;i<10;i++)
    {
        for (int j=0;j<3;j++)
        {
        cout <<jkm.DaftarHargaJafra[i][j]<<"\t";
        }
        cout<<endl;
    }
    cout<<"======================================================"<<endl;

    cout<<"\n Silahkan Pilih : "; cin>>dt.pil;

    if (dt.pil==1)
    {
      Jafra_Mudmask_BibHeadband();
    }
    else if (dt.pil==2)
    {
      Jafra_Mattifying_Cleanser() ;
    }
    else if (dt.pil==3)
    {
      SerumRJ_Lift_Concentrate() ;
    }
    else if (dt.pil==4)
    {
      Royal_Olive_Exfol() ;
    }
    else if (dt.pil==5)
    {
      RoyalOlive_Bath_Shower_Gel();
    }
    else if (dt.pil==6)
    {
      Cream_Concealer_Light();
    }
    else if (dt.pil==7)
    {
      Cream_Jafra_Jande_ED() ;
    }
    else if (dt.pil==8)
    {
      Lipstik_Jafra_LipPolishPinky() ;
    }
    else if (dt.pil==9)
    {
      RoyalJelly_EyeConcentrate_Capsules() ;
    }
    else if (dt.pil==10)
    {
      LongWear_LipGloss_InfiniteRed() ;
    }
    if (!dt.pil)
    {
        cout<<"pilihan yang Anda pilih tidak ditemukan"<<endl;
    }

cout<<endl;
cout<<endl;

lagi:
    cout<<"Apakah Ingin Membeli Lagi? [Y/T] : ";cin>>dt.lagi;
        if (dt.lagi=='Y' || dt.lagi == 'y')
        {
            cout<<endl;
            goto kembali;
        }
        else if(dt.lagi=='T' || dt.lagi == 't')
        {
            cout<<"Terima kasih telah berbelanja :) "<<endl;
            cout<<"Silahkan datang kembali:) "<<endl;
            cout<<endl;
            footer();

    ofstream myfile ("AngelShop.txt");
    if(myfile.is_open())
    {
        myfile<<"====================================================="<<endl;
        myfile<<"|                                        ANGEL'S SHOP                                                   |"<<endl;
        myfile<<"|                         SELAMAT DATANG DI TOKO KAMI                             |"<<endl;
        myfile<<"|                                  SELAMAT BEBBELANJA                                        |"<<endl;
        myfile<<"==============================================   ======"<<endl;
        myfile<<endl<<endl;
        myfile<<"Selamat pembelian kosmetik jafra atas nama "<<dt.nama<<" telah berhasil"<<endl;
        myfile<<"         dengan jumlah kosmetik sebanyak "<<dt.jlhbarang<<"buah kosmetik"<<endl;
        myfile<<"         Dengan total pembayaran "<<dt.harga-dt.diskon<<endl;
        myfile<<"====================================================="<<endl;
        myfile<<"|Terima kasih telah berbelanja di toko kami :)                                              |"<<endl;
        myfile<<"|Silahkan datang kembali :)                                                                           |"<<endl;
        myfile<<endl<<endl;
        myfile<<"|                     TERIMA KASIH ATAS KUNJUNGAN ANDA                    |"<<endl;
        myfile<<"===============================================           ="<<endl;
        myfile.close();
    }
    else cout<<"Gagal membuka file";
    }
    return 0;
}


  • RUNNING





  • AKSES FILE 



C. PENJELASAN PROGRAM SECARA UMUM
   
Program diatas akan saya jelaskan sebagai berikut:
Bagian baris 1-6 dari program tersebut adalah bagian library. Using namespace std berfungsi untuk mewakili penggunaan std pada program. Nah, dibaris yang ke 9-17 adalah operasi struct identitas yang berisi tipe data dan variabel serta objek dari struct tersebut.Objek dari struct identitas ini adalah dt. Operasi struct tersebut dapat berjalan apabila setiap variabel yang berada dalam kurung kurawal ditambahi dt di awalnya. Contoh dt.nama. Selanjutnya baris 19-34 itu adalah prosedur untuk bagian atas dan bawah program. Selanjutnya baris 36-125 merupakan prosedur untuk memasukkan jumlah barang setiap produk dan rumus hitungan untuk total bayarnya. Selanjutnya, baris 137-153 disini memasukkan nama dan nomor handphone. Jika kita salah memasukkan nomor handphone program akan  menampilkan tulisan nomor yang anda masukkan tidak valid. Selain itu terdapat operasi pointer yang berfungsi untuk menentukan alamat dari nama yang telah dimasukkan. Nah, dibaris yang ke 162-175 adalah operasi struct kosmetik yang berisi tipe data dan variabel serta objek dari struct tersebut.Objek dari struct kosmetik ini adalah jkm. Operasi struct tersebut dapat berjalan apabila setiap variabel yang berada dalam kurung kurawal ditambahi dt di awalnya. Contoh jkm.DaftarHargaJafra. Di baris 180-193 terdapat for yang berfungsi untuk membuat tabel daftar harga jafra memakai array. Dalam baris 196-242 , disini adalah operasi if else untuk pilihan kosmetik. Jika kita memilih selain yang ada di daftar, program akan menampilkan pilihan yang anda pilih tidak ditemukan. Selanjutnya, baris 250-260 merupakan fungsi untuk mengulang program atau tidak. Jika ya program akan diulang dan jika tidak maka program akan terhenti. Dan yang terakhir, baris 263-284 merupakan fungsi untuk menampilkan file dari program yang telah dibuat.

Sekian penjelasan dari saya tentang kasus penjualan kosmetik dan program yang telah saya buat menggunakan struct, struct array dan pointer. Terima kasih. Semoga bermanfaat…. :) :)