spacerose

oop329

Mar 27th, 2020
1,762
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1.  
  2.  
  3. /*Создать класс для объекта стек. Стек хранит целые числа. Имеет характеристики: наименование (строка, не более 10 символов) и размер (целое). Размер стека больше или равно 1. Функционал стека:
  4. - добавить элемент и вернуть признак успеха (логическое);
  5. - извлечь элемент и вернуть признак успеха (логическое);
  6. - получить текущее количество элементов в стеке (целое).
  7. В классе определить параметризированный конструктор, которому передается имя стека и размер. При переполнении стека очередной элемент не добавлять и определяется соответствующий признак успеха.
  8. В основной программе реализовать алгоритм:
  9. 1. Ввести имя и размер для первого стека.
  10. 2. Создать объект первого стека.
  11. 3. Ввести имя и размер для второго стека.
  12. 4. Создать объект второго стека.
  13. 5. В цикле:
  14. 5.1. Считывать очередное значение элемента.
  15. 5.2. Добавлять элементы в оба стека.
  16. 5.3. При переполнении одного из них, завершить цикл.
  17. 6. Построчно вывести содержимое стеков. */
  18. #include <iostream>
  19. #include <string>
  20. #include <iomanip>
  21. using namespace std;
  22.  
  23. class Stack // создаем класс стаков
  24. {
  25. public: // объявляем публичные поля и методы
  26.     string name; // сюда мы положим имя стека
  27.     int size;
  28.     Stack(string name, int size);
  29.     bool input(int element); // метод добавления елемента
  30.     bool output(int& where); // извлечения
  31.     int out_count(); // получения количества всех элементов стека
  32. private: // объявляем приватные поля
  33.    
  34.     int* array;
  35.     int count;
  36. };
  37.  
  38. Stack::Stack(string name, int size) // определение конструктора
  39. {
  40.     this->name = name; // просто записать в нужные поля нужные значения
  41.     this->size = size;
  42.     this->array = new int[size];
  43.     count = 0;
  44. }
  45.  
  46. bool Stack::input(int element) { // определение метода добавления элемента
  47.     if (count + 1 > size) return false; // если следующий элемент "переполнит" стек, то сразу выходим\
  48.     и возвращаем false
  49.     array[count] = element;
  50.     count++;
  51.     return true;
  52. }
  53.  
  54. bool Stack::output(int& where) { // определение метода извлечения элемента\
  55.     так как тесты чуствительны к выводу лишних невидимых символов, нельзя просто вывести элемент\
  56.     требуется сохранить его в переменную -> kuda
  57.     if (count - 1 < 0) return false; // если нечего выводить, возвращаем false
  58.     count--;
  59.     where = array[count];
  60.     return true;
  61. }
  62.  
  63. int Stack::out_count() { // вывод количества
  64.     return this->count;
  65. }
  66.  
  67. int main(int argc, char* argv[]) { // дальше всё по условию: \
  68.         1. Ввести имя и размер для первого стека. \
  69.         2. Создать объект первого стека. \
  70.         3. Ввести имя и размер для второго стека. \
  71.         4. Создать объект второго стека. \
  72.         5. В цикле : \
  73.         5.1.Считывать очередное значение элемента. \
  74.         5.2.Добавлять элементы в оба стека. \
  75.         5.3.При переполнении одного из них, завершить цикл. \
  76.         6. Построчно вывести содержимое стеков.
  77.     string name;
  78.     int size;
  79.     cin >> name >> size; // 1
  80.  
  81.     Stack stack1 = Stack(name, size); // 2
  82.  
  83.     cin >> name >> size; // 3
  84.  
  85.     Stack stack2 = Stack(name, size); // 4
  86.  
  87.     int element;
  88.     if (stack1.size > stack2.size) stack1.size = stack2.size;
  89.     do { // 5
  90.         cin >> element; // 5.1
  91.     } while (stack1.input(element) && stack2.input(element)); // 5.2, 5.3
  92.  
  93.     cout << setw(15) << left << stack1.name << setw(15) << left << stack2.name; // это чисто по форме вывода
  94.  
  95.  
  96.     int element1, element2;
  97.     stack1.output(element1); // 6 \
  98.     дальше заморочки идут только для того, чтобы не выводились \
  99.     лишние символы пробела, перевода строки и возврата каретки
  100.     while (true)
  101.     {
  102.         cout << endl;
  103.         if (stack2.output(element2)) {
  104.             cout<<setw(15)<<right<<element1;
  105.         }
  106.         else {
  107.             cout<<setw(15)<<right<<element1;
  108.             break;
  109.         }
  110.         if (stack1.output(element1)) {
  111.             cout << setw(15) <<right<< element2;
  112.         }
  113.         else {
  114.             cout << setw(15) <<right<< element2;
  115.             break;
  116.         }
  117.     }
  118.     return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment