Anda di halaman 1dari 47

Project Based Learning

STRUKTUR DATA
Disusun untuk memenuhi tugas

Mata Kuliah : Praktik Struktur data

Dosen Pengampu : Yuyun Yusnida Lase, S.Kom.,M.Kom.

Oleh :

Putri Dwi Anggraini (2205102021)

Samhan Al Kausar DLT (2205102026)

POLITEKNIK NEGERI MEDAN

2023
KATA PENGANTAR

Puji syukur kehadirat Tuhan Yang Maha Kuasa atas segala Rahmat, sehingga kami dapat
menyelesaikan penyusunan laporan ini dalam bentuk maupun isinya yang mungkin sangat
sederhana. Laporan ini berisi materi mata kuliah struktur Data selama semester 1 tahun 2023
beserta untuk menuntaskan tugas PBL (Project Based Learning).

Semoga laporan ini dapat dipergunakan sebagai salah satu acuan, petunjuk maupun pedoman
dan juga berguna untuk menambah pengetahuan bagi para pembaca.

laporan ini saya akui masih banyak kekurangan karena pengalaman yang kami miliki sangat
kurang. Oleh karena itu diharapkan kepada para pembaca untuk memberikan masukan-
masukan yang bersifat membangun untuk kesempurnaan laporan ini.

Logika dan Algoritma Pemograman i


DAFTAR ISI

JUDUL

KATA PENGANTAR ....................................................................................i

DAFTAR ISI ...................................................................................................1

BAB I

PENDAHULUAN ............................................................................................................... 2

BAB II

Struct .................................................................................................................................... 3

BAB III

Sorting .................................................................................................................................. 6

BAB IV

Serching ............................................................................................................................... 13

BAB V

Antrian (Queue) .................................................................................................................. 19

BAB VI

Perancang dan Pembahasan .............................................................................................. 38

Kesimpulan

Logika dan Algoritma Pemograman Page 1


BAB I
PENDAHULUAN

Olimpiade pemrograman adalah sebuah kompetisi yang diadakan untuk menentukan siapa
yang paling mahir dalam pemograman computer. Kompetisi ini diikuti oleh siswa siswa yang
memiliki minat dan bakat dalam bidang ilmu computer. Olimpiade pemograman biasanya
terbagi menjadi beberapa level, mulai dari tingkat sekolah, kabupaten/kota, provinsi, hingga
tingkat nasionaldan internasional.

Tujuan dari olimpiade pemrograman adalah mengembangkan keterampilan pemrograman


siswa serta memperkenalkan mereka pada teknologi terbaru yang sedang berkembang. Selain
itu, kompetisi ini juga dapat menjadi ajang untuk mempererat persaudaraan antar pelajar dan
membangun semangat kompetensi yang sehat.

Disamping itu, olimpiade pemrograman juga memberikan banyak manfaat bagi siswa yang
mengikutinya. Selain mendapatkan pengalaman yang berharga dalam menyelesaikan
masalah, siswa juga dapat memperluas jaringan pertemanan dan membuka peluang untuk
mendapatkan beasiswa atau penghargaan dari lembaga-lembaga yang terlibat dalam
kompetisi.

Didalam kegiatan olimpiade pemrograman dari tingkat universitas pasti banyak yang sangat
minat untuk kegiatan ini. Dengan demikian banyak mahasiswa untuk jurusan di bidang IT
atau pun mahasiswa yang mahir dalam pemrograman yang pastinya excited untuk olimpiade
ini..

Panitia penyelenggara harus benar-benar siap dalam mempersiapkan olimpiade ini,dari itu
diperlukan teknologi yang dapat menginputkan data-data dengan cepat dan praktis.Maka dari
itu sistem yang dibuat menggunakan C++ ini dapat mempermudah untuk mengakses data-
data peserta olimpide. Dalam sistem ini tersedia menu untuk menampilkan data perserta,
mengurutkan data peserta sesuai dengan nilai tertinggi, dapat mencari data-data peserta dan
juga memanggil peserta pemenang dalam olimpiade ini.

Logika dan Algoritma Pemograman Page 2


BAB II
STRUCT

Struct merupakan salah satu tipe data dalam bahasa pemograman C++. Struct biasanya
digunakan untuk membuat data type atau tipe baru yang tersusun atas beberapa variable.
Struct merupakan kumpulan variable-variabel yang bisa berbeda tipe data yang saling terkait
dan menyusun suatu objek secara utuh. Struct dapat menyimpan beberapa tipe data seperti
integer, float, Boolean atau bahkan string.

Struct pada C++ juga bisa dikatakan sebagai sebuah template yang dapat digunakan untuk
membuat objek yang memiliki ciri-ciri sama atau mirip. Selain itu, struct juga digunakan
untuk mengelompokkan beberapa variable yang memiliki hubungan atau kesamaan dengan
tujuan agar lebih mudah dikelola.

Struct dapat dideklarasikan di dalam main program ataupun di luar main program. Dalam
deklarasi struct, nama struct digunakan untuk menyebutkan variable-variabel yang akan
disimpan didalam struct. Penggunaan struct cukup sederhana, dengan cara memanggil struct
melalui nama variable kemudian diikuti dengan tanda titik. Contoh struct.contohVariabel.

Dalam penggunaannya, struct dapat dipandang sebagai kumpulan data yang terkait dan
bersama-sama membentuk suatu objek. Struktur data ini memudahkan programmer untuk
mengelola atau memproses informasi tersebut karena setiap variable yang terkait benar-benar
dapat membentuk satu kesatuan yang utuh. Proses pembentukan struct pada C++ pun cukup
sederhana dan mudah dipahami oleh banyak programmer baik pemula maupun
berpengalaman. Oleh karena itu, penggunaan struct dapat membantu meningkatkan kualitas
kode program yang dibuat sehingga menjadi lebih modular dan mudah dipelihara.

Kode program :

#include <iostream>

#include <iomanip>

using namespace std;

// Deklarasi Struct

struct Mahasiswa {

string nama;

float nilai_teori;

float nilai_praktik;

Logika dan Algoritma Pemograman Page 3


float nilai_projek;

float nilai_PA;

float total;

};

// Fungsi untuk menampilkan data

void datadata(Mahasiswa data[], int n) {

cout<<"|=======================================================================|";

cout<<"\n|=============Nama==============|===============Nilai===================|"<<endl;

cout<<"|==========Mahasiswa============| teori\t Praktik\tProjek\t PA\t|"<<endl;

cout<<"| |=======================================|"<<endl;

for(int i=0; i<n; i++) {

cout <<"|"<<i+1<<"."<<data[i].nama<<setw(10)<<"\t|"<<setw(6)<<data[i].nilai_teori<<"\
t"<<setw(8)<<data[i].nilai_praktik<<"\t "

<<data[i].nilai_projek<<"\t "<<data[i].nilai_PA<<"\t|"<<endl;

cout<<"|=======================================================================|"<<endl;

int main(){

Mahasiswa data[5];

data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90};

data[1] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86};

data[2] = {"Auliya_Salsabilla", 79, 84, 81, 84};

data[3] = {"Elavano_Shaquille", 86, 88, 86, 76};

data[4] = {"Livia_Nathalia", 79, 81, 76, 86};

datadata(data,5);

Hasil Run :

Logika dan Algoritma Pemograman Page 4


Keterangan :

Struct pada program diatas digunakan untuk mempresentasikan data mahasiswa. Struct
memiliki beberapa atribut seperti nama, nilai teori, nilai praktik, nilai projek, nilai PA dan
total.

Dengan menggunakan struct, data data tersebut dapat diatur dan diakses dengan mudah dan
efisien. Selain itu, penggunaan struct memungkinkan untuk menyimpan data mahasiswa
dalam satu array sehingga mempermudah pengelolaan data secara keseluruhan.

Seperti :

data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90};

data[0].nama => akan menyimpan isi data pertama "Arra_Urraifa_Permata"

data[0].nilai_teori=> akan menyimpun data kedua : 84

data[0].nilai_praktik=> akan menyimpan data ketiga : 84

data[0].nilai_projek=> akan menyimpan data keempat : 94

data[0].nilai PA=> akan menyimpan data kelima : 90

BAB III

Logika dan Algoritma Pemograman Page 5


SORTING

Sorting dalam C++ merujuk pada proses pengurutam elemen-elemen dalam sebuah array atau
koleksi data lainnya sesuai dengan aturan tertentu. Proses pengurutam ini bertujuan untuk
mengatur elemen-elemen tersebut secara teratur agar memudahkan penangkapan dan
pencarian data. Dalam C++, terdapat berbagai algoritma pengurutan yang sudah tersedia dan
dapat digunakan sesuai kebutuhan.

Salah satu algoritma pengurutan yang umum digunakan dalam C++ adalah algoritma Bubble
Sort. Algorita ini bekerja dengan membandingkan setiap elemen pasangan secara berurutan
dan menukar posisi jika ditemukan elemen yang tidak berurutan. Proses ini dilakukan secara
berulang hingga seluruh elemen sudah berada pada posisi yang tepat. Meskipun Bubble Sort
sederhana dan mudah diimplementasikan, namun algoritma ini memiliki kerumitan waktu
yang tinggi, terutama pada kasus-kasus dengan jumlah data besar.

Kode program :
#include <iostream>
#include <iomanip>
using namespace std;

// Deklarasi Struct
struct Mahasiswa {
string nama;
float nilai_teori;
float nilai_praktik;
float nilai_projek;
float nilai_PA;
float total;
};
// Fungsi untuk sorting rata-rata nilai mahasiswa
void sorting_rata_rata_mahasiswa(Mahasiswa data[], int n) {
float total, average_tp_siswa[n];
int x, y;
int counter;

// Hitung rata-rata masing-masing mahasiswa


total= 0;
for( x=0; x<n; x++ )
{
counter = 0;
total = data[x].nilai_teori+ data[x].nilai_praktik + data[x].nilai_projek +
data[x].nilai_PA;
counter = 4;
average_tp_siswa[x] = total/counter;
total = 0;
}

// Sorting rata-rata nilai mahasiswa


for(int i=0; i<n-1; i++) {
for(int j=i+1; j<n; j++) {
if(average_tp_siswa[j]>average_tp_siswa[i]) {
float temp = average_tp_siswa[i];
average_tp_siswa[i] = average_tp_siswa[j];
average_tp_siswa[j] = temp;

Mahasiswa temp_mahasiswa = data[i];


data[i] = data[j];

Logika dan Algoritma Pemograman Page 6


data[j] = temp_mahasiswa;
}
}
}

// Tampilkan hasil sorting


cout<<"HASIL PERINGKAT RATA-RATA NILAI PESERTA :\n";
for(int i=0; i<n; i++) {
cout<<i+1<<". "<<data[i].nama<<setw(9)<<"\t"<<" dengan rata-rata nilai
"<<average_tp_siswa[i]<<endl;
}
}

int main(){

Mahasiswa data[5];
data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90};
data[1] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86};
data[2] = {"Auliya_Salsabilla", 79, 84, 81, 84};
data[3] = {"Elavano_Shaquille", 86, 88, 86, 76};
data[4] = {"Livia_Nathalia", 79, 81, 76, 86};

sorting_rata_rata_mahasiswa(data,5);
}

Keterangan :

Metode sort yang digunakan dalam program ini adalah buble sort, yaitu metode pengurutan
dengan cara membandingkan dua nilai sekaligus dan melakukan penukaran posisi jika
diperlukan, kemudian dilakukan pengulangan ini sebanyak n-1 kali (dalam contoh ini, n
adalah jumlah mahasiswa yang ingin diurutkan). Bubble sort digunakan karena cukup
sederhana dan cukup efektif untuk mengurutkan data yang jumlahnya tidak terlalu besar.
Namun bubble sort juga tidak efisien jika jumlah data yang diurutkan sangat besar.

Alur :
void sorting_rata_rata_mahasiswa(Mahasiswa data[], int n) {
float total, average_tp_siswa[n];
int x;
int counter;

// Hitung rata-rata masing-masing mahasiswa


total= 0;
for( x=0; x<n; x++ )
{
counter = 0;
total = data[x].nilai_teori+ data[x].nilai_praktik + data[x].nilai_projek +
data[x].nilai_PA;
counter = 4;
average_tp_siswa[x] = total/counter;
total = 0;
}

// Sorting rata-rata nilai mahasiswa


for(int i=0; i<n-1; i++) {
for(int j=i+1; j<n; j++) {
if(average_tp_siswa[j]>average_tp_siswa[i]) {

Logika dan Algoritma Pemograman Page 7


float temp = average_tp_siswa[i];
average_tp_siswa[i] = average_tp_siswa[j];
average_tp_siswa[j] = temp;

Mahasiswa temp_mahasiswa = data[i];


data[i] = data[j];
data[j] = temp_mahasiswa;
}
}
}

// Hitung rata-rata masing-masing mahasiswa

total=0;
for( x=0; x<n; x++ )
{
X=0;0<5;
counter = 0;
total = data[0].nilai_teori+ data[0].nilai_praktik + data[0].nilai_projek +
data[0].nilai_PA;
total = 84+84+94+90
counter = 4;
average_tp_siswa[x] = total/counter;
average_tp_siswa[0]=352/4 =>88
total = 0;
}
X+1
X=1;1<5;
counter = 0;
total = data[1].nilai_teori+ data[1].nilai_praktik + data[1].nilai_projek +
data[1].nilai_PA;
total = 81+80+79+86
counter = 4;
average_tp_siswa[x] = total/counter;
average_tp_siswa[1]=326/4 =>81,5
total = 0;
}
X+1
X=2;2<5;
counter = 0;
total = data[2].nilai_teori+ data[2].nilai_praktik + data[2].nilai_projek +
data[2].nilai_PA;
total = 79+84+81+84
counter = 4;
average_tp_siswa[x] = total/counter;
average_tp_siswa[2]=328/4 =>82
total = 0;
}
X+1
X=3;3<5;
counter = 0;
total = data[3].nilai_teori+ data[3].nilai_praktik + data[3].nilai_projek +
data[3].nilai_PA;
total = 86+88+86+76
counter = 4;
average_tp_siswa[x] = total/counter;
average_tp_siswa[3]=336/4 =>84
total = 0;
}
X+1
X=4;4<5;
counter = 0;

Logika dan Algoritma Pemograman Page 8


total = data[4].nilai_teori+ data[4].nilai_praktik + data[4].nilai_projek +
data[4].nilai_PA;
total = 79+81+76+86
counter = 4;
average_tp_siswa[x] = total/counter;
average_tp_siswa[4]=322/4 =>80,5
total = 0;
}
Posisi awal :
data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90}; average_tp_siswa = 88
data[1] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86}; average_tp_siswa = 81,5
data[2] = {"Auliya_Salsabilla", 79, 84, 81, 84}; average_tp_siswa = 82
data[3] = {"Elavano_Shaquille", 86, 88, 86, 76}; average_tp_siswa = 84
data[4] = {"Livia_Nathalia", 79, 81, 76, 86}; average_tp_siswa = 80,5

// Sorting rata-rata nilai mahasiswa


for(int i=0; i<n-1; i++) {
i=0;0<5-1 >i+1
for(int j=i+1; j<n; j++) {
j=0+1;j<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(81,5>88) >no

j=1+1;j<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(82>88) >no

j=2+1;j<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(84>88) >no

j=3+1;j<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(80,5>88) >no

j=4+1;j<5 >no

i=1;1<5-1 >i+1
for(int j=i+1; j<n; j++) {
j=1+1;j<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(82>81,5)
>yes
float temp = average_tp_siswa[i];
temp = 81,5;

average_tp_siswa[i] = average_tp_siswa[j];
average_tp_siswa[1] = 82;
average_tp_siswa[j] = temp;
average_tp_siswa[2] = 81,5;

Mahasiswa temp_mahasiswa = data[i];


Mahasiswa temp_mahasiswa = 81,5;
data[i] = data[j];
data[1] = 82;
data[j] = temp_mahasiswa;
data[2] = 81,5;
}
}

Logika dan Algoritma Pemograman Page 9


}

Posisi :

data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90}; average_tp_siswa = 88


data[1] = {"Auliya_Salsabilla", 79, 84, 81, 84}; average_tp_siswa = 82
data[2] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86}; average_tp_siswa = 81,5
data[3] = {"Elavano_Shaquille", 86, 88, 86, 76}; average_tp_siswa = 84
data[4] = {"Livia_Nathalia", 79, 81, 76, 86}; average_tp_siswa = 80,5

j=2+1;3<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(84>82) >yes
float temp = average_tp_siswa[i];
temp = 82;

average_tp_siswa[i] = average_tp_siswa[j];
average_tp_siswa[1] = 84;
average_tp_siswa[j] = temp;
average_tp_siswa[3] = 82;

Mahasiswa temp_mahasiswa = data[i];


Mahasiswa temp_mahasiswa = 82;
data[i] = data[j];
data[1] = 84;
data[j] = temp_mahasiswa;
data[3] = 82;
}
}
}

Posisi :

data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90}; average_tp_siswa =88


data[1] = {"Elavano_Shaquille", 86, 88, 86, 76}; average_tp_siswa = 84
data[2] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86}; average_tp_siswa =81,5
data[3] = {"Auliya_Salsabilla", 79, 84, 81, 84}; average_tp_siswa = 82
data[4] = {"Livia_Nathalia", 79, 81, 76, 86}; average_tp_siswa = 80,5

j=3+1;4<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(80,5>84) >no

j=4+1;5<5 >no

i=2;2<5-1 >i+1
for(int j=i+1; j<n; j++) {
j=2+1;j<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(82>81,5)
>yes
float temp = average_tp_siswa[i];
temp = 81,5;

average_tp_siswa[i] = average_tp_siswa[j];
average_tp_siswa[2] = 82;
average_tp_siswa[j] = temp;
average_tp_siswa[3] = 81,5;

Logika dan Algoritma Pemograman Page 10


Mahasiswa temp_mahasiswa = data[i];
Mahasiswa temp_mahasiswa = 81,5;
data[i] = data[j];
data[2] = 82;
data[j] = temp_mahasiswa;
data[3] = 81,5;
}
}
}

Posisi :

data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90}; average_tp_siswa = 88


data[1] = {"Elavano_Shaquille", 86, 88, 86, 76}; average_tp_siswa = 84
data[2] = {"Auliya_Salsabilla", 79, 84, 81, 84}; average_tp_siswa = 82
data[3] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86}; average_tp_siswa =81,5
data[4] = {"Livia_Nathalia", 79, 81, 76, 86}; average_tp_siswa = 80,5

j=3+1;j<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(80,5>82) >no

j=4+1;j<5 >no

i=3;3<5-1 >i+1
for(int j=i+1; j<n; j++) {
j=3+1;j<5 >j+1
if(average_tp_siswa[j]>average_tp_siswa[i]) {
if(80,5>81,5) >no

j=4+1;j<5 >no

i=4;4<5-1 >no

maka tampilannya :
// Tampilkan hasil sorting

cout<<"HASIL PERINGKAT RATA-RATA NILAI PESERTA :\n";

for(int i=0; i<n; i++) {

i=0;0<5;

cout<<i+1<<". "<< Arra_Urraifa_Permata <<setw(9)<<"\t"<<" dengan rata-rata nilai


"<<88<<endl;

i=1;1<5;

cout<<i+1<<". "<< Elavano_Shaquille <<setw(9)<<"\t"<<" dengan rata-rata nilai


"<<84<<endl;

i=2;2<5;

cout<<i+1<<". "<< Auliya_Salsabilla <<setw(9)<<"\t"<<" dengan rata-rata nilai


"<<82<<endl;

i=3;3<5;

cout<<i+1<<". "<< Syazwan_Karem_Tariq <<setw(9)<<"\t"<<" dengan rata-rata nilai


"<<81,5<<endl;

Logika dan Algoritma Pemograman Page 11


i=4;4<5;

cout<<i+1<<". "<< Livia_Nathalia <<setw(9)<<"\t"<<" dengan rata-rata nilai


"<<80,5<<endl;

i=5;5<5; >no

Hasil Run :

Logika dan Algoritma Pemograman Page 12


BAB IV
SEARCHING

Searching dalam C++ merujuk pada proses pencarian elemen dalam sebuah array atau
koleksi data lainnya. Tujuan dari searching adalah untuk menemukan posisi atau keberadaan
elemen yang dicari. C++ menyediakan berbagai pencarian algoritma yang dapat digunakan
dengan kebutuhan.

Salah satu algoritma pencarian yang umum digunakan dalam C++ adalah algoritma pencarian
sequential. Algoritma yang bekerja dengan membandingkan setiap elemen dalam array secara
berurutan dengan elemen yang dicari. Jika ditemukan elemen yang sesuai, maka proses
pencarian berhenti dan posisi elemen tersebut dikembalikan. Sequential search merupakan
metode pencarian yang sederhana dan mudah diimplementasikan, namun memiliki kerumitan
waktu yang sequential, yaitu bergantung pada jumlah elemen dalam array.

Dengan menggunakan algoritma-algoritma pencarian yang sudah tersedia dalam C++, kita
dapat dengan mudah mencari elemen yang diinginkan dalam array atau koleksi data lainnya.
Pemilihan algoritma yang tepat akan sangat bergantung pada sifat data yang akan dicari,
apakah sudah terurut atau tidak, serta ukuran dan karakteristik dari data tersebut.

Kode Program :

#include <iostream>

#include <iomanip>

using namespace std;

// Deklarasi Struct

struct Mahasiswa {

string nama;

float nilai_teori;

float nilai_praktik;

float nilai_projek;

float nilai_PA;

float total;

Logika dan Algoritma Pemograman Page 13


};

// Fungsi untuk mencari data mahasiswa berdasarkan nama

void search_data(Mahasiswa data[], int n) {

string keyword;

bool found = false;

cout<<"Masukkan nama yang ingin dicari: ";

cin>>keyword;

for(int i=0; i<n; i++) {

if(data[i].nama==keyword) {

found = true;

cout<<"\nNama: "<<data[i].nama<<endl;

cout<<"Rata-ratanilai:
"<<(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai_PA)/
4<<endl;

break;

if(!found) {

cout<<"\nData tidak ditemukan"<<endl;

int main(){

Mahasiswa data[5];

data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90};

data[1] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86};

data[2] = {"Auliya_Salsabilla", 79, 84, 81, 84};

data[3] = {"Elavano_Shaquille", 86, 88, 86, 76};

data[4] = {"Livia_Nathalia", 79, 81, 76, 86};

Logika dan Algoritma Pemograman Page 14


search_data(data,5);}

Keterangan :

Fungsi search pada program diatas menggunakan metode sequential search yang melakukan
pencarian sequential dari awal sampai akhir array untuk menemukan elemen yang sesuai
dengan kriteria yang dicari.

Pada fungsi search, pertama-tama user diminta untuk memasukkan nama yang ingin dicari.
Kemudian, fungsi akan melakukan iterasi untuk setiap elemen dalam array ‘data’. Ketika
nama yang dimasukkan sama dengan nama yang ada dalam array ‘data’ maka fungsi akan
menampilkan nama mahasiswa tersebut beserta rata rata nilai dari 4 atribut yang ada.

Jika nama yang dicari tidak ditemukan dalam array ‘data’. Maka akan ditampilkan pesan
“Data tidak ditemukan”.

Alur :

void search_data(Mahasiswa data[], int n) {

string keyword;

bool found = false;

cout<<"Masukkan nama yang ingin dicari: ";

cin>>keyword;

for(int i=0; i<n; i++) {

if(data[i].nama==keyword) {

found = true;

cout<<"\nNama: "<<data[i].nama<<endl;

cout<<"Rata-rata nilai:
"<<(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai_PA)/
4<<endl;

break;

if(!found) {

cout<<"\nData tidak ditemukan"<<endl;

Logika dan Algoritma Pemograman Page 15


}}

data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90};

data[1] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86};

data[2] = {"Auliya_Salsabilla", 79, 84, 81, 84};

data[3] = {"Elavano_Shaquille", 86, 88, 86, 76};

data[4] = {"Livia_Nathalia", 79, 81, 76, 86};

cout<<"Masukkan nama yang ingin dicari: Auliya_Salsabilla ";

cin>>keyword;

for(int i=0; i<n; i++) {

i=0;0<5; >no

if(data[i].nama==keyword) {

if(Arra_Urraifa_Permata == Auliya_Salsabilla) { >no

i=1;1<5; >no

if(data[i].nama==keyword) {

if(Syazwan_Karem_Tariq == Auliya_Salsabilla) { >no

i=2;2<5; >no

if(data[i].nama==keyword) {

if(Auliya_Salsabilla == Auliya_Salsabilla) { >ye

found = true;

cout<<"\nNama: "<<data[i].nama<<endl;

Nama : Auliya_Salsabilla

cout<<"Rata-rata nilai:
"<<(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai_PA)/
4<<endl;

Rata-rata : 79+84+81+84/4 = 82

Logika dan Algoritma Pemograman Page 16


break;

Hasil Run :

Bagaimana pencariannya salah ?

cout<<"Masukkan nama yang ingin dicari: Auliya Salsabilla ";

cin>>keyword;

for(int i=0; i<n; i++) {

i=0;0<5; >no

if(data[i].nama==keyword) {

if(Arra_Urraifa_Permata == Auliya Salsabilla) { >no

i=1;1<5; >no

if(data[i].nama==keyword) {

if(Syazwan_Karem_Tariq == Auliya Salsabilla) { >no

i=2;2<5; >no

if(data[i].nama==keyword) {

if(Auliya_Salsabilla == Auliya Salsabilla) { //perhatikan tidak ada (_) >no

i=3;3<5; >no

if(data[i].nama==keyword) {

if(Elavano_Shaquille == Auliya Salsabilla) { >no

Logika dan Algoritma Pemograman Page 17


i=4;4<5; >no

if(data[i].nama==keyword) {

if(Livia_Nathalia == Auliya Salsabilla) { >no

i=5;5<5; >no

if(!found) {

cout<<"\nData tidak ditemukan"<<endl;

}}

Hasil run :

Logika dan Algoritma Pemograman Page 18


BAB V
QUEUE
Queue dalam C++ adalah struktur linier yang mengikuti prinsip FIFO (First In First Out),
yang berarti elemen yang pertama dimasukkan ke dalam queue akan menjadi elemen yang
pertama pula untuk dikeluarkan pada satu ujung, yang disebut belakang, sedangkan
penghapusan elemen hanya dapat dilakukan pada ujung lainnya, yang disebut depan. Antrian
mirip dengan antrian dikehidupan sehari-hari, dimana orang yang dating pertama kali akan
dilayani terlebih dahulu sebelum orang lain dating kemudian.

Queue digunakan dalam berbagai aplikasi, seperti penjadwalan proses dalam sistem operasi,
simulasi antrian pelanggan, pemprosesan data yang membutuhkan urutan eksekusi, dan
banyak lagi. Dalam C++, C++ Standard Library menyediakan kelas ‘queue’ yang dapat
digunakan untuk mengimplementasikan antrian secara mudah. Kelas ini menyediakan
operasi-operasi seperti ‘push’untuk menambah elemen kedalam antrian, ‘pop’ untuk
menghapus elemen antrian, ‘front’untuk mengakses elemen didepan, dan ‘empty’ untuk
memeriksa apakah antrian kosong atau tidak.

Kode program :

#include <iostream>

#include <iomanip>

#include <queue>

#define SIZE 5

using namespace std;

// Deklarasi Struct

struct Mahasiswa {

string nama;

float nilai_teori;

float nilai_praktik;

Logika dan Algoritma Pemograman Page 19


float nilai_projek;

float nilai_PA;

float total;

bool operator<(const Mahasiswa& other) const {

// Menggunakan operator kurang untuk membandingkan total nilai secara menurun

return total < other.total;

};

class CircularQueue {

private:

int items[SIZE], front, rear;

float total;

public:

CircularQueue() {

front = -1;

rear = -1;

bool isFull() {

if (front == 0 && rear == SIZE - 1) {

return true;

if (front == rear + 1) {

return true;

return false;

bool isEmpty() {

Logika dan Algoritma Pemograman Page 20


if (front == -1) {

return true;

return false;

void enQueue(Mahasiswa data[], int n) {

priority_queue<Mahasiswa> pq;

for(int i=0; i<n; i++) {

data[i].total=(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai
_PA)/4;

pq.push(data[i]);

while(!pq.empty()) {

if (isFull()) {

cout << "Antrian Penuh\n";

break;

} else {

Mahasiswa mhs=pq.top();

pq.pop();

if (front == -1) {

front = 0;

rear = (rear + 1) % SIZE;

items[rear] = mhs.total;

cout << "Memasukkan " << mhs.nama << " ke dalam antrian dengan rata-
rata: " << mhs.total << endl;

Logika dan Algoritma Pemograman Page 21


}

void deQueue(Mahasiswa data[],int n) {

if (isEmpty()) {

cout << "Antrian Kosong" << endl;

} else {

float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada


front

int pos = front; //posisi nilai tertinggi

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari nilai tertinggi

if (items[i] > highest) {

highest = items[i];

pos = i;

cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest
<< "!"<<endl;

//menggeser elemen-elemen setelah posisi nilai tertinggi

for (int i = pos; i != rear; i = (i + 1) % SIZE) {

items[i] = items[(i + 1) % SIZE];

data[i] = data[(i + 1) % SIZE];

rear = (rear - 1 + SIZE)%SIZE; //mengubah posisi rear

if (front == rear) { //jika antrian kosong, mengubah nilai front dan rear menjadi -1

front = -1;

rear = -1;

Logika dan Algoritma Pemograman Page 22


void display(Mahasiswa data[],int n) {

if (isEmpty()) {

cout << "Antrian Kosong\n";

} else {

priority_queue<float> sorted; //prioritas queue untuk mengurutkan nilai rata-rata


dari yang tertinggi ke terendah

int count = (rear - front + SIZE) % SIZE + 1; //menghitung jumlah data yang masih
ada dalam antrian

for (int i = 0; i < count; i++) { //memasukkan nilai rata-rata ke dalam priority
queue

sorted.push(items[(front + i) % SIZE]);

cout << "Antrian saat ini: " << endl;

//menampilkan data dengan nilai tertinggi terlebih dahulu

while (!sorted.empty()) {

float highest = sorted.top();

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari posisi data dengan nilai
tertinggi

if (items[i] == highest) {

cout << data[i].nama << " dengan nilai rata-rata: " << items[i] << endl;

break;

sorted.pop(); //menghapus elemen pada priority queue

//menampilkan data dengan nilai terendah jika masih ada

if (front <= rear) { //jika tidak kosong

cout << data[rear].nama << " dengan nilai rata-rata: " << items[rear] << endl;

Logika dan Algoritma Pemograman Page 23


}

//menampilkan data dengan nilai terendah jika masih ada

cout << "Jumlah data dalam antrian: " << count << endl;

};

int main(){

CircularQueue q;

Mahasiswa data[5];

data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90};

data[1] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86};

data[2] = {"Auliya_Salsabilla", 79, 84, 81, 84};

data[3] = {"Elavano_Shaquille", 86, 88, 86, 76};

data[4] = {"Livia_Nathalia", 79, 81, 76, 86};

int queue;

do{

cout<<"\nPENGUMUMAN HASIL PEMENANG 1 2 3 4 5";

cout<<"\n1. Masukkan data";

cout<<"\n2. Pengumuman ";

cout<<"\n3. Lihat siapa yang belum dipanggil";

cout<<"\npilih :";cin>>queue;

if(queue==1){

q.enQueue(data,5);

else if(queue==2){
q.deQueue(data,5);

Logika dan Algoritma Pemograman Page 24


else {

q.display(data,5);

}
while(queue!=4);

Keterangan :

Program diatas merupakan program untuk mengimplementasikan struktur data queue dengan
menggunakan pendekatan circular queue pada kasus pencarian mahasiswa dengan nilai rata
rata tertinggi. Program terdiri dari 3 fungsi utama yaitu enQueue untuk memasukkan data
mahasiswa kedalam program, deQueue untuk mencari mahasiswa dengan nilai rata-rata
tertinggi dan mengeluarkannya dari antrian, serta display untuk menampilkan data mahasiswa
yang masih ada didalam antrian.

Program menggunakan struktur circular queue untuk mengatur urutan penyimpanan data
mahasiswa yang dimasukkan kedalam antrian. Sehingga setelah antrian penuh, data
mahasiswa yang baru dimasukkan akan menggantikan posisi data mahasiswa yang pertama
dimasukkan kedalam antrian.selain itu program juga menggunakan priority queue atau
antrian prioritas untuk mengurutkan data mahasiswa berdasarkan nilai rata rata yang sudah
dihitung semua nilai yang dimiliki oleh setiap mahasiswa.

Untuk metode yang digunakan adalah pendekatan Greedy, yaitu mencari mahasiswa dengan
nilai rata-rata tertinggi secara Greedy. Artinya, program akan mencari mahasiswa dengan
nilai rata-rata tertinggi tanpa mempertimbangkan nilai lainnya selain nilai tersebut.

Alur Pilihan 1 enQueue( ):

void enQueue(Mahasiswa data[], int n) {

priority_queue<Mahasiswa> pq;

for(int i=0; i<n; i++)


{ data[i].total=(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data
[i].nilai_PA)/4;

pq.push(data[i]);

while(!pq.empty()) {

Logika dan Algoritma Pemograman Page 25


if (isFull()) {

cout << "Antrian Penuh\n";

break;

} else {

Mahasiswa mhs=pq.top();

pq.pop();

if (front == -1) {

front = 0;

rear = (rear + 1) % SIZE;

items[rear] = mhs.total;

cout << "Memasukkan " << mhs.nama << " ke dalam antrian dengan rata-
rata: " << mhs.total << endl;

for(int i=0; i<n; i++) {

i=0;0<5 >ya
data[i].total=(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai
_PA)/4;

data[0].total=( 84 + 84 + 94 + 90 ) /4;>>88

i=1;1<5 >ya
data[i].total=(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai
_PA)/4;

data[1].total=( 81 + 80 + 79 + 80 ) /4;>> 81,5

return 81 < 88;(benar)

i=2;2<5 >ya
data[i].total=(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai
_PA)/4;

data[2].total=( 79 + 84 + 81 + 84 ) /4;>> 82

return 82 < 88;(benar)

Logika dan Algoritma Pemograman Page 26


return 82 <81,5;(salah)

data[1]= data[2]

posisi : data[0].total=88

data[1].total=82

data[2].total=81,5

i=3;3<5 >ya
data[i].total=(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai
_PA)/4;

data[3].total=( 86+ 88 + 86 + 76 ) /4;>> 84

return 84 < 88;(benar)

return 84 < 82;(salah)

return 84 < 81,5 (salah)

data[1]= data[3]

posisi : data[0].total=88

data[1]total=84

data[2].total=82

data[3].total=81,5

i=4;4<5 >ya
data[i].total=(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai
_PA)/4;

data[4].total=( 79 + 81 + 76 + 86 ) /4;>> 80,5

return 80,5 < 88;(benar)

return 80,5 < 84;(benar)

return 80,5 < 82 (benar)

return 80,5 < 81,5 (benar)

data[1]= data[3]

posisi : data[0].total=88

data[1]total=84

data[2].total=82

Logika dan Algoritma Pemograman Page 27


data[3].total=81,5

data[4].total=80,5

while(!pq.empty()) {

if (isFull()) { >no

cout << "Antrian Penuh\n";

break;

} else {

Mahasiswa mhs=pq.top();

pq.pop();

if (front == -1) { >ya

front = 0;

rear = (rear + 1) % SIZE;

rear = (-1 + 1) % 5;

items[0] = mhs.total;

cout << "Memasukkan " << Arra_Urraifa_Permata << " ke dalam antrian
dengan rata-rata: " << 88 << endl;

>F=0;R=0

while(!pq.empty()) {

if (isFull()) { >no

cout << "Antrian Penuh\n";

break;

} else {

Mahasiswa mhs=pq.top();

pq.pop();

if (front == -1) { >no

front = 0;

rear = (rear + 1) % SIZE;

rear = (0 + 1) % SIZE;

items[1] = mhs.total;

Logika dan Algoritma Pemograman Page 28


cout << "Memasukkan " << Arra_Urraifa_Permata << " ke dalam antrian dengan rata-rata: " <<
88 << endl;

cout << "Memasukkan " << Elavano_Shaquille << " ke dalam antrian dengan rata-rata: " << 84
<< endl;

>F=0;R=1

while(!pq.empty()) {

if (isFull()) { >no

cout << "Antrian Penuh\n";

break;

} else {

Mahasiswa mhs=pq.top();

pq.pop();

if (front == -1) { >no

front = 0;

rear = (rear + 1) % SIZE;

rear = (1 + 1) % SIZE;

items[2] = mhs.total;

cout << "Memasukkan " << Arra_Urraifa_Permata << " ke dalam antrian dengan rata-rata: " <<
88 << endl;

cout << "Memasukkan " << Elavano_Shaquille << " ke dalam antrian dengan rata-rata: " << 84
<< endl;

cout << "Memasukkan " << Auliya_Salsabilla << " ke dalam antrian dengan rata-rata: " << 82
<< endl;

>F=0;R=2

while(!pq.empty()) {

if (isFull()) { >no

cout << "Antrian Penuh\n";

break;

} else {

Mahasiswa mhs=pq.top();

pq.pop();

Logika dan Algoritma Pemograman Page 29


if (front == -1) { >no

front = 0;

rear = (rear + 1) % SIZE;

rear = (2 + 1) % SIZE;

items[3] = mhs.total;

cout << "Memasukkan " << Arra_Urraifa_Permata << " ke dalam antrian dengan rata-rata: " <<
88 << endl;

cout << "Memasukkan " << Elavano_Shaquille << " ke dalam antrian dengan rata-rata: " << 84
<< endl;

cout << "Memasukkan " << Auliya_Salsabilla << " ke dalam antrian dengan rata-rata: " << 82
<< endl;

cout << "Memasukkan " << Syazwan_Karem_Tariq << " ke dalam antrian dengan rata-rata: " <<
81,5 << endl;

>F=0;R=3

while(!pq.empty()) {

if (isFull()) { >no

cout << "Antrian Penuh\n";

break;

} else {

Mahasiswa mhs=pq.top();

pq.pop();

if (front == -1) { >no

front = 0;

rear = (rear + 1) % SIZE;

rear = (3 + 1) % SIZE;

items[4] = mhs.total;

cout << "Memasukkan " << Arra_Urraifa_Permata << " ke dalam antrian dengan rata-rata: " <<
88 << endl;

cout << "Memasukkan " << Elavano_Shaquille << " ke dalam antrian dengan rata-rata: " << 84
<< endl;

cout << "Memasukkan " << Auliya_Salsabilla << " ke dalam antrian dengan rata-rata: " << 82
<< endl;

Logika dan Algoritma Pemograman Page 30


cout << "Memasukkan " << Syazwan_Karem_Tariq << " ke dalam antrian dengan rata-rata: " <<
81,5 << endl;

cout << "Memasukkan " << Livia_Nathalia << " ke dalam antrian dengan rata-rata: " << 80,5
<< endl;

>F=0;R=4

if (isFull()) { >yes

if (front[0] == 0 && rear[4] == SIZE[5] -1) {

return true;

cout << "Antrian Penuh\n";

break;

Hasil Run :

Alur Pilihan 2 deQueue( ) :


void deQueue(Mahasiswa data[],int n) {
if (isEmpty()) {
cout << "Antrian Kosong" << endl;

} else {
float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada
front
int pos = front; //posisi nilai tertinggi

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari nilai tertinggi


if (items[i] > highest) {
highest = items[i];
pos = i;

Logika dan Algoritma Pemograman Page 31


}
}

cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest
<< "!"<<endl;

//menggeser elemen-elemen setelah posisi nilai tertinggi


for (int i = pos; i != rear; i = (i + 1) % SIZE) {
items[i] = items[(i + 1) % SIZE];
data[i] = data[(i + 1) % SIZE];
}

rear = (rear - 1 + SIZE)%SIZE; //mengubah posisi rear

if (front == rear) { //jika antrian kosong, mengubah nilai front dan rear menjadi -
1
front = -1;
rear = -1;
}
}
}

float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada front

highest = items[0] >>88

int pos = front; //posisi nilai tertinggi

pos = 0

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari nilai tertinggi

i=0;0!=4

if (items[i] > highest) {

if (88 > 88) { >no

i=1;1!=4

if (items[i] > highest) {

if (84 > 88) { >no

i=2;2!=4

if (items[i] > highest) {

if (82 > 88) { >no

i=3;3!=4

if (items[i] > highest) {

if (81,5 > 88) { >no

Logika dan Algoritma Pemograman Page 32


i=4;4!=4 >no

cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest <<
"!"<<endl;

SELAMAT KEPADA : Arra_Urraifa_Permata dengan nilai 88!

//menggeser elemen-elemen setelah posisi nilai tertinggi

for (int i = pos; i != rear; i = (i + 1) % SIZE) {

i=0;0!4;

items[i] = items[(i + 1) % SIZE];

items[0] = 84 ;

data[i] = data[(i + 1) % SIZE];

data[0] = 84;

i=1;1!4;

items[i] = items[(i + 1) % SIZE];

items[1] = 82 ;

data[i] = data[(i + 1) % SIZE];

data[1] = 82;

i=2;2!4;

items[i] = items[(i + 1) % SIZE];

items[2] = 81,5 ;

data[i] = data[(i + 1) % SIZE];

data[2] = 81,5;

i=3;3!4;

items[i] = items[(i + 1) % SIZE];

items[3] = 80,5 ;

data[i] = data[(i + 1) % SIZE];

data[3] = 80,5;

i=4;4!4; >no

Logika dan Algoritma Pemograman Page 33


rear = (rear - 1 + SIZE)%SIZE; //mengubah posisi rear

rear = (4 - 1)%SIZE;

float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada front

highest = items[0] >> 84

int pos = front; //posisi nilai tertinggi

pos = 0

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari nilai tertinggi

i=0;0!=4

if (items[i] > highest) {

if (84 > 84) { >no

i=1;1!=3

if (items[i] > highest) {

if (82 > 84) { >no

i=2;2!=3

if (items[i] > highest) {

if (81,5 > 88) { >no

i=3;3!=3 >no

cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest <<
"!"<<endl;

SELAMAT KEPADA : Elavano_Shaquille dengan nilai 84!

//menggeser elemen-elemen setelah posisi nilai tertinggi

for (int i = pos; i != rear; i = (i + 1) % SIZE) {

i=0;0!3;

items[i] = items[(i + 1) % SIZE];

items[0] = 82 ;

data[i] = data[(i + 1) % SIZE];

data[0] = 82;

Logika dan Algoritma Pemograman Page 34


i=1;1!3;

items[i] = items[(i + 1) % SIZE];

items[1] = 81,5 ;

data[i] = data[(i + 1) % SIZE];

data[1] = 81,5;

i=2;2!4;

items[i] = items[(i + 1) % SIZE];

items[2] = 80,5 ;

data[i] = data[(i + 1) % SIZE];

data[2] = 80,5;

i=3;4!4; >no

rear = (rear - 1 + SIZE)%SIZE; //mengubah posisi rear

rear = (3 - 1)%SIZE;

float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada front

highest = items[0] >> 82

int pos = front; //posisi nilai tertinggi

pos = 0

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari nilai tertinggi

i=0;0!=2

if (items[i] > highest) {

if (82 > 82) { >no

i=1;1!=2

if (items[i] > highest) {

if (81,5 > 82) { >no

i=2;2!=2 >no

cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest <<
"!"<<endl;

Logika dan Algoritma Pemograman Page 35


SELAMAT KEPADA : Auliya_Salsabilla dengan nilai 82!

//menggeser elemen-elemen setelah posisi nilai tertinggi

for (int i = pos; i != rear; i = (i + 1) % SIZE) {

i=0;0!2;

items[i] = items[(i + 1) % SIZE];

items[0] = 81,5 ;

data[i] = data[(i + 1) % SIZE];

data[0] = 81,5;

i=1;1!2;

items[i] = items[(i + 1) % SIZE];

items[1] = 80,5 ;

data[i] = data[(i + 1) % SIZE];

data[1] = 80,5;

i=2;2!2; >no

rear = (rear - 1 + SIZE)%SIZE; //mengubah posisi rear

rear = (2 - 1)%SIZE;

float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada front

highest = items[0] >> 81,5

int pos = front; //posisi nilai tertinggi

pos = 0

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari nilai tertinggi

i=0;0!=1

if (items[i] > highest) {

if (81,5> 81,5) { >no

i=1;1!=1 >no

cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest <<
"!"<<endl;

SELAMAT KEPADA : Syazwan_Karem_Tariq dengan nilai 81!

//menggeser elemen-elemen setelah posisi nilai tertinggi

Logika dan Algoritma Pemograman Page 36


for (int i = pos; i != rear; i = (i + 1) % SIZE) {

i=0;0!1;

items[i] = items[(i + 1) % SIZE];

items[0] = 80,5 ;

data[i] = data[(i + 1) % SIZE];

data[0] = 80,5;

i=1;1!1; >no

catatan : untuk elemen yang dikeluarkan hanya bisa sampai 4 elemen, elemen terakhir bisa
dikeluarkan dengan cara memasukkan nya lagi menggunakan fungsi enQueue.

Hasil Run :

Logika dan Algoritma Pemograman Page 37


BAB VI
PERANCANG DAN PEMBAHASAN
Dari pembahasan yang atas dapat dibuat menjadi satu projek yaitu pengolahan data peserta top 5
olimpiade. Program yang nantiya akan menjadi satu kesatuan yang dapat membangun kemudahan
panitia dalam menghitung dan mengakses data data peserta olimpiade pemrograman tersebut berikut
Hal – Hal yang dibutuhkan :

1. Data yang dibutuhkan :


 Nama Peserta
 Nilai Peserta

Data yang dipakai adalah data sekunder, diperoleh dari dokumen pendaftaran atau
literature yang ada hubungan dengan masalah yang dihadapi, terutama pembuatan
program dengan sistem informasi pendataan dan penilaian peserta olimpiade.

2. Bahan yang digunakan :


a. Struct
Struct digunakan untuk menampilkan nama nama peserta dan nilai-nilai yang
diperoleh oleh peserta.
b. Sorting
Sorting digunakan untuk mendata nilai nilai peserta dan memproses hasil dari
rata rata nilai peserta kemudian mengurutkan nya sesuai perolehan nilai
tertinggi.
c. Searching
Digunakan untuk mencari data peserta yang telah diurutkan.
d. Array

Logika dan Algoritma Pemograman Page 38


Suatu tipe data terstuktur yang dapat disimpan banyak data dengan suatu nama
yang sama dan menempati tempat dimemori yang berurutan serta bertipe yang
sama pula
e. Queue
Jenis queue yang digunakan pada program tersebut adalah priority queue,
yang mana nilai peserta tertinggi akan menempatkan posisi paling awal
(depan), oleh karena itu peserta yang mempunyai nilai tertinggi berhak untuk
keluar duluan.

3. Kode Program :
Program dibawah ini adalah sebuah program yang mengelola data nilai mahasiswa dalam
suatu olimpiade pemrograman. Program ini memiliki fitur, antara lain :

 Menampilkan data nilai keseluruhan: program ini dapat menampilkan daftar nilai
dari seluruh mahasiswa yang terlibat dalam olimpiade pemrograman.
 Melakukan peringkatan nilai peserta : program ini dapat mengurutkan peserta
berdasarkan rata-rata nilai mereka dari yang tertinggi ke terendah.
 Pencarian data peserta : program ini dapat mencari data mahasiswa berdasarkan
nama mereka.
 Pengumuman hasil pemenang : program ini dapat melakukan pengumuman hasil
pemenang berdasarkan urutan antrian peserta. Peserta dengan nilai tertinggi akan
diumumkan sebagai pemenang.

Program ini menggunakan strukur data antrian melingkar (circular queue) untuk
mengelola antrian peserta. Antrian ini diurutkan berdasarkan rata-rata nilai peserta.
#include <iostream>
#include <iomanip>
#include <queue>
#include <functional>
#define SIZE 5
using namespace std;

// Deklarasi Struct
struct Mahasiswa {
string nama;
float nilai_teori;
float nilai_praktik;
float nilai_projek;
float nilai_PA;
float total;
bool operator<(const Mahasiswa& other) const {
// Menggunakan operator kurang untuk membandingkan total nilai secara menurun
return total < other.total;
}
};

// Fungsi untuk menampilkan data

Logika dan Algoritma Pemograman Page 39


void datadata(Mahasiswa data[], int n) {
cout<<"|=======================================================================|";
cout<<"\n|=============Nama==============|
===============Nilai===================|"<<endl;
cout<<"|==========Mahasiswa============| teori\t Praktik\tProjek\t PA\t|"<<endl;
cout<<"| |
=======================================|"<<endl;
for(int i=0; i<n; i++) {
cout <<"|"<<i+1<<"."<<data[i].nama<<setw(10)<<"\
t|"<<setw(6)<<data[i].nilai_teori<<"\t"<<setw(8)<<data[i].nilai_praktik<<"\t "
<<data[i].nilai_projek<<"\t "<<data[i].nilai_PA<<"\t|"<<endl;
}
cout<<"|
=======================================================================|"<<endl;
}

// Fungsi untuk sorting rata-rata nilai mahasiswa


void sorting_rata_rata_mahasiswa(Mahasiswa data[], int n) {
float total, average_tp_siswa[n];
int x;
int counter;

// Hitung rata-rata masing-masing mahasiswa


total= 0;
for( x=0; x<n; x++ )
{
counter = 0;
total = data[x].nilai_teori+ data[x].nilai_praktik + data[x].nilai_projek +
data[x].nilai_PA;
counter = 4;
average_tp_siswa[x] = total/counter;
total = 0;
}

// Sorting rata-rata nilai mahasiswa


for(int i=0; i<n-1; i++) {
for(int j=i+1; j<n; j++) {
if(average_tp_siswa[j]>average_tp_siswa[i]) {
float temp = average_tp_siswa[i];
average_tp_siswa[i] = average_tp_siswa[j];
average_tp_siswa[j] = temp;

Mahasiswa temp_mahasiswa = data[i];


data[i] = data[j];
data[j] = temp_mahasiswa;
}
}
}

// Tampilkan hasil sorting


cout<<"HASIL PERINGKAT RATA-RATA NILAI PESERTA :\n";
for(int i=0; i<n; i++) {
cout<<i+1<<". "<<data[i].nama<<setw(9)<<"\t"<<" dengan rata-rata nilai
"<<average_tp_siswa[i]<<endl;
}
}

// Fungsi untuk mencari data mahasiswa berdasarkan nama


void search_data(Mahasiswa data[], int n) {
string keyword;
bool found = false;
cout<<"Masukkan nama yang ingin dicari: ";
cin>>keyword;

Logika dan Algoritma Pemograman Page 40


for(int i=0; i<n; i++) {
if(data[i].nama==keyword) {
found = true;
cout<<"\nNama: "<<data[i].nama<<endl;
cout<<"Rata-rata nilai:
"<<(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].nilai_PA)/
4<<endl;
break;
}
}

if(!found) {
cout<<"\nData tidak ditemukan"<<endl;
}
}

class CircularQueue {
private:
int items[SIZE], front, rear;
float total;

public:
CircularQueue() {
front = -1;
rear = -1;
}

bool isFull() {
if (front == 0 && rear == SIZE - 1) {
return true;
}
if (front == rear + 1) {
return true;
}
return false;
}

bool isEmpty() {
if (front == -1) {
return true;
}
return false;
}

void enQueue(Mahasiswa data[], int n) {


priority_queue<Mahasiswa> pq;
for(int i=0; i<n; i++) {

data[i].total=(data[i].nilai_teori+data[i].nilai_praktik+data[i].nilai_projek+data[i].n
ilai_PA)/4;
pq.push(data[i]);
}
while(!pq.empty()) {
if (isFull()) {
cout << "Antrian Penuh\n";
break;
} else {
Mahasiswa mhs=pq.top();
pq.pop();
if (front == -1) {

Logika dan Algoritma Pemograman Page 41


front = 0;
}
rear = (rear + 1) % SIZE;
items[rear] = mhs.total;
cout << "Memasukkan " << mhs.nama << " ke dalam antrian dengan
rata-rata: " << mhs.total << endl;
}
}
}

void deQueue(Mahasiswa data[],int n) {


if (isEmpty()) {
cout << "Antrian Kosong" << endl;

} else {
float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada
front
int pos = front; //posisi nilai tertinggi

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari nilai tertinggi


if (items[i] > highest) {
highest = items[i];
pos = i;

}
}

cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<<
highest << "!"<<endl;

//menggeser elemen-elemen setelah posisi nilai tertinggi


for (int i = pos; i != rear; i = (i + 1) % SIZE) {
items[i] = items[(i + 1) % SIZE];
data[i] = data[(i + 1) % SIZE];
}

rear = (rear - 1 + SIZE)%SIZE; //mengubah posisi rear

if (front == rear) { //jika antrian kosong, mengubah nilai front dan rear
menjadi -1
front = -1;
rear = -1;
}
}
}

void display(Mahasiswa data[],int n) {


if (isEmpty()) {
cout << "Antrian Kosong\n";
} else {
priority_queue<float> sorted; //prioritas queue untuk mengurutkan nilai rata-
rata dari yang tertinggi ke terendah
int count = (rear - front + SIZE) % SIZE + 1; //menghitung jumlah data yang
masih ada dalam antrian

for (int i = 0; i < count; i++) { //memasukkan nilai rata-rata ke dalam


priority queue
sorted.push(items[(front + i) % SIZE]);
}

cout << "Antrian saat ini: " << endl;

//menampilkan data dengan nilai tertinggi terlebih dahulu

Logika dan Algoritma Pemograman Page 42


while (!sorted.empty()) {
float highest = sorted.top();

for (int i = front; i != rear; i = (i + 1) % SIZE) { //mencari posisi data


dengan nilai tertinggi
if (items[i] == highest) {
cout << data[i].nama << " dengan nilai rata-rata: " << items[i] <<
endl;
break;
}
}

sorted.pop(); //menghapus elemen pada priority queue


}
//menampilkan data dengan nilai terendah jika masih ada

if (front <= rear) { //jika tidak kosong

cout << data[rear].nama << " dengan nilai rata-rata: " << items[rear] << endl;

//menampilkan data dengan nilai terendah jika masih ada


cout << "Jumlah data dalam antrian: " << count << endl;
}
}

};

int main (){


CircularQueue q;
// Inisialisasi data mahasiswa dengan struct
Mahasiswa data[5];
data[0] = {"Arra_Urraifa_Permata", 84, 84, 94, 90};
data[1] = {"Syazwan_Karem_Tariq", 81, 80, 79, 86};
data[2] = {"Auliya_Salsabilla", 79, 84, 81, 84};
data[3] = {"Elavano_Shaquille", 86, 88, 86, 76};
data[4] = {"Livia_Nathalia", 79, 81, 76, 86};

int pilihan;
int queue;
do{

cout<<"\n|----------------------------------------------------------|";
cout<<"\n|========= TOP 5 OLIMPIADE PEMROGRAMAN PRODI MI ===========|";
cout<<"\n|----------------------------------------------------------|";
cout<<"\n| 1. DATA NILAI KESELURUHAN\t\t\t\t |";
cout<<"\n| 2. PERINGKAT NILAI PESERTA\t\t\t\t |";
cout<<"\n| 3. PENCARIAN DATA PESERTA \t\t\t\t |";
cout<<"\n| 4. PENGUMUMAN HASIL PEMENANG 1 2 3 4 5 \t\t |";
cout<<"\n|----------------------------------------------------------|";
cout<<"\nPilihan Anda : ";cin>>pilihan;

switch (pilihan){
case 1:
cout<<"\nDAFTAR NILAI TEST \n";
datadata(data, 5);
break;
case 2:

Logika dan Algoritma Pemograman Page 43


sorting_rata_rata_mahasiswa(data, 5);
break;
case 3:
search_data(data, 5);
break;
case 4: do{

cout<<"\nPENGUMUMAN HASIL PEMENANG 1 2 3 4 5";


cout<<"\n1. Masukkan data";

cout<<"\n2. Pengumuman ";

cout<<"\n3. Lihat siapa yang belum dipanggil";

cout<<"\npilih :";cin>>queue;

if(queue==1){
q.enQueue(data,5);
}

else if(queue==2){

q.deQueue(data,5);

else {

q.display(data,5);

}while(queue!=4);
break;
default:
cout<<"\nData yang dipilih tidak tersedia"<<endl;
}
}while(pilihan!=4);
return 0;
}

Logika dan Algoritma Pemograman Page 44


Kesimpulan

Program ini diberikan kemudahan dalam mengelola data nilai peserta olimpiade
pemrograman. Dengan fitur-fitur yang disediakan, program ini memungkinkan pengguna
untuk melihat data nilai keseluruhan, melakukam peringkat peserta berdasarkan nilai,
mencari data peserta, dan mengumumka hasil pemenang. Dengan adanya struktur data
antrian melingkar, program ini juga memastikan peserta dengan nilai tertinggi
mendapatkan pengumuman terlebih dahulu.

Program ini dapat digunakan sebagai alat bantu dalam mengelola dan mengorganisir data
nilai peserta dalam olimpiade pemrograman. Dengan struktur yang terorganisir dan fitur –
fitur yang disediakan, program ini membantu mempermudah proses pengelolahn data
pengumuman hasil pemenanng.

Logika dan Algoritma Pemograman Page 45

Anda mungkin juga menyukai