SHARE
TWEET

Untitled

a guest May 22nd, 2019 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. //Data nama utama, hanya bisa diubah secara manual oleh user (hanya dibaca saat pengurutan).
  7. string nama_mahasiswa[5];
  8. //deklarasi fungsi
  9. void bubbleSort(string *nama, int jumlah, bool isAscending);
  10. void selectionSort(string *nama, int jumlah, bool isAscending);
  11. void insertionSort(string *nama, int jumlah, bool isAscending);
  12. void dataBaru(string *nama, int jumlah);
  13. void printListNama(string *nama, int jumlah, string pesan);
  14.  
  15. //memindahkan data string pada dua index array(string arg1, string arg2)
  16. template <typename T>
  17. void balik(T& a, T& b) {
  18.     T temp;
  19.     temp = a;
  20.     a = b;
  21.     b = temp;
  22. }
  23.  
  24. int main() {
  25.     //char nama[5][30], temp[30];
  26.     char edit, sort='6';
  27.     string nama[5];
  28.     int jumlah = sizeof(nama) / sizeof(nama[5]);
  29.  
  30.     //Nilai awal / default untuk test
  31.     nama_mahasiswa[0] = "Badut Al Antomroh Rohmanto";
  32.     nama_mahasiswa[1] = "Fredi Aelach Halah Mboh";
  33.     nama_mahasiswa[2] = "Ratno Dutro Adja";
  34.     nama_mahasiswa[3] = "Budie Hernandez";
  35.     nama_mahasiswa[4] = "Ulul-Azmi Slankers";
  36. edit:
  37.     system("cls");
  38.     //List nama mahasiswa default
  39.     printListNama(nama_mahasiswa, jumlah, " Nama mahasiswa saat ini : ");
  40.  
  41.     //pilihan edit data, user memasukkan semua nama jika pilihan 'n'
  42.     cout << "\n[!] Ketik 'O' lanjut atau 'N' input data baru : "; cin >> edit;
  43.     switch (tolower(edit))
  44.     {
  45.     case 'o':
  46.     case '0':
  47.         goto next;
  48.         break;
  49.     case 'n':
  50.         dataBaru(nama, jumlah);
  51.         break;
  52.     default:
  53.         goto next;
  54.         break;
  55.     }
  56.  
  57. next:
  58.     //menyalin data utama yang nilainya belum berubah
  59.     for (int i = 0; i < jumlah; i++)
  60.         nama[i] = nama_mahasiswa[i];
  61.  
  62.     system("cls");
  63.  
  64.     //menampilkan list nama sebelum disorting
  65.     printListNama(nama, jumlah, "Nama mahasiswa sebelum disorting : ");
  66.  
  67.     //pilihan menu
  68.     switch (sort)
  69.     {
  70.     case '0':
  71.         sort = '6';
  72.         goto edit;
  73.         break;
  74.     case '1':
  75.         bubbleSort(nama, jumlah, true);
  76.         break;
  77.     case '2':
  78.         bubbleSort(nama, jumlah, false);
  79.         break;
  80.     case '3':
  81.         selectionSort(nama, jumlah, true);
  82.         break;
  83.     case '4':
  84.         selectionSort(nama, jumlah, false);
  85.         break;
  86.     case '5':
  87.         insertionSort(nama, jumlah, true);
  88.         break;
  89.     case '6':
  90.         insertionSort(nama, jumlah, false);
  91.         break;
  92.     default:
  93.         system("cls");
  94.         cout << "[!] Pilihan yang dimasukkan tidak tersedia\n"
  95.             << "Silakan ulangi inputan" << endl;
  96.         goto menu;
  97.         break;
  98.     }
  99.  
  100.     //menampilkan list nama setelah disorting
  101.     printListNama(nama, jumlah, "\nNama mahasiswa setelah disorting : ");
  102.     menu:
  103.     //menampilkan list pilihan menu yang tersedia dan inputannya
  104.     cout << "\n\n================ MENU PENGURUTAN ================\n"
  105.          << " 1. Bubble sort (Ascending)\n"
  106.          << " 2. Bubble sort (Descending)\n"
  107.          << " 3. Selection sort (Ascending)\n"
  108.          << " 4. Selection sort (Descending)\n"
  109.          << " 5. Insertion sort (Ascending)\n"
  110.          << " 6. Insertion sort (Descending){ :default }\n"
  111.          << "=============== 0 Input Data Baru ===============\n"
  112.         << "Pilihan : "; cin >> sort;
  113.     goto next;
  114. }
  115.  
  116. // 11.12.5800
  117.  
  118. void bubbleSort(string *nama, int jumlah, bool isAscending = true) {
  119.     for (int i = 0; i < jumlah; i++)
  120.         for (int j = 0; j < jumlah - 1 - i; j++)
  121.                 //nama[j] harus lebih besar dari nama[j+1] agar nilainya 1
  122.                 if (isAscending ? nama[j].compare(nama[j + 1]) > 0 : nama[j].compare(nama[j + 1]) < 0)
  123.                     balik(nama[j], nama[j + 1]);//menukar nilai string nama
  124.     string apa = isAscending ? "Ascending" : "Descending";
  125.     cout << "\n[!] Nama diurutkan menggunakan Bubble Sort ( "<<apa<<" ) " << endl;
  126. }
  127.  
  128. void selectionSort(string *nama, int jumlah, bool isAscending = true) {
  129.     int belumDisorting = jumlah;//jumlah n index yang belum disorting
  130.     for (int i = 0; i <jumlah; i++)
  131.     {
  132.         int maxmin = 0;
  133.         for (int j = 0; j < belumDisorting; j++)
  134.             //nama[j] harus lebih besar dari nama[max] agar nilainya 1
  135.             if (isAscending ? nama[j].compare(nama[maxmin]) > 0 : nama[j].compare(nama[maxmin]) < 0)
  136.                 maxmin = j;
  137.  
  138.         balik(nama[maxmin], nama[belumDisorting - 1]);
  139.         belumDisorting--;
  140.     }
  141.     string apa = isAscending ? "Ascending" : "Descending";
  142.     cout << "\n[!] Nama diurutkan menggunakan Selection Sort ( "<<apa<<" ) " << endl;
  143. }
  144.  
  145. void insertionSort(string *nama, int jumlah, bool isAscending = true) {
  146.     string temp;
  147.     for (int i = 0; i < jumlah; i++)
  148.     {
  149.         int n = i;
  150.         //index pertama dianggap urut (n>0)
  151.         //nama[n] harus lebih kecil/sama dengan nama[n-1]
  152.         //agar nilainya lbh kecil/sama dgn 0
  153.         while (n>0 && (isAscending ? nama[n].compare(nama[n - 1]) <= 0 : nama[n].compare(nama[n - 1]) >= 0))
  154.         {
  155.             balik(nama[n], nama[n - 1]);
  156.             n--;
  157.         }
  158.     }
  159.     string apa = isAscending ? "Ascending" : "Descending";
  160.     cout << "\n[!] Nama diurutkan menggunakan Insertion Sort ( "<<apa<<" ) " << endl;
  161. }
  162.  
  163. //Mengubah semua data lama ke data baru yang diinputkan user(string arg ... arg-n, int jumlah)
  164. void dataBaru(string *nama, int jumlah) {
  165.     cout << "\nMasukkan 5 nama teman anda :" << endl;
  166.     for (int i = 0; i < jumlah; i++) {
  167.         cout << "nama_mahasiswa[" << i << "] = "; cin >> nama_mahasiswa[i];
  168.     }
  169. }
  170.  
  171. //menampilkan daftar nama
  172. void printListNama(string *nama, int jumlah, string pesan) {
  173.     cout <<pesan << endl;
  174.     for (int i = 0; i < jumlah; i++)
  175.          cout << " " << i + 1 << ". " << nama[i] << endl;
  176. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top