Anda di halaman 1dari 4

Implementasi algoritma sort (Buble)

Program Buble sort


#include <iostream>
#include <string>
#include <limits>

struct Mahasiswa {
std::string nama;
int nim;
float nilai;
};

void bubbleSort(Mahasiswa arr[], int n) {


for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j].nilai < arr[j + 1].nilai) {
// Tukar elemen jika nilai mahasiswa saat ini lebih kecil dari nilai mahasiswa berikutnya
Mahasiswa temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

void displayMahasiswa(Mahasiswa arr[], int n) {


std::cout << "Daftar Mahasiswa:\n";
std::cout << "------------------------------------\n";
std::cout << "No.\tNIM\t\tNama\t\tNilai\n";
std::cout << "------------------------------------\n";

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


std::cout << i + 1 << "\t" << arr[i].nim << "\t\t" << arr[i].nama << "\t\t" << arr[i].nilai << "\n";
}

std::cout << "------------------------------------\n";


}

int main() {
const int jumlahMahasiswa = 3;
Mahasiswa dataMahasiswa[jumlahMahasiswa];

// Memasukkan data mahasiswa


std::cout << "Masukkan data mahasiswa:\n";
for (int i = 0; i < jumlahMahasiswa; i++) {
std::cout << "Mahasiswa " << i + 1 << ":\n";
std::cout << "NIM: ";
while (!(std::cin >> dataMahasiswa[i].nim)) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Masukkan NIM yang valid: ";
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Membersihkan newline dari buffer

std::cout << "Nama: ";


std::getline(std::cin, dataMahasiswa[i].nama);

std::cout << "Nilai: ";


while (!(std::cin >> dataMahasiswa[i].nilai)) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Masukkan nilai yang valid: ";
}
std::cout << "\n";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Membersihkan newline dari buffer
}

int pilihanMenu;
do {
// Menampilkan menu
std::cout << "\nMenu:\n";
std::cout << "1. Tampilkan Data Mahasiswa\n";
std::cout << "2. Urutkan Data Mahasiswa berdasarkan Nilai\n";
std::cout << "0. Keluar\n";
std::cout << "Pilih: ";

// Memproses pilihan menu


while (!(std::cin >> pilihanMenu)) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Masukkan pilihan yang valid: ";
}

switch (pilihanMenu) {
case 1:
// Menampilkan data mahasiswa
displayMahasiswa(dataMahasiswa, jumlahMahasiswa);
break;
case 2:
// Mengurutkan data mahasiswa berdasarkan nilai
bubbleSort(dataMahasiswa, jumlahMahasiswa);
std::cout << "\nData mahasiswa setelah diurutkan berdasarkan nilai:\n";
displayMahasiswa(dataMahasiswa, jumlahMahasiswa);
break;
case 0:
// Keluar dari program
std::cout << "Terima kasih!\n";
break;
default:
std::cout << "Pilihan tidak valid. Silakan coba lagi.\n";
}

} while (pilihanMenu != 0);

return 0;
}
Penjelasan program

Program ini adalah sebuah program C++ yang melakukan manajemen data mahasiswa.
program mendefinisikan sebuah struktur bernama `Mahasiswa` yang memiliki tiga anggota:
`nama` (string), `nim` (integer), dan `nilai` (float). Ini digunakan untuk menyimpan informasi
tentang setiap mahasiswa. Ada fungsi bernama `bubbleSort` yang menggunakan algoritma
bubble sort untuk mengurutkan array dari objek `Mahasiswa` berdasarkan nilai mereka
secara descending. Ini digunakan ketika pengguna memilih opsi untuk mengurutkan data
mahasiswa.Program meminta pengguna untuk memasukkan data mahasiswa, seperti NIM,
nama, dan nilai. Ada validasi input untuk memastikan bahwa NIM dan nilai yang dimasukkan
adalah nilai yang valid.Terdapat loop utama (`do-while`) yang menampilkan menu utama
kepada pengguna. Menu tersebut mencakup opsi untuk menampilkan data mahasiswa,
mengurutkan data berdasarkan nilai, dan keluar dari program

Pengguna memilih opsi melalui switch case, dan setiap case memanggil fungsi yang
sesuai (menampilkan data atau mengurutkannya). Jika pengguna memilih untuk keluar
(pilihan 0), program akan memberikan pesan terima kasih dan keluar dari loop. Fungsi
`displayMahasiswa` digunakan untuk menampilkan data mahasiswa dalam format yang rapi,
termasuk nomor, NIM, nama, dan nilai mahasiswa Ada validasi input untuk memastikan
bahwa NIM dan nilai yang dimasukkan oleh pengguna adalah nilai yang valid. Jika
pengguna memasukkan nilai yang tidak valid, program memberikan pesan dan meminta
input ulang.

Program berjalan dalam loop hingga pengguna memilih untuk keluar (memasukkan pilihan
0). Loop ini memberikan pengguna opsi untuk terus menjelajahi menu, menampilkan data
mahasiswa, dan melakukan operasi pengurutan. Terdapat penanganan kesalahan input
menggunakan `std::cin.clear()` dan `std::cin.ignore()` untuk mengatasi input yang tidak valid
dan membersihkan buffer. Program mengembalikan nilai 0 dari fungsi `main` sebagai tanda
bahwa program selesai dijalankan tanpa masalah.

penjelasan tiap baris program

#include <iostream>
#include <string>
#include <limits>

● Baris ini merupakan inklusi beberapa header file. `iostream` digunakan untuk operasi
input/output, `string` untuk menggunakan tipe data string, dan `limits` untuk
mengakses nilai-nilai batas dari tipe data

struct Mahasiswa {
std::string nama;
int nim;
float nilai;
};
● Mendefinisikan sebuah struktur `Mahasiswa` yang memiliki tiga anggota: `nama`
(string), `nim` (integer), dan `nilai` (float).

void bubbleSort(Mahasiswa arr[], int n) {


for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j].nilai < arr[j + 1].nilai) {
Mahasiswa temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

● Fungsi `bubbleSort` menggunakan algoritma sorting bubble sort untuk mengurutkan


array `arr` yang berisi objek-objek `Mahasiswa` berdasarkan nilai mereka secara
descending.

void displayMahasiswa(Mahasiswa arr[], int n) {


// ...
}

● Fungsi `displayMahasiswa` digunakan untuk menampilkan data mahasiswa yang


disimpan dalam array `arr`.

int main() {
const int jumlahMahasiswa = 3;
Mahasiswa dataMahasiswa[jumlahMahasiswa];
// ...
}`

● Fungsi `main` adalah tempat eksekusi utama program. Membuat array


`dataMahasiswa` yang dapat menampung `jumlahMahasiswa` objek `Mahasiswa`
std::cout << "Masukkan data mahasiswa:\n";
for (int i = 0; i < jumlahMahasiswa; i++) {
// ...
}
```
● Memulai loop untuk meminta input data mahasiswa dari pengguna sebanyak
`jumlah Mahasiswa`.

while (!(std::cin >> dataMahasiswa[i].nim)) {


// ...
}
● Menggunakan loop untuk memastikan input NIM yang valid, dengan penanganan
error jika pengguna memasukkan nilai yang tidak valid.

std::getline(std::cin, dataMahasiswa[i].nama);

● Menggunakan `std::getline` untuk membaca nama mahasiswa, karena nama dapat


mengandung spasi.

while (!(std::cin >> dataMahasiswa[i].nilai)) {


// ...
}

● Loop yang serupa untuk memastikan input nilai yang valid.

int pilihanMenu;
do {
// ...
} while (pilihanMenu != 0);
```
● Loop `do-while` untuk menampilkan menu dan menjalankan operasi terkait sampai
pengguna memilih untuk keluar (pilihanMenu == 0).

switch (pilihanMenu) {
// ...
}
● Menggunakan `switch` untuk memproses pilihan menu yang dimasukkan pengguna.

return 0;
}
```
● Mengembalikan nilai 0 sebagai tanda bahwa program selesai dengan sukses.

TAMPILAN OUTPUT

Anda mungkin juga menyukai