Anda di halaman 1dari 7

FAKULTAS TEKNOLOGI DAN DESAIN

UJIAN AKHIR SEMESTER (UAS) GENAP TA. 2021/2022


INSTITUT TEKNOLOGI DAN BISNIS ASIA MALANG
FAKULTAS TEKNOLOGI DAN DESAIN
Nama : Muhammad Rifai
NIM : 20201009

Mata Kuliah : Analisis Algoritma & Struktur Data Dosen : Jaenal Arifin, S.Kom, MM, M.Kom. Prodi :
Teknik Informatika Hari/Tanggal : Senin / 18 Juli 2022 Kelas : MC Waktu : 150 Menit

1.A Ketik ulang kode program dibawah ini lalu jalankan kemudian analisislah dengan memberikan
keterangan/penjelasan dari tiap baris kode programnya!
1.B Berkaitan dengan program diatas, jawablah pertanyaan berikut:
a. Apakah program diatas bisa berjalan dengan baik? Jika tidak, beri penjelasan kenapa dan
dimana letak kesalahannya?
Jawaban :
Tidak bisa , letak kesalahan berada di tulisan array yang terdapat salah penulisan abjad huruf
besar dan kecilnya
b. Header iomanip pada program diatas → #include <iomanip> berfungsi untuk apa?
Jawaban :
File header untuk menentukan beberapa manipulator yang masing-masing mengambil satu
argumen.
c. Jelaskan apa itu const dalam syntax const int size!
Mendeklarasikan konstanta yang nilainya tidak dapat dirubah oleh user.
d. Apa fungsi setw dalam syntax cout<<setw(3)<<NumList[d];
Untuk mengatur lebar dari suatu tampilan data.

2. Buatlah sebuah program atau sistem antrian pasien yang dapat menginput nomer antrian,
pemanggilan giliran, melihat data antrian, menghitung waktu tunggu pasien pada saat mengantri
untuk berobat. Gunakan algoritma queue yang pernah dipelajari atau silahkan memodifikasi dari
contoh program latihan yang pernah diberikan dan buatlah tampilannya seperti gambar berikut :

13

22

56
Keterangan gambar:
Gambar 1: Tampilan utama program sistem antrian pasien (menu program)
Gambar 2: Menu 1> Proses input nomer antrian dengan menampilkan isi antrian (agar tidak double)
Gambar 3: Menu 3> Menampilkan nomer antrian yang diinputkan atau sisa antrian setelah
dipanggil Gambar 4: Menu 4> Untuk mengetahui lama waktu tunggu untuk dilayani (pada urutan
tertentu) dengan memperhatikan jumlah antrian depannya
Gambar 5: Menu 5> tampilan jika antrian dikosongkan
Gambar 6: Menu 6> tampilan jika memilih keluar dari program

Ketentuan Pengerjaan & Pengumpulan Hasil UAS


1. Soal no.1 kode program dan penjelasannya dikerjakan menggunakan ms word (docx)
2. Soal no. 2 dikerjakan menggunakan Dev C++ atau software lain yang berbasis C++ 3. Soal no.
1 & 2 dikumpulkan menjadi 1 file (source code program dicopy paste dari Dev C++) 4. File
jawaban di beri nama → nama mahasiswa_NIM , contoh Kamarudin_20201234 5. Kirimkan
jawaban ke google classroom (batas akhir pengumpulan Selasa tanggal 19 Juli 2022 jam 21.00
WIB).
Jawaban :
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <time.h>
#include <cstdlib>
#include <algorithm>
#include <iterator>

#define MAX 5
using namespace std;
typedef struct
{
int data[MAX];
int head;
int tail;
} Queue;

Queue antrian;

void Create()
{
antrian.head = antrian.tail = -1;
}
int IsEmpty()
{
if (antrian.tail == -1)
return 1;
else
return 0;
}
int IsFull()
{
if (antrian.tail == MAX - 1)
return 1;
else
return 0;
}

void Tampil()
{
printf(" Data Antrian :");
if (IsEmpty() == 0)
{
for (int i = antrian.head; i <= antrian.tail; i++)
{
printf(" %d", antrian.data[i]);
}
}
else
printf(" Belum ada!\n");
}
Enqueue(int data)
{

if (IsEmpty() == 1)
{
antrian.head = antrian.tail = 0;
antrian.data[antrian.tail] = data;
printf(" Antrian %d dimasukan ", antrian.data[antrian.tail]);
}
else if (IsFull() == 0)
{
antrian.tail++;
antrian.data[antrian.tail] = data;
printf(" Antrian %d dimasukan ", antrian.data[antrian.tail]);
}
else if (IsFull() == 1)
printf(" Antrian penuh!");
}

int Dequeue()
{
int i;
int e = antrian.data[antrian.head];
for (i = antrian.head; i <= antrian.tail - 1; i++)
{
antrian.data[i] = antrian.data[i + 1];
}
antrian.tail--;
printf(" Antrian nomor %d sudah diambil", e);
return e;
}

void Clear()
{
antrian.head = antrian.tail = -1;
printf(" Antrian sudah dikosongkan");
}

void Estimate(int nomor_ant){


int time_queue[6] = {5,6,7,8,9,10};

if (IsEmpty() == 0)
{

int n = sizeof(antrian.data) / sizeof(*antrian.data);


bool exists = std::find(antrian.data, antrian.data + n, nomor_ant) != antrian.data + n;
if (!exists)
{
printf(" Nomor Antrian yang anda masukan salah!\n");
}else{
srand ( time(NULL) );

int RandIndex = rand() % 6;

cout << " Perkiraan waktu layanan (menit) :"<< time_queue[RandIndex] << endl;

int urutan = 1;

for (int i = antrian.head; i <= antrian.tail; i++)


{

if (antrian.data[i] == nomor_ant)
{
cout << endl << " Anda berada diantrian ke : "<< (i+1) << endl;
cout << " Waktu tunggu anda : "<< (time_queue[RandIndex] * urutan) << endl;
}
urutan++;
}
}
}else{
printf(" Antrian kosong!\n");
}
}

main()
{

int pil;
int data;
int nomor_antrian;
Create();
do
{
system("cls");
cout << " |===================================|" << endl;
cout << " | oO SISTEM ANTRIAN PASIEN Oo |" << endl;
cout << " |===================================|" << endl;
cout << " | 1. Input Nomor Antrian | " << endl;
cout << " | 2. Panggil Nomor Antrian | " << endl;
cout << " | 3. Tampilkan Nomor Antrian | " << endl;
cout << " | 4. Perkirakan Waktu Tunggu | " << endl;
cout << " | 5. Bersihkan Antrian | " << endl;
cout << " | 6. Keluar | " << endl;
cout << " |===================================|" << endl;
cout << " Tentukan Pilihan : ";
cin >> pil;
switch (pil)
{
case 1:
Tampil();
cout << endl << " Masukan antrian baru : ";
cin >> data;
Enqueue(data);
break;

case 2:
Dequeue();
break;
case 3:
Tampil();
break;
case 4:

cout << " Masukan Nomor Antrian : ";


cin >> nomor_antrian;
Estimate(nomor_antrian);
break;
case 5:
Clear();
break;
case 6:
cout << " Tekan Enter untuk keluar program";
cin.ignore();

break;
}
getch();
} while (pil != 6);
// return 0;
exit(0);
}
-o- Selamat Mengerjakan Semoga Sukses -o-

Anda mungkin juga menyukai