Jumat, 22 Maret 2019
Kamis, 21 Maret 2019
Posted by Milda Hayati on 05.26 with No comments
A. Pengertian QUEUE
Queue dalam struktur data atau yang diartikan sebagai antrian merupakan sekumpulan data dimana saat menambahkan elemen hanya bisa dilakukan pada suatu ujung disebut sisi belakang (rear) dan penghapusan (pengambilan elemen) dilakukan lewat ujung lain/sisi depan(front). Berbeda dengan stack yang bersifat LIFO maka queue bersifat FIFO (First In First Out), yaitu data yang pertama masuk maka akan menjadi yang pertama kali keluar begitu pun sebaliknya.
Tumpukan disebut juga dengan "Waiting Line" yaitu suatu penambahan elemen baru dilakukan pada bagian belakang dan penghapus elemen dilakukan dilakukan pada bagian depan. Elemen-elemen dicdalam antrian dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur. Queue merupakan salah satu contoh aplikasi dari pembuatan double linked list yang cukup sering ditemui di kehidupan sehari-hari, midalnya saat pengantrian tiket. Istilah yang cukup sering dipakai adalah enqueue yaitu apabila seseorang masuk dalam sebuah antrian. Sedangkan dequeue adalah istilah yang dipakai saat seseorang keluar dari antrian.
B. Operasi-Operasi pada QUEUE
1. Create Queue(Q)
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail = -1
Dengan cara membuat Head dan Tail = -1
2. Make NullQ (Q)
Mengosongkan antrian Q, jika ada elemen maka semua elemen dihapus.
3. 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.
4. DeqQueue
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.
5. 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.
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca.
6. IsEmpty
Untuk memeriksa apakah Antrian sudah penuh atau belum. Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty. Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian
(elemen pertama dalam antrian) yang tidak akan berubah-ubah. Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail.
7. IsFull
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh.
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh.
C. Pendeklarasian QUEUE
1. Create
prosedure create;
begin
head:=;tail:=0;
end;
2. Full
fungtion full:boolean;
begin
if tail = maxqueue then
full:= true
else
full:= false
end;
3. Empty
fungtion empety:boolean;
begin
if tail = 0 then
empty :=true
else
empty:= false;
end;
4. Enqueue
procedure enqueue(elemen : byte);
begin
prosedure create;
begin
head:=;tail:=0;
end;
2. Full
fungtion full:boolean;
begin
if tail = maxqueue then
full:= true
else
full:= false
end;
3. Empty
fungtion empety:boolean;
begin
if tail = 0 then
empty :=true
else
empty:= false;
end;
4. Enqueue
procedure enqueue(elemen : byte);
begin
if empty then
begin
head := 1;
tail:=1;
queue[head]:=elemen;
end
else
if not full then
begin
inc(tail);
queue[tail]:= elemen;
end;
end;
5. Dequeue
procedure dequeue; Var I :byte;
begin
if not empty then
begin
for I := head to tail - 1 do
queue[I]:= queue[I+1]
dec(tail);
end;
end;
6. Clear
producer clear;
begin
while
not empty then
dequeue;
end
Contoh Program:
#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]);
// void Tampil();
// {
// if(IsEmpty()==0)
// {
// for(int i=antrian.head;i<=antrian.tail;i++)
// {
// printf("%d ",antrian.data[i]);
// }
// }
// else
// printf("Data Kosong !\n");
// }
}
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);
}
#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]);
// void Tampil();
// {
// if(IsEmpty()==0)
// {
// for(int i=antrian.head;i<=antrian.tail;i++)
// {
// printf("%d ",antrian.data[i]);
// }
// }
// else
// printf("Data Kosong !\n");
// }
}
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);
}
Hasil Output:
Referensi
http://langkahsuku.blogspot.com/2016/02/materi-queue.html
http://sekilaslihat.blogspot.com/2015/06/rangkuman-materi-queue.html
http://blog-arul.blogspot.com/2012/01/queue-pada-struktur-data.html
https://mas-gado.blogspot.com/2018/01/queue.html
Rabu, 13 Maret 2019
Posted by Milda Hayati on 20.56 with 1 comment
QUIZ 1
Kali
ini, saya akan membahas pemrograman c++ untuk kasus tiket konser.
Program ini adalah hasil Tugas Besar Mata Kuliah Algoritma Pemrograman 1
semester 1. Pada pemrograman ini, ditambahkan operasi struct, structur
array dan pointer.
Sebelum masuk ke listing program, saya akan menjelaskan alur programnya terlebih dahulu.
A. Kasus
Program yang saya buat adalah sebuah program untuk penjualan tiket konser. Berikut alur programnya yaitu:
Sebelum memesan tiket, maka anda terlebih dahulu harus memasukkan data diri anda berupa:
1. No identitas
No identitas harus dimasukkan sebanyak 16 angka sesuai dengan jumlah yang ada pada KTP atau KK anda.
2. No HP
No HP harus dimasukkan sebanyak 12 digit angka sesuai dengan jumlah no hp seperti biasa
3. Nama
4. Jenis kelamin
4. Jenis kelamin
Setelah mengisi data diri, anda akan menemui kelas tiket konser yang nantinya akan dipilih.Tiket konser ini disediakan dengan 5 kelas yang berbeda, yaitu:
No
|
Zona
|
Tipe
|
Harga
|
1
|
Red zone
|
Standing
|
Rp.3.000.000
|
2
|
Green zone
|
Standing
|
Rp.2.300.000
|
3
|
Purple zone
|
Standing
|
Rp.2.000.000
|
4
|
Blue zone
|
Free Seating
|
Rp.1.500.000
|
5
|
Yellow zone
|
Free Seating
|
Rp.1.000.000
|
B. Listing Program
#include<iostream>#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<fstream>
using namespace std;
struct tipedata
{
char nama[20], tipe2, metode, lagi, jenkel, batal;
int jumlah, total;
}td;
struct tiket
{
string tipe[5][4]={
{"1","Red Zone","Standing","3.000.000"},
{"2","Green Zone","Standing","2.300.000"},
{"3","Purple Zone","Standing","2.000.000"},
{"4","Blue Zone","Free Seating","1.500.000"},
{"5","Yellow Zone","Free Seating","1.000.000"},
};
}tk;
void headerprogram()
{
cout<<"========================================================================================="<<endl;
cout<<"| |"<<endl;
cout<<"| WWW.MILDA-TIKET.COM |"<<endl;
cout<<"| |"<<endl;
cout<<"|---------------------------------------------------------------------------------------|"<<endl;
cout<<"| Gg. Telaga Budi Rt.06 Rw.02 |"<<endl;
cout<<"| Kel.Angsau, Kec.Pelaihari. Kab Tanah Laut. Kalimantan Selatan |"<<endl;
cout<<"| E-mail: @mildatiket@gmail.com |"<<endl;
cout<<"========================================================================================="<<endl;
}
void footerprogram()
{
cout<<"========================================================================================="<<endl;
cout<<"| |"<<endl;
cout<<"| SELAMAT MENIKMATI KONSER ANDA^.^ |"<<endl;
cout<<"| |"<<endl;
cout<<"========================================================================================="<<endl;
}
void noid()
{
char noid[50];
atas1:
cout<<"Nomor Identitas(KTP/SIM/Paspor/Kartu Pelajar)(16 digit): ";
cin.getline(noid,50);
if(strlen(noid) > 15 && strlen(noid) <= 16)
{
cout<<"Indentitas Terdaftar\n";
}
else
{
cout<<"Tulisakan Nomor Indentitas Anda Dengan Benar\n";
goto atas1;
}
}
void nohp()
{
char nohp[50];
atas2:
cout<<"Nomor Handphone: ";
cin.getline(nohp,sizeof(nohp));
if(strlen(nohp) > 10 && strlen(nohp) <= 12)
{
cout<<"Nomor Terdaftar\n";
}
else
{
cout<<"Tulisakan Nomor Handphone Anda Dengan Benar\n";
goto atas2;
}
}
int main()
{
headerprogram();
cout<<endl<<endl;
cout<<"-----------------------------------------------------------------------------------------"<<endl;
cout<<"| Masukan Data Pribadi Anda |"<<endl;
cout<<"-----------------------------------------------------------------------------------------"<<endl;
atas3:
noid();
nohp();
cout<<"Nama = ";cin>>td.nama;
cout<<"Alamat dari Nama adalah : "<<&td.nama<<endl;
ulang:
cout<<"Jenis Kelamin "<<endl;
cout<<"a. Perempuan"<<endl;
cout<<"b. Laki-Laki"<<endl;
cout<<"Pilih Jenis Kelamin[a/b]: ";cin>>td.jenkel;
switch (td.jenkel)
{
case 'a':
cout<<"-----------------"<<endl;
cout<<"| Hai Fangirl^.^|"<<endl;
cout<<"--------------------------------"<<endl;
cout<<"|Enter sekali untuk melanjutkan|"<<endl;
cout<<"--------------------------------"<<endl;
break;
case 'b':
cout<<"-----------------"<<endl;
cout<<"| Hai Fanboy^.^ |"<<endl;
cout<<"--------------------------------"<<endl;
cout<<"|Enter sekali untuk melanjutkan|"<<endl;
cout<<"--------------------------------"<<endl;
break;
default:
cout<<"--------------------------"<<endl;
cout<<"|Mohon Pilih dengan Benar|"<<endl;
cout<<"--------------------------"<<endl;
goto ulang;
}
getch();
system("cls");
headerprogram();
cout<<endl;
cout<<"Nama: "<<td.nama<<endl;
kembali:
cout<<"========================================================================================="<<endl;
cout<<"| Tiket Konser BTS |"<<endl;
cout<<"========================================================================================="<<endl;
cout<<endl<<endl;
cout<<"-----------------------------------------------------------------------------------------"<<endl;
cout<<"|\tno\t"<<"|\tZona\t\t|"<<"\tTipe\t\t"<<"|\tHarga\t\t|"<<endl;
cout<<"-----------------------------------------------------------------------------------------"<<endl;
for (int i=0; i<5; i++)
{
for(int j=0; j<4; j++) {
cout<<tk.tipe[i][j]<<"\t\t|";
}
cout<<endl;
}
cout<<"-----------------------------------------------------------------------------------------"<<endl;
cout<<"Silahkan Pilih Tiket Konser yang Anda Inginkan"<<endl;
atas4:
cout<<"Pilih[1-5]: ";cin>>td.tipe2;
switch(td.tipe2)
{
case '1':
{
cout<<"Jumlah Yang dibeli: ";cin>>td.jumlah;
td.total = td.jumlah * 3000000;
cout<<"Total yang dibayar: "<<td.total;
cout<<endl;
}
break;
case '2':
{
cout<<"Jumlah Yang dibeli: ";cin>>td.jumlah;
td.total = td.jumlah * 2300000;
cout<<"Total yang dibayar: "<<td.total;
cout<<endl;
}
break;
case '3':
{
cout<<"Jumlah Yang dibeli: ";cin>>td.jumlah;
td.total = td.jumlah * 2000000;
cout<<"Total yang dibayar: "<<td.total;
cout<<endl;
}
break;
case '4':
{
cout<<"Jumlah Yang dibeli: ";cin>>td.jumlah;
td.total = td.jumlah * 1500000;
cout<<"Total yang dibayar: "<<td.total;
cout<<endl;
}
break;
case '5':
{
cout<<"Jumlah Yang dibeli: ";cin>>td.jumlah;
td.total = td.jumlah *1000000;
cout<<"Total yang dibayar: "<<td.total;
cout<<endl;
}
break;
default:
{
cout<<"Pilih dengan benar\n"<<endl;
goto atas4;
}
break;
}
cout<<endl;
cout<<"--------------------------------"<<endl;
cout<<"|Enter sekali untuk melanjutkan|"<<endl;
cout<<"--------------------------------"<<endl;
getch();
system("cls");
headerprogram();
cout<<"Nama: "<<td.nama<<endl;
cout<<endl<<endl;
cout<<"Apakah Ingin Membeli Lagi? [Y/T] : ";cin>>td.lagi;
if (td.lagi=='Y' || td.lagi == 'y')
{
cout<<endl;
goto kembali;
}
else if(td.lagi=='T' || td.lagi == 't')
{
cout<<"-----------------------------------------------------------------------------------------"<<endl;
cout<<"Terimakasih "<<td.nama<<" telah melakukan pembelian tiket di MILDA TIKET"<<endl;
cout<<"-----------------------------------------------------------------------------------------"<<endl;
cout<<endl;
}
footerprogram();
cout<<endl;
cout<<endl;
ofstream myfile ("MILDA_TIKET.txt");
if(myfile.is_open())
{
myfile<<"========================================================================================="<<endl;
myfile<<"| |"<<endl;
myfile<<"| WWW.MILDA-TIKET.COM |"<<endl;
myfile<<"| |"<<endl;
myfile<<"|---------------------------------------------------------------------------------------|"<<endl;
myfile<<"| Gg. Telaga Budi Rt.06 Rw.02 |"<<endl;
myfile<<"| Kel.Angsau, Kec.Pelaihari. Kab Tanah Laut. Kalimantan Selatan |"<<endl;
myfile<<"| E-mail: @mildatiket@gmail.com |"<<endl;
myfile<<"========================================================================================="<<endl;
myfile<<endl<<endl;
myfile<<" Pembelian tiket konser atas nama "<<td.nama<<" berhasil"<<endl;
myfile<<" dengan jumlah tiket sebanyak "<<td.jumlah<<" buah tiket"<<endl;
myfile<<" Dengan total pembayaran "<<td.total<<endl;
myfile<<" Silahkan datang dan pesan tiket di situs kami lagi"<<endl;
myfile<<endl<<endl;
myfile<<"========================================================================================="<<endl;
myfile<<"| |"<<endl;
myfile<<"| SELAMAT MENIKMATI KONSER ANDA^.^ |"<<endl;
myfile<<"| |"<<endl;
myfile<<"========================================================================================="<<endl;
myfile.close();
}
else cout<<"Gagal membuka file";
return 0;
}
C. Hasil Running
D. Akses File
E. Penjelasan Secara Umum
Program ini memuat beberapa operasi yang ada di C++ berupa struct untuk tipedata dan struct untuk menampilkan array pada hasil running. Untuk operasi fungsi ditampilkan untuk header berupa nama,alamat dan identitas lain tentang pemilik penjualan tiket dan footer program berisikan penutup ketika pembeli telah melakukan transaksi. Fungsi juga digunakan untuk operasi output no identitas dan no hp pembeli. Operasi pointer ditambahkan untuk pemanggilan alamat dari variabel nama. Memakai operasi perulangan yaitu switch case sebagai pemilihan jenis kelamin pembeli. Operasi for untuk pemanggilan array yang dijadikan struct. Operasi switch case digunakan untuk pemilihan tipe tiket oleh pembeli. Lalu operasi perulangan if-else, apakah pembeli ingin membeli tiket lagi atau tidak. Jika tidak maka program akan terhenti, apabila pembeli ingin membeli lagi maka program akan terulang kembali dari pemilihan tipe tiket.
Langganan:
Postingan (Atom)