Professional Documents
Culture Documents
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 Hasil pembagian (integer) = 8 1 2 3 4 5 6 7 8 9 1 0 Seleksi 8 shape dari kanan Bilangan setelah dishift = 18 1 2 3 4 5 6 7 8 9 1 0 1 1 1 1 1 1 1 2 1 2 1 2 1 3 1 3 1 3 1 4 1 4 1 4 1 5 1 5 1 5 1 6 1 6 1 6 1 7 1 7 1 7 1 8 1 8 1 8 1 9 1 9 1 9 2 0 2 0 2 0 2 1 2 1 2 1 2 2 2 2 2 2 2 3 2 3 2 3 2 4 2 4 2 4 2 5 2 5 2 5
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.
PEMBAHASAN 1. o PROGRAM 1
PROSEDUR MEMASUKKAN ELEMEN DALAM ANTRIAN struct antrian { char isi[MAX]; int depan; int belakang; } if(q.belakang==MAX) { if(q.depan==0) printf(Antrian penuh); else q.belakang=1; } q.belakang==MAX q.belakang=q.belakang+1 q.belakang==MAX
q.depan!=MAX
If(q.depan!=q.belakang) q.isi[q.belakang]=x
q.belakang==MAX
q.belakang==x
q.depan==0
q.depan==0
PROSEDUR MENGELUARKAN ELEMEN DARI ANTRIAN If(q.depan==MAX) q depan=0; else q.depan=q.depan+1; kardel=q.isi[q.depan];
q.depan==MAX
LIFO
PROGRAM 2
plat
next
next
next
next
next
plat
plat
plat
plat
plat
depan
bantu
mobil
belakang
baru
next
plat
noplat
depan j!=1
depan
belakang
next
next
plat
noplat
next
plat
noplat
baru
belakang
belakang=baru
next
plat
plat
mobil=depan
bantu=depan
while((ada==0)||(mobil!=NULL))
next
plat
noplat
next
next
ada=1;
mobil
mobil
next
next
plat
plat
plat
bantu=bantu->next mobil=bantu
ada=0;
plat
mobil=depan
next
next
free(mobil);
next
next
next
next
next
next
baru->plat=noplat; baru->next=NULL:
next
next
plat
plat
plat
plat
plat
plat
plat
next
next
bantu=depan
next
next
next
next
plat
plat
noplat
plat
plat
break; bantu
next
next
next
next
plat
plat
noplat
plat
plat
PROGRAM 3
struct antrian
next
data
next
next
next
next
prioritas
prioritas
prioritas
prioritas
depan
bantu
bantu1
belakang
baru
next
prioritas
bil
belakang=depan
next
next
next
next
prioritas
prioritas
bil
prioritas
bil
baru
belakang
baru
belakang=baru
next
next
next
next
prioritas
prioritas
prioritas
prioritas
prioritas
next
data
data
data
data
data
next
data
next
data
dt
next
data
data
data
data
next
next
data
dt
data
dt
next
next
next
next
prioritas
prioritas
prioritas
prioritas
prioritas
next
next
next
next
prioritas biltemp
prioritas
prioritas
prioritas
prioritas
bantu
next
next
next
next
prioritas biltemp
prioritas
prioritas
prioritas
prioritas
bantu
bantu1
next
next
next
next
prioritas biltemp
prioritas
prioritas
prioritas
prioritas
bantu
bantu1
next
next
next
next
prioritas biltemp
prioritas
prioritas
prioritas
prioritas
bantu
bantu1
kartemp
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;
next
data
data
data
data
data
next
data
data
data
data
data
next
data
data
data
data
data
next
data
data
data
data
data
next
data
data
data
data
data
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); 7
} } 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); 8
} x=x->next;
} y=y->next;
} sum=0;
x=x->next; sum++;
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:
10