Kamis, 14 April 2016

sorting

Sorting mungkin salah satu algoritma penting yang dilakukan oleh komputer dan tentunya satu dari topik yang paling diselidiki dalam desain algoritma. Beberapa algoritma Sorting telah ditemukan dan secara umum dideskripsikan dan dianalisa dalam Buku teks Algoritma dan Data Struktur [Weiss, Aho] atau dalam standar referensi kerja [Knuth, van Leeuwen]. algoritma Sorting dapat dibagi kedalam perbandingan dan distribusi berdasarkan algoritma.
Perbandingan berdasarkan metode dengan hanya membandingkan elemen satu sama lain dalam suatu array yang ingin kita urutkan. Dalam  ilmu  komputer  dan  matematika,  algoritma  sorting  adalah  suatu  algoritma  yang meletakkan  elemen  dari  sebuah list  dalam suatu urutan tertentu. Urutan  yang  paling sering digunakan  adalah  urutan  secara  numeric  dan  urutan  lexicographical. Sorting  yang  efisien mempunyai  peranan  penting  untuk  mengoptimasi  penggunaan  dari  algoritma-algoritma  lain (seperti search dan merge) yang membutuhkan list terurut untuk bekerja dengan benar; sorting yang efisien pun seringkali berguna untuk canonicalizing data dan untuk menghasilkan output yang dapat dibaca oleh manusia. Lebih jauh lagi, ouputan harus memenuhi dua kondisi berikut :
• Output  tidak  dalam  bentuk  terurut  menurun  (tiap  elemen  tidak  lebih  kecil  daripada elemen sebelumnya).
• Output adalah suatu permutasi, atau merupakan pengurutan ulang dari input.
Algoritma sorting merupakan masalah yang umum dalam materi pengenalan ilmu komputer, dimana tedapat banyak algoritma untuk setiap masalah yang menyediakan pengenalan yang baik untuk berbagai macam konsep inti algoritma, seperti notasi big O, algoritma divide-and-conquer, struktur data, algoritma random, analisis best, worst dan average case, time-space-tradeoff dan lower bounds. Beberapa contoh algoritma sorting adalah Quick Sort, Selection Sort, Bubble Sort, Merge Sort, Radix Sort. Algoritma yang akan dibahas lebih lanjut dalam dokumentasi ini adalah algoritma Merge Sort. Algoritma Merge Sort ialah algoritma pengurutan yang berdasarkan pada strategi divide and conquer. Algoritma ini terdiri dari dua bagian utama, pembagian list yang diberikan untuk di-sort ke dalam beberapa sublist yang lebih kecil, dan sort (mengurutkan) dan merge (menggabungkan) sublist-sublist  yang  lebih  kecil  ke  dalam  list  hasil  yang  sudah  diurutkan.  Pembagian  bisa dikatakan  cukup  mudah  karena  sublist-sublist  tersebut  dibagi  ke  dalam  dua  sublist  yang ukurannya adalah setengah dari ukuran semula. Hal ini terus diulang sampai sublist itu cukup kecil untuk di-sort secara efisien (umumnya telah terdiri dari satu atau dua elemen). Dalam langkah merge dua sublist disatukan kembali dan diurutkan pada saat yang sama.
Dalam kebanyakan kasus MergeSort diimplementasikan secara rekursif dengan pendekatan top-down tapi menggunakan pendekatan bottom-up secara iterative pun dapat dibangun .
Algoritma untuk merge sort ialah sebagai berikut :
1. Untuk kasus n=1, maka table a sudah terurut sendirinya (langkah solve)
2. Untuk kasus n>1, maka :
a. DIVIDE: bagi table a menjadi dua bagian, bagian kiri dan bagian kanan,   masingmasing bagian berukuran n/2 elemen.
b. CONQUER:  secara  rekursif,  terapkan  algoritma  D-and-C  pada  masing      masingmbagian. 
c. MERGE: gabung hasil pengurutan kedua bagian sehingga diperoleh table a   yangterurut.
Sorting method dikatakan stable jika sorting method tersebut dapat menjaga keterurutan datadata yang sama (duplikat) sesuai dengan kondisi aslinya (sebelum dilakukan sorting). Merge sort merupakan salah satu algoritma sort yang stable.
Ilustrasi :
Pentingnya Stable sort Pada kasus tertentu dimana keterurutan data menjadi suatu prioritas utama stable sort sangat berguna. Dengan menggunakan merge sort maka data yang telah terurut dijamin merupakan data yang stable.
Kesimpulan
MergeSort adalah algoritma yang berdasarkan strategi divide-and-conquer. Algoritma ini tediri dari dua bagian utama, yaitu bagian pembagian list menjadi sublist-sublist yang lebih kecil dan bagian sort (pengurutan) dan merge (penggabungan) pada sublist-sublist tersebut. Algoritma MergeSort merupakan salah satu contoh algoritma yang stable ini.
BestCase  untuk algoritma  MergeSort ini  yaitu  pada saat  data  inputan berupa  data  yang terurut  baik  ascending  maupun  descending.  Sedangkan  WorstCasenya  yaitu  pada  saat  data inputan berupa data yang acak (random). Tetapi untuk kompleksitas waktu asimptotiknya sama yaitu, yaitu sebesar :
O(n 2 log n).


Senin, 04 Januari 2016

Pengertian Tree dalam Struktur Data

                Pengertian Tree dalam Struktur Data
                      Merupakan salat Satu bentuk Struktur Data tidak linier Yang menggambarkanhubungan Yang bersifat hirarkis (hubungan one to many) antara elemen-elemen.Tree Bisa didefinisikan sebagai kumpulan Simpul / node dengan Satu elemenKHUSUS Yang disebut root Dan Node lainnya terbagi menjadi Himpunan-Himpunan Yang tak saling berhubungan Satu sama lainnya (disebut subtree). Untukjelasnya, di Bawah Akan diuraikan istilah-istilah umum dalam tree.
  Parent : predecssor satu level di atas suatu node.
  Child : successor satu level di bawah suatu node.
  Sibling : node-node yang memiliki parent yang sama dengan suatu node.
  Subtree : bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut.
  Size : banyaknya node dalam suatu tree.
  Height : banyaknya tingkatan/level dalam suatu tree.
  Root : satu-satunya node khusus dalam tree yang tak punya predecssor.
  Leaf : node-node dalam tree yang tak memiliki seccessor.
  Degree : banyaknya child yang dimiliki suatu node.

Pengertian Binaary Tree dalam Struktur data  Pohonbiner adalah pohon dengan syarat bahwa tiap node hanya memiliki boleh maksimal duasubtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut, maka tiap nodedalam binary tree hanya boleh memiliki paling banyak dua anak/child.
Gambar Binary Tree



Jumlah maksimum node pada setiap tingkat adalah 2n, Node pada binary treemaksimumnya berjumlah 2n-1.

Tree merupakan salah satu bentuk struktur data tidak linear  yang menggambarkan hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang disebut Root dan node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lainnya (disebut subtree).

istilah-istilah umum dalam tree
Untuk jelasnya, di bawah akan diuraikan istilah-istilah umum dalam tree :
a) Prodecessor : node yang berada diatas node tertentu.
b) Successor : node yang berada di bawah node tertentu.
c) Ancestor : seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama.
d) Descendant : seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang sama.
e) Parent : predecssor satu level di atas suatu node.
f) Child : successor satu level di bawah suatu node.
g) Sibling : node-node yang memiliki parent yang sama dengan suatu node.
h) Subtree : bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut.
i) Size : banyaknya node dalam suatu tree.
j) Height : banyaknya tingkatan/level dalam suatu tree.
k) Root : satu-satunya node khusus dalam tree yang tak punya predecssor.
l) Leaf : node-node dalam tree yang tak memiliki seccessor.
m) Degree : banyaknya child yang dimiliki suatu node.

contoh program tree
uses crt;
Type
Tree = ^Simpul;
Simpul = Record
Info : char;
Kiri : Tree;
Kanan : Tree;
End;

Function BARU(Hrf : Char) : Tree;
Var Temp : Tree;
Begin
New(Temp);
Temp^.Info := Hrf;
Temp^.Kiri := NIL; Temp^.Kanan := NIL;
BARU := Temp;
End;

Procedure MASUK(Var Pohon : Tree; Hrf : Char);
Begin
If Pohon = NIL Then
Pohon := BARU(Hrf)
Else
Begin
If Pohon^.Info > Hrf then
MASUK(Pohon^.Kiri,Hrf)
Else If Pohon^.Info < Hrf then
MASUK(Pohon^.Kanan,Hrf)
Else
Writeln('Karakter', Hrf, 'Sudah ada di Tree');
End;
End;

Procedure PREORDER(Temp : Tree);
Begin
If Temp <> NIL Then
Begin
Write(Temp^.Info,' ');
PREORDER(Temp^.Kiri);
PREORDER(Temp^.Kanan);
End;
End;

Procedure INORDER(Temp : Tree);
Begin
If Temp <> NIL Then
Begin
INORDER(Temp^.Kiri);
Write(Temp^.Info,' ');
INORDER(Temp^.Kanan);
End;
End;

AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk tree dapat dipersingkat dan disederhanakan.
 Gambar AVL Tree

Penambahan node di AVL Tree
                                  Untuk menjaga tree tetap imbang, setelah penyisipan sebuah node, dilakukan pemeriksaan dari node baru → root. Node pertama yang memiliki |balance factor| > 1 diseimbangkan. Proses penyeimbangan dilakukan dengan:Single rotation dan Double rotation

Single Rotation

                                Single rotation dilakukan bila kondisi AVL tree waktu akan ditambahkan node baru dan posisi node baru seperti pada gambar 2. T1, T2, dan T3 adalah subtree yang urutannya harus seperti demikian serta height- nya harus sama (≥ 0). Hal ini juga berlaku untuk AVL tree yang merupakan citra cermin (mirror image) gambar 2.

Sebutkan beberapa jenis tree yang memiliki sifat khusus
v Create : Membentuk binary tree baru yang masih kosong.
                v Clear : Mengosongkan binary tree yang sudah ada.
                v Empty : Function untuk memeriksa apakah binary tree masih kosong.
                v Insert : Memasukkan sebuah node ke dalam tree. Ada tiga pilihan insert: sebagai root, left child, atau right child. Khusus insert sebagai root, tree harus dalam keadaan kosong.
                v Find : Mencari root, parent, left child, atau right child dari suatu node. (Tree tak boleh kosong)
                v Update : Mengubah isi dari node yang ditunjuk oleh pointer current. (Tree tidak boleh kosong)
                v Retrieve : Mengetahui isi dari node yang ditunjuk pointer current. (Tree tidak boleh kosong)
v DeleteSub : Menghapus sebuah subtree (node beserta seluruh descendantnya) yang ditunjuk current. Tree tak boleh kosong. Setelah itu pointer current akan berpindah ke parent dari node yang dihapus.
v Characteristic : Mengetahui karakteristik dari suatu tree, yakni : size, height, serta average lengthnya. Tree tidak boleh kosong. (Average Length = [jumlahNodeLvl1*1+jmlNodeLvl2*2+…+jmlNodeLvln*n]/Size)
v Traverse : Mengunjungi seluruh node-node pada tree, masing-masing sekali. Hasilnya adalah urutan informasi secara linier yang tersimpan dalam tree. Adatiga cara traverse : Pre Order, In Order, dan Post Order.



PENGERTIAN QUEUE



PENJELASAN TENTANG QUEUE
·                      PENGERTIAN QUEUE
         Queue pada Struktur Data atau antrian adalah sekumpulan data yang mana penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan atau front) Queue atau antrian prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out). Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, ex: antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll. Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi waktu(time-sharing computer system) dimana ada sejumlah pemakai yang akan menggunakan sistem tersebut secara serempak.

        Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel Head dan Tail ( depan/front, belakang/rear).
 
§  Karakteristik Queue atau antrian : 
§  1. elemen antrian 
§  2. front (elemen terdepan antrian) 
§  3. tail (elemen terakhir) 
§  4. jumlah elemen pada antrian 
§  5. status antrian Operasi pada Queue atau antrian 

§  1. tambah(menambah item pada belakang antrian) 
§  2. hapus (menghapus elemen depan dari antrian) 
§  3. kosong( mendeteksi apakah pada antrian mengandung elemen atau tidak) 

    .   Enqueue Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu .
 5. Dequeue() Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1 Penggeseran dilakukan dengan menggunakan looping.
   6. Clear() Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca .
   7. Tampil() Untuk menampilkan nilai-nilai elemen Antrian Menggunakan   looping dari head s/d tail 
·                        IMPLEMENTASI QUEUE DALAM BAHASA PASCAL
§  Implementasi dalam bahasa Pascal dapat dilakukan dengan memanfaatkan struktur data record dan array. Array dipergunakan untuk menyimpan elemen-elemen yang dimasukkan. Selain itu diperlukan pula suatu variabel untuk mencatat banyaknya elemen yang ada di dalam array. Pada implementasi di bawah ini:
§  konstanta maxelm menyatakan banyaknya elemen maksimum yang dapat ditampung oleh queue  typeelemen adalah tipe data yang akan disimpan di dalam queue(bisa integer, word, real, boolean, char , string atau lainnya banyak adalah field yang menyatakan banyaknya elemen dalam queue saat itu  queue diimplementasikan sebagai array linier dengan memandang bahwa elemen terdepan selalu berada pada sel pertama (implementasi fisik), sehingga bila terjadi pengambilan satu elemen maka semua elemen di belakang elemen terambil (bila ada) harus digeser ke depan satu langkah .
  Deklarasi tipe untuk antrian (queue):
type antrian= record
   banyak :0..maxelm;
   elemen : array[1..maxelm] of typeelemen;
end;
§  Selain prosedur untuk ADDQ dan DELQ, kita dapat pula menambahkan sejumlah fungsi untuk membantu penanganan kesalahan diantaranya adalah fungsi PENUHQ (untuk mengecek apakah antrian penuh) fungsi KOSONGQ (untuk mengecek apakah antrian kosong) dan fungsi SIZEQ (untuk mengetahui banyaknya elemen di dalam queue). Masing-masing sub program di atas dapat disajikan pseudocode-nya sebagai berikut.
       
Procedure Inisialisasi(var q : antrian);
begin
  Q. banyak ¬ 0
end;
Function PENUHQ(q : antrian): boolean;
begin
 Jika Q.banyak = maxelm maka PENUHQ ¬ true
 else PENUHQ¬false
end;
Function KOSONGQ(q : antrian):boolean;
begin
 If Q.banyak = 0 then KOSONGQ ¬ true
 else KOSONGQ ¬ false
end;
§  Procedure ADDQ(data : tipeelemen; var q : antrian);
begin
 If not PENUHQ(Q) then
 begin
§  Q.banyak¬ Q.banyak+1
§  Q.elemen[Q.banyak] ¬ data
§   end
 else
   Tampilkan pesan kesalahan "Antrian "
P
end;
Procedure DELQ(var q : antrian; var data : typeelemen);
begin
 If not KOSONGS(Q) then
 begin
§  data ¬Q.elemen[1]
§  for i:= 2 to Q.banyak
Q.elemen[i-1] ¬ Q.elemen[i]
§  Q.banyak ¬ Q.banyak- 1
§   end
 else
   Tampilkan pesan kesalahan "Antrian kosong"
End;
2.    CONTOH QUEUE DALAM KEHIDUPAN SEHARI – HARI    
      Dalam kehidupan sehari-hari kita bisa dapati melalui penerapan pembelian tiket kereta api, tiket pesawat, tiket kapal laut, pembayaran tiket tol, pembayaran listrik, pembayaran air, dan lain sebagainya. Walaupun berbeda implementasi, Konsep struktur data queue adalah First In First Out(FIFO). Queue setidaknya harus memiliki operasi-operasi sebagai berikut:
  1. EnQueue : Masukkan data ke dalam antrian
  2.  DeQueue : Mengeluarkan data terdepan dari antrian
  3.  Clear : Menghapus seluruh antrian.
  4. IsEmpty : Memeriksa apakah antrian kosong
  5. IsFull : Memeriksa apakah antrian penuh
       Dalam pembelian tiket kereta api:
Enqueue : Seseorang membeli tiket melalui tempat pembayaran tiket yang disediakan.
Dequeue : Setelah membeli tiket, langsung menuju tempat penungguan kereta, dengan sebelumnya petugas memeriksa cek tiket tersebut.
Clear : Pembeli tiket tersebut telah terhapus dari antrian karena sudah melewati pembayaran administrasi tersebut.
IsEmpty : Petugas tiket Kereta melihat tidak ada lagi yang ingin membeli tiket kereta.
IsFull : Petugas Tiket Kereta melihat masih ada pembeli tiket kereta.
          Contohnya yaitu antrian pada kasir pada sebuah bank. Ketika seorang pelanggan datang, akan akan maju. Jika kita ada di antrian kedua, maka kita akan menunggu antrian pertama melakukan prosesnya. Nah, ketika selesai proses dari antrian pertama dia akan pergi, dan menuju ke belakang dari antrian. Setiap pelanggan dilayani, antrian yang berada di depan giliran kita untuk maju untuk melakukan proses. Begitu juga arti dari antrian dalam bahasan kali ini, jika pengantri pertama datang maka dia juga yang akan keluar pertama kali atau bahasa kerennya tu FIFO ( First In First Out ).
     Kondisi antrian yang menjadi perhatian :
 `1,  PENUH
         Bila elemen pada antrian mencapai kapasitas maksimum antrian, maka tidak mungkin dilakukan penambahan ke antrian. Penambahan elemen menyebabkan kondisi kesalahan overfl
   2.  KOSONG
        Bila tidak ada elemen pada antrian, maka tidak mungkin dilakukan pengambilan elemen dari antrian. Pengambilan elemen menyebabkan kondisi kesalahan overflow.
       KARAKTER QUEUE ATAU ANTRIAN
       1.  Adanya elemen antrian yaitu item – item data yang terdapat pada              element antrian.
      2. Adanya front ( elemen antrian )
      3. Adanya tail ( elemen terhkir )
      4. Status antrian
      5. Adanya jumlah elemen pada antrian 

   4.   PERBEDAAN QUEUE DAN STACK
Ø           Sementara Queue memakai siste FIFO atau first in first out (yang pertama masuk akan keluar pertama, begitu pula yang masuk terakhir akan keluar terakhir) yang apabila kita menghapus / mengeluarkan data, maka data yang pertamalah yang akan terhapus/ keluar terdahulu dan data yang terakhir akan terhapus/ keluar terakhir.
Ø      Stack memakai sistem LIFO atau last in first out (yang pertama masuk akan keluar terakhir, begitu pula yang terakhir masuk akan keluar pertama kali) yang apabila kita mengahapus/ keluar data, maka data yang terakhirlah yang akan terhapus/ keluar terlebih dahulu.
     MANFAAT  QUEUE  :
       A.    Digunakan sistem operasi untuk mengatur eksekusif task da) lam suatu  sistem untuk mencapai  pelakuan yang adil.
     B.    Untuk milbox  dalam komunikasi antar proses
    C..   Untuk buffer dalam mekanisme priinstpoler komunikasi data
    D.   Untuk simulasi dan modeling ( misalnya sistem modeling pengendalian 
      lalu lintas udara )
   E.   Simulasi antar dunia nyata  , antara lain :
          1.  antrian dalam pembelian tiket  dalam bus , dll
          2.  antrian mobil depan gerbang  jalan toll
          3. antrian kendaraan di jalan umum
   5.    OPERASI-OPERASI PADA QUEUE   :
a.     Mengecek apakah queue sudah penuh
b.     Mengecek apakah queue sudah kosong
c.      Memasukkan elemen ke dalam queue  atau inqueue
d.      Menghapus elemen queue  atau dequeue ( delete queue
      CONTOH PROGRAM QUEUE C++
        #include<iostream.h>
         #include<conio.h>
         #include<studio.h >
   #define max 10
      typedefstruct
{
 int data[max];
 
int head;
 
int tail;
}Queue;
Queue antrian;

void create()
{

void create()
 antrian.head=antrian.tail=-1;
}
intIsEmpty()
{
 if(antrian.tail==-1)
   return 1;
   else
   return 0;
}
 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<<"Ruangan Penuh<<”Masuk;
   
cout<<data<<"GaBisaMasuk!
   }
}
void Dequeue()
{
inti;
{
inti;
   
int e = antrian.data[antrian.head];
   if(
antrian.taill==-1)
   {
cout<<"Ga ada antrian... Data Kosong"<<endI;
   }
   else
   {
    for(
i=antrian.head.i <antrian.tail-1;i++)
      {
     
antrian.data[i]=antrian.data [i+1];
      }
     
antrian.tail--;
     
cout<<"Data yang keluarterlebih dulu = "<<e<<endI;
   }
}
void clear()
{
{
antrian.head=antrian.tail =-1;
   
cout<<"Duh Lega,Ruangajagasumpek... "<<endI;
   
cout<<"Data Clear";
}
void
tampil()
{
 if(
IsEmpty ()==0)
   {

          cout<<"Data DalamAntrian"<<endl;
      cout<<"=====================================";
      cout<<endl;
      for(inti=antrian.head;i<=antrian.tail;i++)
      {
       cout<<"| " <<antrian.data[i]<<" |";
      }
   }
   else
   {
   
cout<< Gaadaantrian ...Data kosong
";
   }
}
void main()
{
intpil;
   int data;
   create();
   do
   {
  cout<<"ImplementasiAntriandenganStruct"<<endl;
      cout<<"==========================================";
      cout<<endl;
      cout<<"1. Enqueue"<<endl;
      cout<<"2.Dqueue "<<endl;
      cout<<"3. Print "<<endl;
      cout<<"4. Clear "<<endl;
      cout<<"5. Exit "<<endl;
      cout<<"Masukkanpilihananda : ";
      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);
}
          {
          cout<<endl;
            Dequeue();
            break;
         }
         case 3:
         {
          cout<<endl;
            tampil();
            break;
         }
         case 4:
         {
          cout<<endl;
            clear();
            break;
         }
      }
      getch();
   }
   while(pil!=5);
       Screenshot.