Professional Documents
Culture Documents
Bagas Prakoso - Prak3
Bagas Prakoso - Prak3
Disusun oleh:
Nama : Bagas Prakoso
NRP : 3120510109
Kelas : D3 PJJ IT A
typedef struct
{
ItemType item[FULL];
int count;
} Stack;
//Initialize queue
void initialize_q(Queue *q)
{
q->Front = q->Rear = q->Count = 0;
}
//initialize stack
void initialize_s(Stack *point)
{
point->count=0;
}
int main()
{
Queue antre;
Stack tumpuk;
int pilihan, nomer_parkir=1, nomer_keluar;
char lagi='y';
initialize_q(&antre);
initialize_s(&tumpuk);
printf("PROGRAM PARKIR MOBIL\n");
printf("====================\n");
while(lagi == 'y' || lagi == 'Y')
{
printf("Pilihan menu:\n");
printf("1. Memasukkan mobil\n");
printf("2. Mengeluarkan mobil\n");
printf("Masukkan pilihan (1/2): ");
scanf("%d", &pilihan);
if(pilihan == 1)
{
enqueue(&antre, nomer_parkir);
nomer_parkir++;
printf("Parkir berhasil!\n");
}
else if(pilihan == 2)
{
printf("Nomer parkir yang keluar: ");
scanf("%d", &nomer_keluar);
if(antre.Item[antre.Front] == nomer_keluar)
printf("Parkir yang keluar: %d\n", dequeue(&antre));
else
{
while(antre.Item[antre.Front] != nomer_keluar)
push(&tumpuk, dequeue(&antre));
nomer_keluar = dequeue(&antre);
while(!isempty_s(&tumpuk))
{
antre.Count++;
antre.Item[(antre.Front-1)%FULL] = pop(&tumpuk);
antre.Front = (antre.Front-1)%FULL;
}
}
}
else
{
printf("INVALID INPUT\n");
return 0;
}
c. Analisis:
Bagian awal program saya isi dengan membangun queue dan stack sekaligus membuat fungsi-fungsi yang
akan digunakan untuk mengolah keduanya. Fungsi main saya awali dengan deklarasi dan inisialisasi
berbagai variabel yang akan saya gunakan pada program ini. Program parkir mobil ini akan terus dirun
selama jawaban user adalah char ‘y’ atau ‘Y’ sehingga saya gunakan while loop. Saya lantas mencetak
pesan pilihan menu. User kemudian diminta untuk memasukkan mobil atau mengeluarkan mobil. Setelah
itu saya gunakan if case. Apabila user memilih memasukkan mobil, maka program melakukan enqueue,
memasukkan elemen mobil ke antrean kemudian mencetak pesan bahwa user sukses memarkir mobil.
Apabila user ingin mengeluarkan mobil dari tempat parkir, maka user ditanyai mobil urutan berapa yang
hendak dikeluarkan. Mobil yang berada di depan mobil yang akan dikeluarkan kemudian dikeluarkan
sementara (di-dequeue), lantas dipush ke dalam stack. Mobil yang hendak dikeluarkan pun sukses di-
dequeue sehingga keluar dari antrean tempat parkir. Mobil yang ada di stack kemudian dipop satu persatu
lalu dikembalikan ke tempat semula di antrean. Mobil yang sebelumnya berada di belakang mobil yang
sudah keluar kini bisa maju satu tempat untuk memberi ruang kepada mobil yang ingin memasuki antrean
parkir. Apabila user menginput pilihan lain, program akan menampilkan pesan error dan menghentikan
program seketika. Seusai proses memasukkan atau mengeluarkan mobil, user akan ditanya apakah ingin
melakukan proses lagi atau tidak. Program akan mengulangi proses di dalam while apabila user menginput
char ‘y’ atau ‘Y’. Sebaliknya, program akan berhenti ketika user memberi inputan lain.
5. Program Ranking Mahasiswa
a. Source code
#include <stdio.h>
#include <string.h>
#define MAX 10
typedef struct
{
int NRP;
char nama[30];
int nilai;
} MHS;
typedef struct
{
MHS Item[MAX];
int Front;
int Rear;
int Count;
} Queue;
//Initialize queue
void initialize(Queue *q)
{
q->Front = q->Rear = q->Count = 0;
}
int main()
{
Queue ant;
char lagi='y';
int pilihan, nomer_dihapus;
MHS kontainer;
initialize(&ant);
printf("PROGRAM DATA MAHASISWA\n");
printf("======================\n");
while(lagi=='y' || lagi=='Y')
{
printf("Pilihan menu:\n");
printf("1. Menambah data\n");
printf("2. Mengurangi data\n");
printf("Pilih menu nomer (1/2) : ");
scanf("%d", &pilihan);
if(pilihan == 1)
{
printf("Masukkan NRP mahasiswa: ");
scanf("%d", &kontainer.NRP);
printf("Masukkan nama mahasiswa: ");
fflush(stdin);
fgets(kontainer.nama, 30, stdin);
printf("Masukkan nilai mahasiswa: ");
scanf("%d", &kontainer.nilai);
enqueue(&ant, kontainer);
}
else if(pilihan == 2)
dequeue(&ant);
else
{
printf("INVALID INPUT\n");
return 0;
}
printf("Data Mahasiswa:\n");
display(&ant);
printf("Lagi (y/t) ? ");
fflush(stdin);
scanf("%c", &lagi);
printf("\n");
}
printf("Ranking mahasiswa berdasarkan nilai:\n");
sort(&ant);
display(&ant);
return 0;
}
b. Hasil running:
c. Analisis:
Program Ranking Mahasiswa saya awali dengan membangun struktur queue dan membuat fungsi-fungsi
untuk mengolahnya. Kemudian pada fungsi main saya deklarasikan berbagai variabel dan sebagian sekalian
saya inisialisasikan nilai-nilainya. Sama seperti program di nomer 3, di program kali ini saya masih
menggunakan while loop agar user dapat mengisi atau menghapus data mahasiswa secara berulang. Masih
ama dengan program nomer 3, saya memberikan dua pilihan menu untuk user yakni untuk menambah data
atau menghapus data mahasiswa. Apabila user memilih menambah data mahasiswa, user akan diminta
untuk mengisi NRP, nama, dan nilai. Ketiga data tersebut kemudian di-enqueue ke queue ant. Apabila user
ingin menghapus data, maka program melakukan dequeue. Apabila user memasukkan input pilihan selain
dua pilihan di atas, program akan menampilkan pesan error sekaligus menghentikan program seketika.
Selanjutnya user diberi pilihan untuk melakukan proses penambahan atau pengurangan data lagi atau tidak.
Apabila user menginput char ‘y’ atau ‘Y’, maka proses di dalam while loop akan diulang lagi. Apabila user
memberi inputan lain, maka proses looping di dalam while loop akan berhenti. Setelah proses looping
berhenti. Program diminta melakukan proses sorting berdasarkan nilai dari yang tertinggi sampai ke
terendah. Kali ini saya menggunakan teknik bubble sort. Terakhir, program menampilkan data mahasiswa
yang telah diurutkan.