queue

10
Praktikum Pemrograman Bahasa C 1 PENDAHULUAN QUEUE TUJUAN BELAJAR: Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: 1. Memahami konsep queue dan mengerti kegunaannya 2. Mengimplementasikan struktur queue dalam pemrograman 3. Mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan menggunakan queue dan menyelesaikannya. TUGAS PENDAHULUAN: 1. Buatlah algoritma/flowchart untuk operasi shift kiri menggunakan queue Input : bilangan desimal dan jumlah shift Output : bilangan desimal setelah shift Contoh : Masukkan bilangan desimal : 25 Masukkan jumlah shift : 3 Bilangan desimal setelah shift : 18 PEMBAHASAN Algoritma : 1. Input : Memasukkan bilangan decimal, memasukkan jumlah shift 2. Membaca input bilangan decimal, simpan pada variable tertentu untuk input tersebut 3. Membaca input jumlah shift, simpan pada variable tertentu untuk input tersebut 4. Bagilah input bilangan decimal dengan format integer dengan input jumlah shift, sehingga diperoleh nilai yang belum tentu bernilai integer 5. Konversikan hasil pembagian tadi ke dalam bentuk variable bertipe integer 6. Buatlah shape dari input bilangan decimal, dimana setiap shape terdiri dari bilangan satuan yang mewakili dari semua bilangan dari input. Apabila terdapat n bilangan, maka banyaknya shape yaitu sebanyak n 7. Seleksi sebanyak sisa shape dimulai dari nilai decimal terbesar, dimana dalam gambar situnjukkan dari posisi kanan ke kiri. 8. Dari hasil seleksi, nilai yang terkecil merupakan Bilangan decimal setelah di shift. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 Hasil pembagian (integer) = 8 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 Seleksi 8 shape dari kanan Bilangan setelah dishift = 18 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5

Upload: ahmad-reza-musthafa

Post on 30-Jul-2015

148 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: Queue

Praktikum Pemrograman Bahasa C

1

PENDAHULUAN QUEUE

TUJUAN BELAJAR:

Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: 1. Memahami konsep queue dan mengerti kegunaannya 2. Mengimplementasikan struktur queue dalam pemrograman 3. Mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan

menggunakan queue dan menyelesaikannya. TUGAS PENDAHULUAN:

1. Buatlah algoritma/flowchart untuk operasi shift kiri menggunakan queue Input : bilangan desimal dan jumlah shift Output : bilangan desimal setelah shift

Contoh : Masukkan bilangan desimal : 25 Masukkan jumlah shift : 3 Bilangan desimal setelah shift : 18

PEMBAHASAN Algoritma :

1. Input : Memasukkan bilangan decimal, memasukkan jumlah shift 2. Membaca input bilangan decimal, simpan pada variable tertentu untuk input tersebut 3. Membaca input jumlah shift, simpan pada variable tertentu untuk input tersebut 4. Bagilah input bilangan decimal dengan format integer dengan input jumlah shift, sehingga

diperoleh nilai yang belum tentu bernilai integer 5. Konversikan hasil pembagian tadi ke dalam bentuk variable bertipe integer 6. Buatlah shape dari input bilangan decimal, dimana setiap shape terdiri dari bilangan satuan yang

mewakili dari semua bilangan dari input. Apabila terdapat n bilangan, maka banyaknya shape yaitu sebanyak n

7. Seleksi sebanyak sisa shape dimulai dari nilai decimal terbesar, dimana dalam gambar situnjukkan dari posisi kanan ke kiri.

8. Dari hasil seleksi, nilai yang terkecil merupakan Bilangan decimal setelah di shift. 1 2 3 4 5 6 7 8 9 1

0 11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Hasil pembagian (integer) = 8 1 2 3 4 5 6 7 8 9 1

0 11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Seleksi 8 shape dari kanan Bilangan setelah dishift = 18 1 2 3 4 5 6 7 8 9 1

0 11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Page 2: Queue

Praktikum Pemrograman Bahasa C

2

QUEUE TUJUAN Setelah melakukan praktikum ini siswa diharapkan mengerti dan dapat membuat :

1. Cara lain untuk merepresentasikan sekumpulan data menggunakan queue 2. Anggota/elemen dari sebuah elemen queue dengan array atau linked list 3. Cara penggunaan queue dengan array ataupun dengan linked list 4. Penelusuran simpul/pembacaan queue = FIFO (first In First Out)

SOAL-SOAL TUGAS PEMROGAMAN

1. Untuk latihan program no 1, 2, dan 3 buatlah bagan proses dari queue, untuk setiap operasi enqueuing (insert) dan dequeuing (remove) pada representasi array dan linked list jangan lupa memasukkan perubahan nilai indeks array dan perubahan nilai pointernya

2. Buatlah program simulasi penjadwalan CPU dengan queue berprioritas, parameter yang dimasukkan :

o Waktu kedatangan (arrival time) o Waktu proses o Nilai prioritas

Dapatkan total waktu yang dibutuhkan sampai selesai seluruh proses.

Page 3: Queue

Praktikum Pemrograman Bahasa C

3

PEMBAHASAN 1.

o PROGRAM 1

struct antrian{ char isi[MAX]; int depan; int belakang;}

q.belakang==MAX

q.depan==0

if(q.belakang==MAX){if(q.depan==0)printf(“Antrian penuh”);else q.belakang=1;}

q.depan!=MAX

q.belakang==1

q.belakang=q.belakang+1 q.belakang==MAX

q.belakang==3

q.belakang==2

q.belakang==1

q.belakang==0

q.belakang==x

q.depan==0

If(q.depan!=q.belakang)

q.isi[q.belakang]=x

if(q.belakang=MAX)q.depan=0;Cetak antrian sekarang q.belakang==MAX

q.depan==0

PROSEDUR MEMASUKKAN ELEMEN DALAM ANTRIAN

PROSEDUR MENGELUARKAN ELEMEN DARI ANTRIAN

q.depan==MAX

q.depan==0

If(q.depan==MAX) q depan=0;

elseq.depan=q.depan+1;kardel=q.isi[q.depan];

q.depan==1

q.depan==0

LIFO

o PROGRAM 2

Page 4: Queue

Praktikum Pemrograman Bahasa C

4

plat next

struct antrian

plat next plat next plat next plat next plat next

depan bantu mobil belakang baru

MEMASUKKAN MOBIL KE DALAM ANTRIANchar noplat;

plat next

depan

noplat next

depan

depan->plat=noplat;depan->next=NULL:belakang=depan;

belakang

j=1

j!=1

plat next

baru

noplat next

baru

baru->plat=noplat;baru->next=NULL: plat ne

xt

belakang

noplat next

belakang=baru

MENGELUARKAN MOBIL DARI ANTRIAN

plat next

mobil=depan

plat next

bantu=depan

int ada=0;

while((ada==0)||(mobil!=NULL))

plat next

mobil

noplat next

mobil

ada=1;

plat next plat next

mobil=bantu

plat next

ada=0;bantu=bantu->next

plat next

mobil=depan

plat next

mobil

plat next

depan

plat next plat next

mobil

plat next

depan

plat next

depan=mobil->next;

free(mobil);

else

plat next

bantu=depan

Page 5: Queue

Praktikum Pemrograman Bahasa C

5

while((bantu->plat!=noplat))

plat next plat next noplat next plat next

bantu

plat next

break;

plat next plat next noplat next plat next

bantu

plat next

bantu=bantu->next;

mobil

o PROGRAM 3

struct antrian

depan bantu bantu1 belakang baru

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

depan

data

next

prioritas

dt

next

bil

char dt;int bil;if(j==1)

belakang=depan

depan->data=dt;depan->prioritas=bil;depan->next=NULL;belakang=depan;

char dt;int bil;else

baru

data

next

prioritas

baru

dt

next

bil

belakang

data

next

prioritas

belakang=baru

dt

next

bil

data

next

prioritas

baru->data=dt;baru->prioritas=bil;baru->next=NULL;belakang->next=baru;belakang=baru;

char kartemp;int biltemp;bantu=depan;

while(bantu!=NULL)

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

Page 6: Queue

Praktikum Pemrograman Bahasa C

6

bantu

bantu=bantu->next;

datane

xt

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

if(bantu1->prioritas<bantu->prioritas)

bantu

data

next

prioritas

data

next

prioritas

datane

xtprioritas

data

next

prioritas

data

next

prioritas

biltemp

biltemp=bantu->prioritas;bantu->prioritas=bantu1->prioritas;bantu1->prioritas=biltemp;kartemp=bantu->data;bantu->data=bantu1->data;bantu1->data=kartemp;

bantu

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

biltemp

bantu

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

biltemp

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

data

next

prioritas

biltempbantu

kartemp

bantu1

bantu1

bantu1

2.

#include<stdio.h> #include<string.h> #include<stdlib.h> struct queue { char name[32]; double arrive,time; int prioritas; struct queue *next; }*head,*back,*temp,*x,*y; int sum=0,end=0,temp_prioritas; char input[32],temp_name[32]; double temp_arrive,temp_time=0,iddle=0,temp_iddle=0;

Page 7: Queue

Praktikum Pemrograman Bahasa C

7

void enqueue() { printf("\tNama Proses %c ",16); gets(temp_name); printf("\tWaktu datang %c ",16); gets(input); temp_arrive=atof(input); printf("\tWaktu Proses %c ",16); gets(input); temp_time=atof(input); printf("\tNilai Prioritas %c ",16); gets(input); temp_prioritas=atoi(input); if(sum==0) { head=(struct queue *)malloc(sizeof(struct queue)); head->next=NULL; strcpy(head->name,temp_name); head->arrive=temp_arrive; head->time=temp_time; head->prioritas=temp_prioritas; back=head; } else { temp=(struct queue *)malloc(sizeof(struct queue)); back->next=temp; temp->next=NULL; strcpy(temp->name,temp_name); temp->arrive=temp_arrive; temp->time=temp_time; temp->prioritas=temp_prioritas; back=temp; } ++sum; x=head; while(x!=NULL) { y=x->next; while(y!=NULL) { if(x->prioritas<y->prioritas||(x->arrive>y->arrive&&x->prioritas==y->prioritas)) { strcpy(temp_name,x->name); strcpy(x->name,y->name); strcpy(y->name,temp_name);

Page 8: Queue

Praktikum Pemrograman Bahasa C

8

temp_time=x->time; x->time=y->time; y->time=temp_time; temp_prioritas=x->prioritas; x->prioritas=y->prioritas; y->prioritas=temp_prioritas; temp_arrive=x->arrive; x->arrive=y->arrive; y->arrive=temp_arrive; } y=y->next; } x=x->next; } } void process() { sum=0; x=head; if(x==NULL) printf("\tTidak ada sesuatu yang diproses\n"); else { while(x!=NULL) { if(sum==0) { iddle=x->arrive; temp_time=x->time+iddle; } else { if(temp_time<x->arrive) { temp_iddle=x->arrive-temp_time; iddle+=temp_iddle; temp_time+=temp_iddle; temp_time+=x->time; } else temp_time+=x->time; } printf("\tNama = %s\n",x->name); printf("\tDatang = %g\n",x->arrive); printf("\tWaktu = %g\n",x->time); printf("\tPriority = %d\n\n",x->prioritas);

Page 9: Queue

Praktikum Pemrograman Bahasa C

9

x=x->next; sum++; } printf("\tIddle time %g ms\n",iddle); printf("\tTotal process %g ms\n",temp_time); printf("\t======================================================\n"); } sum=0; } void main() { printf("\n\n\t%c SELAMAT DATANG DI PROGRAM SIMULASI PENJADWALAN CPU %c\n",1,1); printf("\t------------------------------------------------------\n"); puts(""); printf("\n\tApakah yang anda inginkan :\n"); printf("\t1. Menambahkan data CPU\n"); printf("\t2. Tampilkan hasil\n"); printf("\t3. Keluar (exit)\n"); while(end==0) { printf("\t======================================================\n"); printf("\n\tProses: %d ",sum); printf("\n\tMasukkan pilihan anda: "); gets(input); strlwr(input); if(strcmp(input,"1")==0) enqueue(); else if(strcmp(input,"2")==0) process(); else if(strcmp(input,"3")==0) end=1; else printf("\tKesalahan, input harus angka 1, 2, atau 3\n"); } }

Preview:

Page 10: Queue

Praktikum Pemrograman Bahasa C

10