STRUKTUR DATA
Disusun untuk memenuhi tugas
Oleh :
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.
JUDUL
BAB I
PENDAHULUAN ............................................................................................................... 2
BAB II
Struct .................................................................................................................................... 3
BAB III
Sorting .................................................................................................................................. 6
BAB IV
Serching ............................................................................................................................... 13
BAB V
BAB VI
Kesimpulan
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.
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.
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>
// Deklarasi Struct
struct Mahasiswa {
string nama;
float nilai_teori;
float nilai_praktik;
float nilai_PA;
float total;
};
cout<<"|=======================================================================|";
cout<<"\n|=============Nama==============|===============Nilai===================|"<<endl;
cout<<"| |=======================================|"<<endl;
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];
datadata(data,5);
Hasil Run :
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 :
BAB III
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;
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;
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;
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;
Posisi :
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;
Posisi :
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;
Posisi :
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
i=0;0<5;
i=1;1<5;
i=2;2<5;
i=3;3<5;
i=5;5<5; >no
Hasil Run :
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>
// Deklarasi Struct
struct Mahasiswa {
string nama;
float nilai_teori;
float nilai_praktik;
float nilai_projek;
float nilai_PA;
float total;
string keyword;
cin>>keyword;
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) {
int main(){
Mahasiswa 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 :
string keyword;
cin>>keyword;
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) {
cin>>keyword;
i=0;0<5; >no
if(data[i].nama==keyword) {
i=1;1<5; >no
if(data[i].nama==keyword) {
i=2;2<5; >no
if(data[i].nama==keyword) {
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
Hasil Run :
cin>>keyword;
i=0;0<5; >no
if(data[i].nama==keyword) {
i=1;1<5; >no
if(data[i].nama==keyword) {
i=2;2<5; >no
if(data[i].nama==keyword) {
i=3;3<5; >no
if(data[i].nama==keyword) {
if(data[i].nama==keyword) {
i=5;5<5; >no
if(!found) {
}}
Hasil run :
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
// Deklarasi Struct
struct Mahasiswa {
string nama;
float nilai_teori;
float nilai_praktik;
float nilai_PA;
float total;
};
class CircularQueue {
private:
float total;
public:
CircularQueue() {
front = -1;
rear = -1;
bool isFull() {
return true;
if (front == rear + 1) {
return true;
return false;
bool isEmpty() {
return true;
return false;
priority_queue<Mahasiswa> pq;
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()) {
break;
} else {
Mahasiswa mhs=pq.top();
pq.pop();
if (front == -1) {
front = 0;
items[rear] = mhs.total;
cout << "Memasukkan " << mhs.nama << " ke dalam antrian dengan rata-
rata: " << mhs.total << endl;
if (isEmpty()) {
} else {
highest = items[i];
pos = i;
cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest
<< "!"<<endl;
if (front == rear) { //jika antrian kosong, mengubah nilai front dan rear menjadi -1
front = -1;
rear = -1;
if (isEmpty()) {
} else {
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]);
while (!sorted.empty()) {
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;
cout << data[rear].nama << " dengan nilai rata-rata: " << items[rear] << endl;
cout << "Jumlah data dalam antrian: " << count << endl;
};
int main(){
CircularQueue q;
Mahasiswa data[5];
int queue;
do{
cout<<"\npilih :";cin>>queue;
if(queue==1){
q.enQueue(data,5);
else if(queue==2){
q.deQueue(data,5);
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.
priority_queue<Mahasiswa> pq;
pq.push(data[i]);
while(!pq.empty()) {
break;
} else {
Mahasiswa mhs=pq.top();
pq.pop();
if (front == -1) {
front = 0;
items[rear] = mhs.total;
cout << "Memasukkan " << mhs.nama << " ke dalam antrian dengan rata-
rata: " << mhs.total << endl;
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;
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
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[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[1]= data[3]
posisi : data[0].total=88
data[1]total=84
data[2].total=82
data[4].total=80,5
while(!pq.empty()) {
if (isFull()) { >no
break;
} else {
Mahasiswa mhs=pq.top();
pq.pop();
front = 0;
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
break;
} else {
Mahasiswa mhs=pq.top();
pq.pop();
front = 0;
rear = (0 + 1) % SIZE;
items[1] = mhs.total;
cout << "Memasukkan " << Elavano_Shaquille << " ke dalam antrian dengan rata-rata: " << 84
<< endl;
>F=0;R=1
while(!pq.empty()) {
if (isFull()) { >no
break;
} else {
Mahasiswa mhs=pq.top();
pq.pop();
front = 0;
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
break;
} else {
Mahasiswa mhs=pq.top();
pq.pop();
front = 0;
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
break;
} else {
Mahasiswa mhs=pq.top();
pq.pop();
front = 0;
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;
cout << "Memasukkan " << Livia_Nathalia << " ke dalam antrian dengan rata-rata: " << 80,5
<< endl;
>F=0;R=4
if (isFull()) { >yes
return true;
break;
Hasil Run :
} else {
float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada
front
int pos = front; //posisi nilai tertinggi
cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest
<< "!"<<endl;
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
pos = 0
i=0;0!=4
i=1;1!=4
i=2;2!=4
i=3;3!=4
cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest <<
"!"<<endl;
i=0;0!4;
items[0] = 84 ;
data[0] = 84;
i=1;1!4;
items[1] = 82 ;
data[1] = 82;
i=2;2!4;
items[2] = 81,5 ;
data[2] = 81,5;
i=3;3!4;
items[3] = 80,5 ;
data[3] = 80,5;
i=4;4!4; >no
rear = (4 - 1)%SIZE;
float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada front
pos = 0
i=0;0!=4
i=1;1!=3
i=2;2!=3
i=3;3!=3 >no
cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest <<
"!"<<endl;
i=0;0!3;
items[0] = 82 ;
data[0] = 82;
items[1] = 81,5 ;
data[1] = 81,5;
i=2;2!4;
items[2] = 80,5 ;
data[2] = 80,5;
i=3;4!4; >no
rear = (3 - 1)%SIZE;
float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada front
pos = 0
i=0;0!=2
i=1;1!=2
i=2;2!=2 >no
cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest <<
"!"<<endl;
i=0;0!2;
items[0] = 81,5 ;
data[0] = 81,5;
i=1;1!2;
items[1] = 80,5 ;
data[1] = 80,5;
i=2;2!2; >no
rear = (2 - 1)%SIZE;
float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada front
pos = 0
i=0;0!=1
i=1;1!=1 >no
cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<< highest <<
"!"<<endl;
i=0;0!1;
items[0] = 80,5 ;
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 :
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.
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;
}
};
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;
}
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) {
} else {
float highest = items[front]; //inisialisasi nilai tertinggi dengan nilai pada
front
int pos = front; //posisi nilai tertinggi
}
}
cout << endl << "SELAMAT KEPADA : " << data[pos].nama <<" dengan nilai "<<
highest << "!"<<endl;
if (front == rear) { //jika antrian kosong, mengubah nilai front dan rear
menjadi -1
front = -1;
rear = -1;
}
}
}
cout << data[rear].nama << " dengan nilai rata-rata: " << items[rear] << endl;
};
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:
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;
}
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.