Advertisement
Guest User

Lab#3

a guest
Feb 16th, 2020
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. struct Program {
  9.     string name;
  10.     float version;
  11. };
  12.  
  13. struct dt {
  14.     Program str;
  15.     dt *sled;
  16. };
  17.  
  18.  
  19. class Queue {
  20. private:
  21.     Program queue[100];
  22.     int q_size = 100;
  23.     int start;
  24.     int end;
  25.     int elems;
  26. public:
  27.     Queue() {
  28.         start = end = 0;
  29.         elems = 0;
  30.     };
  31.  
  32.     ~Queue() {};
  33.  
  34.     void push(Program a) {
  35.         if (elems == 0) {
  36.             queue[start] = a;
  37.             end++;
  38.             if (end >= q_size) {
  39.                 end = 0;
  40.             }
  41.         } else {
  42.             if (start == end) {
  43.                 cout << "Too much pushed elems, clear first!";
  44.                 return;
  45.             }
  46.             queue[end] = a;
  47.             end++;
  48.             if (end >= q_size) {
  49.                 end = 0;
  50.             }
  51.         }
  52.         elems++;
  53.     }
  54.  
  55.     Program pop() {
  56.         Program val;
  57.         if (start - 1 >= 0) {
  58.             start++;
  59.             if (start >= q_size) {
  60.                 start = 0;
  61.             }
  62.             val = queue[start - 1];
  63.         } else {
  64.             val = queue[0];
  65.             start++;
  66.         }
  67.         elems--;
  68.         return val;
  69.     }
  70. };
  71.  
  72. class List {
  73. public:
  74.     dt *Head = NULL;
  75.     dt *Ending = NULL;
  76.  
  77.     void add(Program c) {
  78.         dt *temp = new dt;
  79.         temp->str = c;
  80.         temp->sled = NULL;
  81.         if (Head != NULL) {
  82.             Ending->sled = temp;
  83.             Ending = temp;
  84.         } else {
  85.             Head = Ending = temp;
  86.         }
  87.     }
  88.  
  89.     void show() {
  90.         cout << "Вывод содержимого очереди: " << endl;
  91.         dt *temp = Head;
  92.         while (temp != NULL) {
  93.             cout << temp->str.name << " " << temp->str.version << endl;
  94.             temp = temp->sled;
  95.         }
  96.     }
  97.  
  98.     void remove() {
  99.         if (Head != NULL) {
  100.             dt *temp = Head;
  101.             Head = Head->sled;
  102.             delete temp;
  103.         }
  104.     }
  105.  
  106.     void remove_all() {
  107.         if (Head != NULL) {
  108.             dt *temp = Head;
  109.             while (temp != NULL) {
  110.                 temp = Head->sled;
  111.                 delete Head;
  112.                 Head = temp;
  113.             }
  114.         }
  115.     }
  116.  
  117.     void search(string sh) {
  118.         dt *temp = Head;
  119.         bool found = false;
  120.         while (temp != NULL) {
  121.             if (temp->str.name == sh) {
  122.                 cout << "Элемент <<" << temp->str.name << ">> версии " << temp->str.version << " найден в очереди."
  123.                      << endl;
  124.                 found = true;
  125.             }
  126.             temp = temp->sled;
  127.         }
  128.         if (!found)
  129.             cout << "Элемент <<" << sh << ">> не найден в очереди." << endl;
  130.     }
  131.  
  132.     void obrabotka() {
  133.         Program r;
  134.         dt *temp1 = Head;
  135.         while (temp1 != NULL) {
  136.             if (temp1->str.version > 10.0) {
  137.                 cout << temp1->str.name << " " << temp1->str.version << endl;
  138.             }
  139.             temp1 = temp1->sled;
  140.         }
  141.         cout << "Обработка призведена!" << endl;
  142.     }
  143.  
  144.     void operator+(Program b) {
  145.         add(b);
  146.     }
  147.  
  148.     void operator-(int k) {
  149.         for (int i = 0; i < k; i++)
  150.             remove();
  151.     }
  152.  
  153.     void operator--(int) {
  154.         remove_all();
  155.     }
  156. };
  157.  
  158.  
  159. int main() {
  160.     setlocale(LC_ALL, "Rus");
  161.     system("color F0");
  162.     string v;
  163.     float c;
  164.     string i;
  165.     List e;
  166.     Queue q;
  167.     e.add(Program{"Steam", 2.23});
  168.     e.add(Program{"Discord", 3.22});
  169.     e.add(Program{"Thunder", 3});
  170.     e.add(Program{"Skype", 228});
  171.     e.add(Program{"Steam", 6.54});
  172.     e.add(Program{"Steam", 2.21});
  173.     menu:
  174.     cout << "1) Вывод содержимого очереди." << endl;
  175.     cout << "2) Добавить элемент в очередь." << endl;
  176.     cout << "3) Удалить элемент из очереди." << endl;
  177.     cout << "4) Поиск элемента." << endl;
  178.     cout << "5) Обработка." << endl;
  179.     cout << "6) Выход из программы." << endl;
  180.     cout << "Выбрать:";
  181.     cin >> i;
  182.     cout << endl;
  183.     if (i == "1") {
  184.         e.show();
  185.         cout << endl;
  186.         goto menu;
  187.     } else if (i == "2") {
  188.         dobav:
  189.         cout << "Введите программу";
  190.         cin >> v;
  191.         cout << "Введите версию";
  192.         cin >> c;
  193.         if (v.length() <= 15) {
  194.             e + Program{v, c};
  195.             cout << endl;
  196.             goto menu;
  197.         } else {
  198.             cout << "Превышена максимальная длина строки!" << endl;
  199.             goto dobav;
  200.         }
  201.     } else if (i == "3") {
  202.         e - 1;
  203.         goto menu;
  204.     } else if (i == "4") {
  205.         dobav2:
  206.         cout << "Введите слово для поиска: ";
  207.         cin >> v;
  208.         if (v.length() <= 10) {
  209.             e.search(v);
  210.             cout << endl;
  211.             goto menu;
  212.         } else {
  213.             cout << "Превышена максимальная длина строки!" << endl;
  214.             goto dobav2;
  215.         }
  216.     } else if (i == "5") {
  217.         e.obrabotka();
  218.         goto menu;
  219.     } else if (i == "6") {
  220.         e--;
  221.         return 0;
  222.     } else {
  223.         cout << "Некорректный ввод" << endl << endl;
  224.         goto menu;
  225.     }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement