Advertisement
Guest User

Lab#4

a guest
Feb 16th, 2020
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.36 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. protected:
  74.     int listElems;
  75. public:
  76.     dt *Head = NULL;
  77.     dt *Ending = NULL;
  78.  
  79.     void add(Program c) {
  80.         dt *temp = new dt;
  81.         temp->str = c;
  82.         temp->sled = NULL;
  83.         if (Head != NULL) {
  84.             Ending->sled = temp;
  85.             Ending = temp;
  86.         } else {
  87.             Head = Ending = temp;
  88.         }
  89.         listElems++;
  90.     }
  91.  
  92.     virtual void show() {
  93.         cout << "Вывод содержимого очереди: " << endl;
  94.         dt *temp = Head;
  95.         while (temp != NULL) {
  96.             cout << temp->str.name << " " << temp->str.version << endl;
  97.             temp = temp->sled;
  98.         }
  99.     }
  100.  
  101.     void remove() {
  102.         if (Head != NULL) {
  103.             dt *temp = Head;
  104.             Head = Head->sled;
  105.             delete temp;
  106.         }
  107.         listElems--;
  108.     }
  109.  
  110.     void remove_all() {
  111.         if (Head != NULL) {
  112.             dt *temp = Head;
  113.             while (temp != NULL) {
  114.                 temp = Head->sled;
  115.                 delete Head;
  116.                 Head = temp;
  117.             }
  118.         }
  119.         listElems = 0;
  120.     }
  121.  
  122.     void search(string sh) {
  123.         dt *temp = Head;
  124.         bool found = false;
  125.         while (temp != NULL) {
  126.             if (temp->str.name == sh) {
  127.                 cout << "Элемент <<" << temp->str.name << ">> версии " << temp->str.version << " найден в очереди."
  128.                      << endl;
  129.                 found = true;
  130.             }
  131.             temp = temp->sled;
  132.         }
  133.         if (!found)
  134.             cout << "Элемент <<" << sh << ">> не найден в очереди." << endl;
  135.     }
  136.  
  137.     void obrabotka() {
  138.         Program r;
  139.         dt *temp1 = Head;
  140.         while (temp1 != NULL) {
  141.             if (temp1->str.version > 10.0) {
  142.                 cout << temp1->str.name << " " << temp1->str.version << endl;
  143.             }
  144.             temp1 = temp1->sled;
  145.         }
  146.         cout << "Обработка призведена!" << endl;
  147.     }
  148.  
  149.     void operator+(Program b) {
  150.         add(b);
  151.     }
  152.  
  153.     void operator-(int k) {
  154.         for (int i = 0; i < k; i++)
  155.             remove();
  156.     }
  157.  
  158.     void operator--(int) {
  159.         remove_all();
  160.     }
  161. };
  162.  
  163.  
  164. class UpgradeShowList : public List{
  165. public:
  166.     UpgradeShowList() : List(){}
  167.     void show() {
  168.         cout << "Всего элементов " << listElems << endl;
  169.         cout << "Вывод содержимого очереди: " << endl;
  170.         dt *temp = Head;
  171.         while (temp != NULL) {
  172.             cout << temp->str.name << " " << temp->str.version << endl;
  173.             temp = temp->sled;
  174.         }
  175.     }
  176. };
  177.  
  178. class MasterWelcome {
  179. public:
  180.     MasterWelcome(){};
  181.     ~MasterWelcome(){};
  182.     void printHello(){
  183.         cout << "HELLO!" << endl;
  184.     }
  185. };
  186.  
  187. class SuperUpgradeList : public UpgradeShowList, public MasterWelcome{
  188. public:
  189.     SuperUpgradeList() : UpgradeShowList(), MasterWelcome(){}
  190.     void megaShow(){
  191.         this->printHello();
  192.         this->show();
  193.     }
  194.  
  195.     int menu(){
  196.         float c;
  197.         string i, v;
  198.         menu:
  199.         cout << "1) Вывод содержимого очереди." << endl;
  200.         cout << "2) Добавить элемент в очередь." << endl;
  201.         cout << "3) Удалить элемент из очереди." << endl;
  202.         cout << "4) Поиск элемента." << endl;
  203.         cout << "5) Обработка." << endl;
  204.         cout << "6) Выход из программы." << endl;
  205.         cout << "Выбрать:";
  206.         cin >> i;
  207.         cout << endl;
  208.         if (i == "1") {
  209.             this->megaShow();
  210.             cout << endl;
  211.             goto menu;
  212.         } else if (i == "2") {
  213.             dobav:
  214.             cout << "Введите программу";
  215.             cin >> v;
  216.             cout << "Введите версию";
  217.             cin >> c;
  218.             if (v.length() <= 15) {
  219.                 this->operator+(Program{v, c});
  220.                 cout << endl;
  221.                 goto menu;
  222.             } else {
  223.                 cout << "Превышена максимальная длина строки!" << endl;
  224.                 goto dobav;
  225.             }
  226.         } else if (i == "3") {
  227.             this->operator-(1);
  228.             goto menu;
  229.         } else if (i == "4") {
  230.             dobav2:
  231.             cout << "Введите слово для поиска: ";
  232.             cin >> v;
  233.             if (v.length() <= 10) {
  234.                 this->search(v);
  235.                 cout << endl;
  236.                 goto menu;
  237.             } else {
  238.                 cout << "Превышена максимальная длина строки!" << endl;
  239.                 goto dobav2;
  240.             }
  241.         } else if (i == "5") {
  242.             this->obrabotka();
  243.             goto menu;
  244.         } else if (i == "6") {
  245.             this->remove_all();
  246.             return 0;
  247.         } else {
  248.             cout << "Некорректный ввод" << endl << endl;
  249.             goto menu;
  250.         }
  251.     }
  252. };
  253.  
  254.  
  255. int main() {
  256.     setlocale(LC_ALL, "Rus");
  257.     system("color F0");
  258.     string v;
  259.     float c;
  260.     string i;
  261.     List e;
  262.     Queue q;
  263.     e.add(Program{"Steam", 2.23});
  264.     e.add(Program{"Discord", 3.22});
  265.     e.add(Program{"Thunder", 3});
  266.     e.add(Program{"Skype", 228});
  267.     e.add(Program{"Steam", 6.54});
  268.     e.add(Program{"Steam", 2.21});
  269.     menu:
  270.     cout << "1) Вывод содержимого очереди." << endl;
  271.     cout << "2) Добавить элемент в очередь." << endl;
  272.     cout << "3) Удалить элемент из очереди." << endl;
  273.     cout << "4) Поиск элемента." << endl;
  274.     cout << "5) Обработка." << endl;
  275.     cout << "6) Тестирование нового класса." << endl;
  276.     cout << "Выбрать:";
  277.     cin >> i;
  278.     cout << endl;
  279.     if (i == "1") {
  280.         e.show();
  281.         cout << endl;
  282.         goto menu;
  283.     } else if (i == "2") {
  284.         dobav:
  285.         cout << "Введите программу";
  286.         cin >> v;
  287.         cout << "Введите версию";
  288.         cin >> c;
  289.         if (v.length() <= 15) {
  290.             e + Program{v, c};
  291.             cout << endl;
  292.             goto menu;
  293.         } else {
  294.             cout << "Превышена максимальная длина строки!" << endl;
  295.             goto dobav;
  296.         }
  297.     } else if (i == "3") {
  298.         e - 1;
  299.         goto menu;
  300.     } else if (i == "4") {
  301.         dobav2:
  302.         cout << "Введите слово для поиска: ";
  303.         cin >> v;
  304.         if (v.length() <= 10) {
  305.             e.search(v);
  306.             cout << endl;
  307.             goto menu;
  308.         } else {
  309.             cout << "Превышена максимальная длина строки!" << endl;
  310.             goto dobav2;
  311.         }
  312.     } else if (i == "5") {
  313.         e.obrabotka();
  314.         goto menu;
  315.     } else if (i == "6") {
  316.         SuperUpgradeList list;
  317.         list.menu();
  318.         return 0;
  319.     } else {
  320.         cout << "Некорректный ввод" << endl << endl;
  321.         goto menu;
  322.     }
  323. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement