Advertisement
remshixi

Soal3_Stack_Array

May 21st, 2024
451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.86 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int first = -1;
  5.  
  6. /* Fungsi push, menambahkan data pada index 0 */
  7. void push(int size, int input, string arr[])
  8. {
  9.     int t;
  10.     if (input > size-first)
  11.     {
  12.         cout << "Jumlah data yang ingin dimasukkan melebihi kapasitas stack." << endl;
  13.         cin.ignore();
  14.         return;
  15.     }
  16.  
  17.     if (arr[0] == "") // ketika arrat masih kosong, buat ngawali nilai fisrt
  18.     {
  19.         cout << "Data ke-1: ";
  20.         getline(cin >> ws, arr[0]);
  21.         input--;
  22.         first++;
  23.     }
  24.    
  25.     if (first == 0) // ketika array masih berisi 1, masukkan data ke-2
  26.     {
  27.         arr[first + 1] = arr[first];
  28.         cout << "Data ke-2: ";
  29.         getline(cin >> ws, arr[0]);
  30.         input--;
  31.         first++;
  32.     }
  33.  
  34.     t = first + 2;
  35.     while (first != 0 && input > 0) // ketika array sudah berisi lebih dari 2, masukkan data ke-3 dst
  36.     {
  37.         arr [first + 1] = arr [first];
  38.         first++;
  39.         for (int i = 1; i < first; i++) // loop geser data ke kanan. misal: data ke-2 jadi data ke-3
  40.         {
  41.             arr[first-i] = arr[first-(i+1)];
  42.         }
  43.         cout << "Data ke-" << t << ": ";
  44.         getline(cin >> ws, arr[0]); // bagian input data baru di index 0
  45.         t++;
  46.         input--;
  47.     }
  48.     cout << "Data berhasil dimasukkan." << endl;
  49. }
  50.  
  51. /* Fungsi pop, mengembalikan data pada index 0 */
  52. string pop(string arr[])
  53. {
  54.     string item;
  55.     if (arr[0] == "")
  56.     {
  57.         return "Stack kosong.";
  58.     }
  59.     item = arr[0];
  60.     if (first == 0) // ketika array berisi 1
  61.     {
  62.         arr[first--] = "";
  63.         return "Data yang di-pop: " + item;
  64.     }
  65.     for (int i = 0; i < first; i++) // ketika array berisi lebih dari 1
  66.     {
  67.         arr[i] = arr[i + 1]; // geser data ke kiri. misal: data ke-3 jadi data ke-2
  68.     }
  69.     arr[first--] = ""; // kosongkan data paling kanan dan nilai first dikurangi 1
  70.     return "Data yang di-pop: " + item;
  71. }
  72.  
  73. /* Fungsi searchIndex, mencari data pada index tertentu */
  74. void searchIndex(int index, int size, string arr[])
  75. {
  76.     if (index < 0 || index > size)
  77.     {
  78.         cout << "Index " << index << " tidak valid. Input antara 0 - " << size << endl;
  79.         return;
  80.     }
  81.  
  82.     if (arr[index] == "") // ketika data pada index yang dicari kosong
  83.     {
  84.         cout << "Data pada index ke-" << index << " tidak ada." << endl;
  85.     }
  86.     else // ketika data pada index yang dicari ada
  87.     {
  88.         cout << "Data pada index ke-" << index << " adalah: " << arr[index] << endl;
  89.     }
  90. }
  91.  
  92. /* Fungsi searchItem, mencari data pada array */
  93. void searchItem(string item, string arr[])
  94. {
  95.     for (int i = 0; i <= first; i++)
  96.     {
  97.         if (arr[i] == item)
  98.         {
  99.             cout << "Data '" << item << "' ditemukan pada index ke-" << i << endl;
  100.             return;
  101.         }
  102.     }
  103.     cout << "Data '" << item << "' tidak ditemukan." << endl;
  104. }
  105.  
  106. /* Fungsi printAll, menampilkan semua data dalam array */
  107. void printAll(int size, string arr[])
  108. {
  109.     cout << "Jumlah data dalam Stack: " << first+1;
  110.     if (first+1 == size)
  111.     {
  112.         cout << " (Stack penuh)" << endl;
  113.     }
  114.     else
  115.     {
  116.         if (arr[0] == "")
  117.         {
  118.             cout << " (Stack kosong)" << endl;
  119.             return;
  120.         }
  121.         cout << " (Stack belum penuh dan bisa diisi " << size - (first+1) << " data lagi.)" << endl;
  122.     }
  123.     cout << "Data dalam Stack:" << endl;
  124.     for (int i = 0; i <= first; i++)
  125.     {
  126.         if (i == 0)
  127.         {
  128.             cout << "|\t" << arr[i] << "\t|  <<---- TOP" << endl
  129.                  << "----------------" << endl;
  130.         }
  131.         else
  132.         {
  133.             cout << "|\t" << arr[i] << "\t|" << endl
  134.                  << "----------------" << endl;
  135.         }
  136.     }
  137. }
  138.  
  139. int main()
  140. {
  141.     int input, idx, size;
  142.     string item;
  143.     char choice;
  144.  
  145.     system("cls");
  146.  
  147.     cout << "Nama: Fairuz Andriansyah\n"
  148.          << "NIM : 225150307111015\n\n";
  149.     cout << "Program Stack menggunakan Array\n"
  150.          << "=====================================\n";
  151.  
  152.     cout << "Masukkan ukuran stack: ";
  153.     cin >> size;
  154.  
  155.     string arr[size];
  156.  
  157.     menu:
  158.     system("cls");
  159.     cout << "Nama: Fairuz Andriansyah\n"
  160.          << "NIM : 225150307111015\n\n";
  161.     cout << "Program Stack menggunakan Array\n"
  162.          << "=====================================\n";
  163.  
  164.     cout << "Ukuran stack: " << size << endl
  165.          << "Jumlah data yang masih bisa dimasukkan: " << size - (first+1) << endl
  166.          << endl;
  167.     cout << "Menu:\n"
  168.          << "1. Push Data\n"
  169.          << "2. Pop Data\n"
  170.          << "3. Search by Index\n"
  171.          << "4. Search by Data\n"
  172.          << "5. Print All Data\n"
  173.          << "0. Exit\n"
  174.          << "Pilihan Anda (1/2/.../0): ";
  175.     cin >> choice;
  176.     cout << endl;
  177.  
  178.     switch (choice)
  179.     {
  180.     case '1': // Push Data
  181.         if (arr[size - 1] != "")
  182.         {
  183.             cout << "Stack penuh." << endl;
  184.             cin.ignore();
  185.         }
  186.         else
  187.         {
  188.             cout << "Masukkan jumlah data yang ingin dimasukkan: ";
  189.             cin >> input;
  190.             push(size - 1, input, arr);
  191.         }
  192.         cout << "\nTekan Enter untuk kembali ke menu...";
  193.         cin.get();
  194.         goto menu;
  195.         break;
  196.  
  197.     case '2': // Pop Data
  198.         cout << pop(arr) << endl;
  199.         cout << "\nTekan Enter untuk kembali ke menu...";
  200.         cin.ignore();
  201.         cin.get();
  202.         goto menu;
  203.         break;
  204.  
  205.     case '3': // Search by Index
  206.         if (arr[0] == "")
  207.         {
  208.             cout << "Stack kosong." << endl;
  209.         }
  210.         else
  211.         {
  212.             cout << "Masukkan index yang ingin dicari: "; // input index (mulai dari 0)
  213.             cin >> idx;
  214.             searchIndex(idx, size - 1, arr);
  215.         }
  216.         cout << "\nTekan Enter untuk kembali ke menu...";
  217.         cin.ignore();
  218.         cin.get();
  219.         goto menu;
  220.         break;
  221.  
  222.     case '4': // Search by Item
  223.         if (arr[0] == "")
  224.         {
  225.             cout << "Stack kosong." << endl;
  226.             cin.ignore();
  227.         }
  228.         else
  229.         {
  230.             cout << "Masukkan data yang ingin dicari: "; // input item yang ingin dicari (string)
  231.             getline(cin >> ws, item);
  232.             searchItem(item, arr);
  233.         }
  234.         cout << "\nTekan Enter untuk kembali ke menu...";
  235.         cin.get();
  236.         goto menu;
  237.         break;
  238.  
  239.     case '5': // Print All Data
  240.         printAll(size, arr);
  241.         cout << "\nTekan Enter untuk kembali ke menu...";
  242.         cin.ignore();
  243.         cin.get();
  244.         goto menu;
  245.         break;
  246.     case '0': // Exit
  247.         cout << "tks." << endl;
  248.         break;
  249.     default: // Invalid Input
  250.         cout << "Pilihan tidak valid." << endl;
  251.         cout << "Tekan Enter untuk kembali ke menu...";
  252.         cin.ignore();
  253.         cin.get();
  254.         goto menu;
  255.         break;
  256.     }
  257.  
  258.     return 0;
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement