queue
TRANSCRIPT
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
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.
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
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
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
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;
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);
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);
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:
Praktikum Pemrograman Bahasa C
10