Advertisement
palenda21

6laboop

Dec 16th, 2020
699
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.27 KB | None | 0 0
  1. #include <iostream>
  2. #include "stdlib.h"
  3. #include <conio.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. // описание шаблона класса
  9. template <typename Qtype> class queue {
  10.   Qtype* q;
  11.   int sloc, rloc;
  12.   int length;
  13. public: // описание методов класса
  14.   queue(int size);
  15.   ~queue() { delete[] q; };
  16.   void qstore(Qtype i);
  17.   Qtype qretrieve();
  18.   void print();
  19.   void init(int size);
  20.   void delete_queue();
  21. };
  22. template <typename  Qtype> queue<Qtype>::queue(int size)  // описание конструктора
  23. {
  24.   q = 0;
  25.   init(size);// вызов метода создания очереди
  26. }
  27. template <typename Qtype> void queue<Qtype>::qstore(Qtype i)  // описание метода добавления элемента в очередь
  28. {
  29.   // проверка на создание очереди
  30.   if (q == 0) {
  31.     cout << "err-> inicializacia ocheredi\n";
  32.     return;
  33.   }
  34.   //проверка на заполнение очереди
  35.   if (sloc == length) {
  36.     cout << "ochered pusta \n";
  37.     return;
  38.   }
  39.   q[sloc] = i; //запонить элемент очереди
  40.   sloc++; // увеличить указатель на элемент очереди
  41. }
  42. // описание метода удаления элемента из очереди
  43. template <class Qtype> Qtype queue<Qtype>::qretrieve()
  44. {
  45.   // проверка на создание очереди
  46.   if (q == 0) {
  47.     cout << "err-> inicializacia ocheredi \n";
  48.     return 0;
  49.   }
  50.   // проверка пустой очереди
  51.   if (sloc == rloc) {
  52.     cout << "ochered pusta \n";
  53.     return 0;
  54.   }
  55.   rloc++;//установить указатель на следующий элемент
  56.   return q[rloc - 1];// возвратить (удалить) элемент из очереди
  57. }
  58. // вывести на экран очередь
  59. template <typename Qtype> void queue<Qtype>::print()
  60. {
  61.   // проверка пустой очереди
  62.   if (sloc == rloc) {
  63.     cout << "ocehered pusta \n";
  64.     return;
  65.   }
  66.   cout << "ochered=";
  67.   // цикл вывода на экран очереди
  68.   for (int i = rloc; i < sloc; i++)
  69.   {
  70.     cout << q[i] << " ";
  71.   }
  72.   cout << "\n";
  73. }
  74. // инициализация очереди
  75. template <typename Qtype> void queue<Qtype>::init(int size)
  76. {
  77.   if (q != 0) {
  78.     delete[] q; //освободить очередь
  79.     q = 0;
  80.   }
  81.   q = new Qtype[size]; //создать очередь
  82.   if (!q) { // проверка на создание очереди
  83.     cout << "ochered ne sozdana\n";
  84.     exit(1);
  85.   }
  86.   length = size; // установка параметров очереди
  87.   sloc = rloc = 0;
  88. }
  89. // удалить очередь
  90. template <typename Qtype> void queue<Qtype>::delete_queue()
  91. {
  92.   if (q != 0) {
  93.     delete[] q;//освободить очередь
  94.     q = 0;
  95.   }
  96.   //cout<<" udalenie ocheredi \n";
  97.   length = 0; // обновить параметры очереди
  98.   sloc = rloc = 0;
  99. }
  100.  
  101. int main() //главная функция
  102. {
  103.   int n;
  104.   double El;
  105.   queue<double>* a = 0; /* Double! */
  106.   int ar = 1;
  107.   while (ar) // цикл вывода меню и его обработка
  108.   {
  109.     cout << "1.sozdat ochered \n";
  110.     cout << "2.inicializacia ocheredi \n";
  111.     cout << "3.dobavlenie el v ochered \n";
  112.     cout << "4.udalenie elementa \n";
  113.     cout << "5.vivesti na ekran \n";
  114.     cout << "6.udalenie ocheredi \n";
  115.     cout << "7.Vihod \n";
  116.     char k = cin.get();
  117.     switch (k) // обработка нажатия клавиши
  118.     {
  119.     case '1':
  120.       if (a != 0) //проверка на создание класса очереди
  121.       {
  122.         cout << "err -> unichtogina ochered";
  123.         cin.get();
  124.         break;
  125.       }
  126.       cout << "kol-vo elementov=";
  127.       n = 0; cin >> n; cout << "\n"; // ввести количество элементов в очереди
  128.       if (n > 0)
  129.         a = new queue<double>(n);// создание очереди /* Double! */
  130.       system("pause");
  131.       break;
  132.     case '2': //компилятор ругается на это место
  133.       if (a == 0)//проверка на создание класса очереди
  134.       {
  135.         cout << "err -> ochered ne sozdana \n";
  136.         cin.get();
  137.         break;
  138.       }
  139.       cout << "count element=";
  140.       n = 0; cin >> n; cout << "\n";// ввести количество элементов в очереди
  141.       if (n > 0)
  142.         a->init(n);// создание очереди
  143.       cout << "inicializacia ocheredi \n";
  144.       cin.get();
  145.       break;
  146.     case '3':
  147.       if (a == 0)//проверка на создание класса очереди
  148.       {
  149.         cout << "err -> ochered ne sozdana \n";
  150.         cin.get();
  151.         break;
  152.       }
  153.       cout << "element=";
  154.       cin >> El; cout << "\n";//ввести элемент
  155.       a->qstore(El); //добавить элемент   /* Double! */
  156.       a->print();// вывести очередь
  157.       cin.get();
  158.       break;
  159.     case '4':
  160.       if (a == 0)//проверка на создание класса очереди
  161.       {
  162.         cout << "err -> ochered ne sozdana \n";
  163.         cin.get();
  164.         break;
  165.       }
  166.       cout << "udalenie elementa=";
  167.       El = a->qretrieve();// взять первый элемент очереди  /* Double! */
  168.       if (El >= 0)
  169.         cout << n;
  170.       cout << "\n"; //вывести элемент на экран
  171.       a->print();// вывести очередь
  172.       cin.get();
  173.       break;
  174.     case '5':
  175.       if (a == 0)//проверка на создание класса очереди
  176.       {
  177.         cout << "err -> ochered ne sozdana \n";
  178.         cin.get();
  179.         break;
  180.       }
  181.       a->print();// вывести очередь
  182.       cin.get();
  183.       break;
  184.     case '6':
  185.       if (a == 0)//проверка на создание класса очереди
  186.       {
  187.         cout << "err -> ochered ne sozdana \n";
  188.         cin.get();
  189.         break;
  190.       }
  191.       a->delete_queue();// удалить очередь
  192.       cout << "udalenie ocheredi \n";
  193.       cin.get();
  194.       break;
  195.     case '7':
  196.       ar = 0;// выход из цикла
  197.       break;
  198.     }
  199.   }
  200.   return 0;//завершение программы
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement