Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Создать класс для объекта стек. Стек хранит целые числа. Имеет характеристики: наименование (строка, не более 10 символов) и размер (целое). Размер стека больше или равно 1. Функционал стека:
- - добавить элемент и вернуть признак успеха (логическое);
- - извлечь элемент и вернуть признак успеха (логическое);
- - получить текущее количество элементов в стеке (целое).
- В классе определить параметризированный конструктор, которому передается имя стека и размер. При переполнении стека очередной элемент не добавлять и определяется соответствующий признак успеха.
- В основной программе реализовать алгоритм:
- 1. Ввести имя и размер для первого стека.
- 2. Создать объект первого стека.
- 3. Ввести имя и размер для второго стека.
- 4. Создать объект второго стека.
- 5. В цикле:
- 5.1. Считывать очередное значение элемента.
- 5.2. Добавлять элементы в оба стека.
- 5.3. При переполнении одного из них, завершить цикл.
- 6. Построчно вывести содержимое стеков. */
- #include <iostream>
- #include <string>
- #include <iomanip>
- using namespace std;
- class Stack // создаем класс стаков
- {
- public: // объявляем публичные поля и методы
- string name; // сюда мы положим имя стека
- int size;
- Stack(string name, int size);
- bool input(int element); // метод добавления елемента
- bool output(int& where); // извлечения
- int out_count(); // получения количества всех элементов стека
- private: // объявляем приватные поля
- int* array;
- int count;
- };
- Stack::Stack(string name, int size) // определение конструктора
- {
- this->name = name; // просто записать в нужные поля нужные значения
- this->size = size;
- this->array = new int[size];
- count = 0;
- }
- bool Stack::input(int element) { // определение метода добавления элемента
- if (count + 1 > size) return false; // если следующий элемент "переполнит" стек, то сразу выходим\
- и возвращаем false
- array[count] = element;
- count++;
- return true;
- }
- bool Stack::output(int& where) { // определение метода извлечения элемента\
- так как тесты чуствительны к выводу лишних невидимых символов, нельзя просто вывести элемент\
- требуется сохранить его в переменную -> kuda
- if (count - 1 < 0) return false; // если нечего выводить, возвращаем false
- count--;
- where = array[count];
- return true;
- }
- int Stack::out_count() { // вывод количества
- return this->count;
- }
- int main(int argc, char* argv[]) { // дальше всё по условию: \
- 1. Ввести имя и размер для первого стека. \
- 2. Создать объект первого стека. \
- 3. Ввести имя и размер для второго стека. \
- 4. Создать объект второго стека. \
- 5. В цикле : \
- 5.1.Считывать очередное значение элемента. \
- 5.2.Добавлять элементы в оба стека. \
- 5.3.При переполнении одного из них, завершить цикл. \
- 6. Построчно вывести содержимое стеков.
- string name;
- int size;
- cin >> name >> size; // 1
- Stack stack1 = Stack(name, size); // 2
- cin >> name >> size; // 3
- Stack stack2 = Stack(name, size); // 4
- int element;
- if (stack1.size > stack2.size) stack1.size = stack2.size;
- do { // 5
- cin >> element; // 5.1
- } while (stack1.input(element) && stack2.input(element)); // 5.2, 5.3
- cout << setw(15) << left << stack1.name << setw(15) << left << stack2.name; // это чисто по форме вывода
- int element1, element2;
- stack1.output(element1); // 6 \
- дальше заморочки идут только для того, чтобы не выводились \
- лишние символы пробела, перевода строки и возврата каретки
- while (true)
- {
- cout << endl;
- if (stack2.output(element2)) {
- cout<<setw(15)<<right<<element1;
- }
- else {
- cout<<setw(15)<<right<<element1;
- break;
- }
- if (stack1.output(element1)) {
- cout << setw(15) <<right<< element2;
- }
- else {
- cout << setw(15) <<right<< element2;
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment