Tugas Praktikum 4 Adadada
Tugas Praktikum 4 Adadada
LANDASAN TEORI
1.1.
Array
Array adalah tipe terstruktur yang terdiri dari sejumlah komponen yang memiliki
tipe yang sama. Array memiliki indeks yang digunakan untuk membedakan data dalam
array satu dan yang lainnya.
Array memiliki susunan tertentu, array yang paling sederhana adalah array 1
dimensi. Gabungan dari array 1 dimensi dengan array 1 dimensi menghasilkan array 2
dimensi. Gabungan dari array 1 dimensi dengan array 2 dimensi menghasilkan array 3
dimensi.
Didalam pembuatan laporan ini hanya memakai array 1 dimensi. Pendeklarasian
array dilakukan dengan cara sebagai berikut:
//deklarasi array 1 dimensi
Tipe_data variable[panjang_array ];
//pemberian nilai
array
1.2.
kondisi terpenuhi. Perulangan akan berhenti jika nilai yang dimasukan sudah tidak
memenuhi syarat yang diberikan.
while loop
do-while loop
for loop
Queue
Antrian (queue) mempunyai prinsip FIFO (First In First Out) bahwa yang pertama
masuk yang pertama keluar. Queue memiliki kosep, data yang diinputkan akan
dimasukan kedalam tail, atau data paling belakang, dan head akan di akan dijumlahkan
untuk mengambil atau mengeluarkan data.
Adapun operasi didalam Queue sebagai berikut:
1. EnQueue Memasukkan data ke dalam antrian
Enque
digunakan
untuk
proses
pamasukan
data,
dengan
cara
menambahkan
tail dengan satu.
Untuk
void enqueue(int x)
{
if ((antrian.HEAD == 0) && (antrian.TAIL == 0))
{
antrian.HEAD = 1;
antrian.TAIL = 1;
}
else
{
antrian.TAIL = antrian.TAIL + 1;
}
antrian.data[antrian.TAIL] = x;
}
menambah panjang antrian, program akan menerima inputan user dan disimpan pada
array indeks ke tail.
Clear atau create empty melakukan proses untuk membuat data kembali seperti
awal dengan mengembalikan indeks head dan tail ke indeks ke 0.
4. IsEmpty Memeriksa apakah antrian kosong
IsEmpty
digunakan
untuk
int IsEmpty()
{
if ((antrian.HEAD> antrian.TAIL) || (antrian.HEAD ==
0) &&
(antrian.TAIL == 0))
return 1;
else
3
return 0;
}
menyatakan apakah antrian masih kosong atau tidak. Dengan cara menentukan apakah
indek head lebih besar dari tail, atau apakah head sama dengan tail.
5. IsFull Memeriksa apakah antrian penuh
IsFull
digunakan
untuk
menyatakan
apakah antrian
sudah
int IsFull()
{
if (antrian.TAIL == max)
return 1;
else
return 0;
}
penuh
atau belum, dengan cara mengecek apakah tail sama dengan panjang maksimum
antrian.
BAB II
PEMBAHASAN
2.1.
Contoh
Program
Pada
program
}
}
else
{
{
ini,
user
akan
satu, kemudian
setelah selesai
menginputkan
data ke dalam
queue , maka
program
akan
menampilkan
semua
isi
queue.
2.1.1.
Source
Code
Contoh
Program
antri.tail++;
return 0;
}
}
antri.data[antri.tail]=x;
menginputkan
data satu per
else
}
}
#include <stdio.h>
int main()
void deque()
#include <stdlib.h>
{
{
#define max 5
int Input,lagi,alinan;
if(antri.head>antri.tail)
create_empty();
{
typedef struct
lagi =1;
antri.head=0;
{
while(lagi==1)
antri.tail=0;
int tail, head, data[max];
{
}
}Queue;
if((isEmpty()==1)||(isFull()==0))
antri.head++;
Queue antri;
{
}
void create_empty()
printf("antrian tersedia!\n");
int isEmpty()
{
printf("masukan data: ");
{
antri.head=0;
scanf("%d",&Input);
if((antri.head>antri.tail)||(antri.head==0)&&(antri.tail==0))
antri.tail=0;
enque(Input);
{
}
printf("tambahkan data\n");
return 1;
void enque(int x)
printf("1.ya,0.tidak\n");
}
{
printf("input pilihan: ");
else
if((antri.head==0)&&(antri.tail==0))
scanf("%d",&lagi);
{
{
}
return 0;
antri.head=1;
else if(isFull()==1)
}
antri.tail=1;
{
}
}
printf("antrian penuh!\n");
int isFull()
{
lagi=0;
}
if(antri.tail==max)
}
{
while(isEmpty()==0)
return 1;
{
printf("%d",antri.data[antri.head]);
deque();
}
return 0;
void create_empty()
{
tersebut adalah
antri.head=0;
penerapan
antri.tail=0;
queue,
bagaimana
bilangan diantri. Didalam source code tersebut menggunakan fungsi Enque, Deque,
IsFull, IsEmpty, dan Create Empty. Didalam fungsi Enque dalam program jika nilai
Head dan Tail bernilai 0, nilai Head dan Tail akan diubah menjadi 1, untuk membulai
sebuah antrian.
Jika
tidak
maka
void enque(int x)
{
seperti
if((antri.head==0)&&(antri.tail==0))
biasannya,
nilai
antri.head=1;
antri.tail=1;
bahwa
di ingkremen,
} else {
antri.tail++;
untuk
} antri.data[antri.tail]=x;
menerima
}
inputan data kedalam antrian yang dimulai dari paling belakang. Didalam fungsi
inputan user diambil dengan variable x. maka ketika user menginputkan, variable
didalam struck akan menyamakan nilai dengan variable x,
void deque()
Pada
Fungsi Deque,
if(antri.head>antri.tail)
besar
antri.head=0;
antri.tail=0;
diberi nilai 0,
antri.head++;
karena antrian
dinyatakan
sudah kosong jika nilai head lebih besar dari pada tail. Pada deque yang mengalami
ingkremen adalah head. Untuk menghilangkan data atau pengambilan data.
Fungsi isEmpty dan isFull menyatakan syarat penuh dari queue dan syarat
kosong dari queue. Syarat penuh adalah saat tail mencapai nilai max, dan saat kosong
adalah saat nilai head lebih besar dari tail dan saat nilai head dan tail bernilai 0.
while(lagi==1)
{
if((isEmpty()==1)||(isFull()==0))
{
printf("antrian tersedia!\n");
printf("masukan data: ");
Didalam program akan melakukan perulangan selama nilai lagi sama dengan 1,
dengan menerima inputan user untuk menentukan ingin menambah data atau tidak.
Didalam perulang ini user akan diminta menginputkan data.
2.1.3. Screen Shoot Program A
dan
Algoritma
pencarian.
2.2.1.
Code
#include <stdio.h>
#include <stdlib.h>
#define max 5
Source
typedef struct
{
int tail, head, data[max];
}Queue;
Queue antri;
void create_empty()
{
antri.head=0;
antri.tail=0;
}
void enque(int x)
{
if((antri.head==0)&&(antri.tail==0))
{
antri.head=1;
antri.tail=1;
}
else
{
antri.tail++;
}
antri.data[antri.tail]=x;
}
void deque()
{
if(antri.head>antri.tail)
{
antri.head=0;
antri.tail=0;
}
antri.head++;
}
int isEmpty()
{
if((antri.head>antri.tail)||(antri.head==0)&&(antri.tail==0))
{
return 1;
}
else
{
return 0;
}
}
int isFull()
{
if(antri.tail==max)
{
return 1;
}
else
{
return 0;
}
int cari(int x)
{
int y;
for(y=0;y<antri.tail;y++)
{
if(x==antri.data[y])
{
printf("data %d ditemukan pada antrian ke- %d",x,y);
}
}
}
int main()
{
int Input,lagi,alinan;
create_empty();
lagi =1;
while(lagi==1)
{
if((isEmpty()==1)||(isFull()==0))
{
printf("antrian tersedia!\n");
printf("masukan data: ");
scanf("%d",&Input);
enque(Input);
printf("tambahkan data\n");
printf("1.ya,0.tidak\n");
printf("input pilihan: ");
scanf("%d",&lagi);
}
10
else if(isFull()==1)
{
printf("antrian penuh!\n");
lagi=0;
}
}
while(isEmpty()==0)
{
printf("%d\t",antri.data[antri.head]);
deque();
}
printf("masukan data yg akan dicari: ");
scanf("%d",&alinan);
cari(alinan);
return 0;
Screen
Shoot Latihan
int cari(int x)
{ int y;
for(y=0;y<antri.tail;y++) {
if(x==antri.data[y]) {
printf("data %d ditemukan pada antrian ke- %d",x,y);
}
}
}
11
BAB III
LAMPIRAN TUGAS
3.1 Tugas
Realisasi Queue dalam kehidupan sehari-hari dan buat program sederhana untuk
merepresentasikannya. Program yang dibuat adalah program untuk melakukan antrian
pengambilan sembako, dengan menggunakan ringbuffer
12
menu:
#include <stdlib.h>
printf("menu\n");printf("1.registrasi
antrian\n");
int head=1,tail=1;
printf("2.proses
antrian terdepan\n");printf("3.tampilkan
antrian\n");
printf("pilihan: ");scanf("%d",&pilihan);
void Enque();
switch(pilihan)
void Deque();
{
void tampil();
case 1:
void isi();
while(lagi==1)
int isFull();
{
int isEmpty();
if(isFull(mks)==0&&isEmpty()==1)
{
typedef struct
isi();
{
Enque();
int penghasilan,kepemilikan,tandai;
printf("tambah lagi 1.ya/0.tidak\n");
char nama[25],alamat[25];
scanf("%d",&lagi);
}sembako;
sembako antrian[100];
else
int main()
{
{
break;
int x,mks,pilihan,lagi=1,ulang=1;
printf("\t\t\t\tAntrian Sembako\n");
}
}
menu:
goto menu;
break;
case 2:
ulang=1;
if(ulang==1)
{
Deque();
13
printf("%d",head);
printf("prosese lagi 1.ya/0.tidak\n");
scanf("%d",&ulang);
}
else{
goto menu;
break;
}
case 3:
if(head==1&&tail==1)
{
printf("data kosong");
}
else
{
tampil();
}
goto menu;
break;
}
}
void Enque(int mks)
{
if(head==1&&tail==1)
{
tail++;
}else if(head<=tail)
{
tail++;
}
}
14
void isi()
{
fflush(stdin);
printf("nama: ");
gets(antrian[tail].nama);
printf("alamat: ");
gets(antrian[tail].alamat);
printf("penghasilan: ");
scanf("%d",&antrian[tail].penghasilan);
printf("golongan: ");
scanf("%d",&antrian[tail].kepemilikan);
}
int isEmpty()
{
if(head>tail)
{
printf("antrian kosong!\n");
head=1;
tail=1;
return 0;
}
else
{
return 1;
}
}
int isFull(int mks)
{
if(tail>mks)
{
15
return 1;
3.1.2.
Screen
else
shoot program
Tugas
return 0;
Berikut adalah
tampilan
dari
}
}
program:
void Deque()
Gambar 3.1.
tampilan
if(isEmpty()==1&&(head<tail))
program
{
head++;
3.1.3.
}
Penjelasan
else
Program
Tugas
printf("antrian kosong!\n");
}
}
void tampil()
{
int x,y;
x=head;
y=tail;
for(x;x<tail;x++)
{
printf("antrian ke-%d : %s\n",x,antrian[x].nama);
}
}
16
Pada progam antrian sembako, program pertama akan meminta inputan user
berupa banyaknya antrian yang akan disediakan.
printf("\t\t\t\tAntrian Sembako\n");
printf("masukan jumlah maksimum antrian: ");scanf("%d",&mks);
Kemudian ditampilkan menu pilihan. Dengan pilihan pertama berupa registrasi yang
berupa pemasukan data yaitu enque, dengan syarat jika fungsi isEmpty bernilai 0 dan
isFull bernilai 1. Maka antrian dapat dimasukan lagi.
Didalam fungsi isEmpty pernyataanya adalah jika nilai head lebih besar dari tail maka
antrian penuh. Didalam fungsi isFull pernyataannya adalah jika tail sama dengan mks
maka antian penuh.
Jika inputan user saat didalam menu pilihan memasukan 2 maka masuk ke dalam menu
proses antrian, sehingga dilakukan proses Dequeue untuk menghilangkan data terdepan,
sehingga data terdepan tidak ditampilkan.
case 2:
ulang=1;
if(ulang==1)
{
Deque();
printf("%d",head);
printf("prosese lagi 1.ya/0.tidak\n");
scanf("%d",&ulang);
}
else{
goto menu;
break;
}
Jika user memasukan pilihan 3 maka program akan masuk ke dalam menu 3 yaitu
tampilan data. Tampilan data menggunakan fungsi dengan nama tampil, user akan
17
masuk ke menu tampil jika nilai head dan tail bernilai 1 atau kosong. Didalam fungsi
tampil dilakukan proses perulangan dengan menggunakan for dan diulang sebanyak tail
dengan nilai awal berupa head.
BAB IV
PENUTUP
4.1 Kesimpulan
Dapat disimpulkan dari tugas ini, queue merupakan proses pengantirian dimana
data pertama yang masuk adalah yang pertama keluar. Fungsi digunakan agar program
lebih efisien dan sedikit menggunakan memori.
4.2 Saran
Saran pada saat melakukan ring buufer, pada saat penampilan data diharapkan
lebih teliti dengan nilai dari pada head agar tidak terjadi kesalahan dalam pengambilan
nilai awal.
void tampil()
{
int x,y;
x=head;
y=tail;
for(x;x<tail;x++)
{ printf("antrian ke-%d : %s\n",x,antrian[x].nama);
}
}
18
DAFTAR PUSTAKA
1. KOMANG ANOMS BLOG1. Looping (Perulangan) Pada Bahasa C. 21
Maret 2016.http://komanganombudiutama.blogspot.co.id/2012/04/inputprogram-include-main-int-abn.html
2. AZIZAH.ELEARNING.Pengertian Array, Cara Kerja Dan Contohnya.
Diakses 21 maret 2016.http://azizah.ilearning.me/programming/pengertianarray-cara-kerja-dan-contohnya/
3. CODEPROGRAM CPP. Memahami Struct pada Bahasa C. 21 maret 2016.
http://kodeprogramcpp.blogspot.co.id/2015/04/memahami-struct-pada-bahasac.html
19
20