Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
1

Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack

24.12.2013, 20:49. Показов 2279. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Задание звучит так:
Напишите программу, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack. Всякий раз, когда заказчик удаляется, его зарплата должна добавляться к промежуточной сумме и по этой сумме выдаваться отчет. На заметку: вы должны быть готовы использовать класс Stack без изменений; изменить можно только объявление typedef, чтобы Item был типом customer вместо unsigned long.

Задание не смог решить, не понимаю вообще смысл этого стека, поэтому хочу спросить пару вопросов.

В интернете нашел решение этого задания, помогите растолковать что к чему, не пойму.
Кликните здесь для просмотра всего текста

Заголовочный файл

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// pe10stack.h -- class definition for the stack ADT
// for use with pe10-5.cpp
#ifndef _STACK_H_
#define _STACK_H_
 
struct customer {
    char fullname[35];
    double payment;
};
 
typedef customer Item;
 
class Stack
{
private:
    enum {MAX = 10};    // если правильно понял, то это инициализация константы
    Item items[MAX];
    int top;
public:
    Stack();
    bool isempty() const; //
    bool isfull() const;
    bool push(const Item & item)
    bool pop(Item & item);
};
#endif
Исходный код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "pe10stack.h"
Stack::Stack()    // create an empty stack
{
    top = 0;
}
 
bool Stack::isempty() const
{
    return top == 0;
}
 
bool Stack::isfull() const
{
    return top == MAX;
}
 
bool Stack::push(const Item & item)
{
    if (top < MAX)
    {
        items[top++] = item; //что даёт здесь инкремент ++?
        return true;
    }
    else
        return false;
}
 
bool Stack::pop(Item & item)
{
    if (top > 0) // почему условие стоит? что будет если top =< 0?
    {
        item = items[--top]; // каким образом здесь происходит удаление
        //                             элемента стека, если тут просто присваивается значение структуре Item?
        return true;
    }
    else
        return false;
}


И еще такой вопрос: какой смысл имеет создание стека с помощью класса, если все подобное можно создать с помощью структур и функций?

Заранее спасибо.
0
24.12.2013, 20:49
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2013, 20:49
Ответы с готовыми решениями:

Динамические структуры данных ( функцию, которая будет удалять i-ый элемент)
Помогите написать функцию, которая будет удалять i-ый элемент из структуры.Я очень плохо понимаю как это сделать.Кое-что наваял, но ...

Создать файл, в который можно добавлять, редактировать и удалять элементы структуры
По заданию нужно создать файл, в который можно добавлять, редактировать и удалять элементы структуры. Пока нахожусь на стадии: как добавить...

Как добавлять и удалять записи из БД и будет ли это приложение (будильник) работать на других ПК
Доброго времени суток! Помогите новичку разобраться. Стоит задача: написать напоминалку (будильник), которая весь день в определенное время...

6
Модератор
Эксперт С++
 Аватар для zss
13728 / 10924 / 6482
Регистрация: 18.12.2011
Сообщений: 29,160
24.12.2013, 20:58 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
struct customer 
{
    char fullname[35];
    double payment;
};
 
typedef customer Item;
 
class Stack
{
private:
    enum {MAX = 10};    // это объявление констант-перечислений. В отл. от объявления констант для них не выделяется память.
    Item items[MAX];
    int top;
public:
    Stack();
    bool isempty() const;
    bool isfull() const;
    bool push(const Item & item)
    bool pop(Item & item);
};
Stack::Stack()    // create an empty stack
{
    top = 0;
}
 
bool Stack::isempty() const
{
    return top == 0;
}
 
bool Stack::isfull() const
{
    return top == MAX;
}
 
bool Stack::push(const Item & item)
{
    if (top < MAX) // проверяем, есть ли место в стеке
    {
        items[top++] = item; //что даёт здесь инкремент ++? - переход к следующему пустому месту
        return true;
    }
    else
        return false;
}
 
bool Stack::pop(Item & item)
{
    if (top > 0) // почему условие стоит? что будет если top =< 0? - если ноль, то стек пустой.
    {
        item = items[--top]; // каким образом здесь происходит удаление: --top передвигает указатель вверх, 
        //                         а элемент остается заполненным чем был, но это не важно.
        return true;
    }
    else
        return false;
}
1
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
24.12.2013, 21:03  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
struct customer 
{
    char fullname[35];
    double payment;
};
 
typedef customer Item;
 
class Stack
{
private:
    enum {MAX = 10};    // это объявление констант-перечислений. В отл. от объявления констант для них не выделяется память.
    Item items[MAX];
    int top;
public:
    Stack();
    bool isempty() const;
    bool isfull() const;
    bool push(const Item & item)
    bool pop(Item & item);
};
Stack::Stack()    // create an empty stack
{
    top = 0;
}
 
bool Stack::isempty() const
{
    return top == 0;
}
 
bool Stack::isfull() const
{
    return top == MAX;
}
 
bool Stack::push(const Item & item)
{
    if (top < MAX) // проверяем, есть ли место в стеке
    {
        items[top++] = item; //что даёт здесь инкремент ++? - переход к следующему пустому месту
        return true;
    }
    else
        return false;
}
 
bool Stack::pop(Item & item)
{
    if (top > 0) // почему условие стоит? что будет если top =< 0? - если ноль, то стек пустой.
    {
        item = items[--top]; // каким образом здесь происходит удаление: --top передвигает указатель вверх, 
        //                         а элемент остается заполненным чем был, но это не важно.
        return true;
    }
    else
        return false;
}
Т.е напрямую удаление стека - не удаление, а просто переход на 1 элемент стека назад? и данные в элементе не удаляются, а просто заменяются?
0
Модератор
Эксперт С++
 Аватар для zss
13728 / 10924 / 6482
Регистрация: 18.12.2011
Сообщений: 29,160
24.12.2013, 21:06 4
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
не удаляются, а просто заменяются?
Именно так.
1
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
24.12.2013, 21:39  [ТС] 5
Цитата Сообщение от zss Посмотреть сообщение
Именно так.
Извините, хотелось бы задать еще один вопрос - зачем в методе pop переменной item присваивается значение? зачем изменять исходные значения, не достаточно ли просто указать top-- и всё?

Добавлено через 23 минуты
Вот, обновленная версия со простейшим стеком int, оцените, правильно ли сделал?

Кликните здесь для просмотра всего текста

Заголовочный файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
 
class Stack
{
private:
    int stack[10];
    int pt;
public:
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Stack() 
    {
        pt = 0;
    }
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    bool is_empty() const
    {
        return pt == 0;
    }
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    bool is_full() const
    {
        return pt == 10;
    }
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    void show_all()
    {
        std::cout << "pt: " << pt << std::endl << std::endl;
        for (int i = 0; i < 10; i++) std::cout << "Элемент #" << i << ": " << stack[i] << std::endl;
    }
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    void push(int arg)
    {
        std::cout << "Заполняем стек под номером " << pt << std::endl;
        if (!this->is_full()) stack[pt++] = arg;
        else std::cout << "Стек заполнен!";
        this->show_all();
    }
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    void pop()
    {
        std::cout << "Удаляем стек под номером " << pt << std::endl;
        pt--;
        this->show_all();
    }
};
Исходный код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <Windows.h>
#include "h.h"
 
#define rus setlocale(0,"rus");SetConsoleCP(1251);SetConsoleOutputCP(1251);
 
int main()
{
    rus;
    Stack Object1;
    int abc = 56;
    Object1.push(abc);
    Object1.pop();
    system("pause");
    return 0;
}
0
Модератор
Эксперт С++
 Аватар для zss
13728 / 10924 / 6482
Регистрация: 18.12.2011
Сообщений: 29,160
24.12.2013, 21:45 6
pop извлекает элемент из стека. С-но его надо отдать (записать во внешнюю переменную переданную по ссылке).
Так что, верните
C++
1
bool Stack:: pop(Item & item)
1
6 / 6 / 2
Регистрация: 31.03.2013
Сообщений: 120
26.02.2014, 17:24 7
CHELOVEKPAUK, заработала прога? можно увидеть все файлы готовые?
0
26.02.2014, 17:24
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2014, 17:24
Помогаю со студенческими работами здесь

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...)
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Разработать программу, которая позволяет просматривать, добавлять, изменять, удалять записи в таблице
Помогите осилить ! Создать в Access ,базу данных «Мои друзья», содержащую одну таблицу Друзья (поля Фамилия, Имя, Отчество, Дата...

Для класса Stack обеспечить обработку переполнения стека. Есть код
Добрейший денек, Товарищи программеры прошу помощи у демонов С++. Задача: Для класса Stack обеспечить обработку переполнения стека....

На основе двух экземпляров объектов класса стек (Stack) реализовать класс очередь (Queue)
5. На основі двох екземплярів об’єктів класу стек (Stack) реалізувати клас черга (Queue). Подскажите как это сделать с использыванием...

Создать стек, содержащий исходные числа (последнее число будет вершиной стека)
Дано неотрицательное число N и набор из N чисел. Создать стек, содержащий исходные числа (последнее число будет вершиной стека). Если N=0,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Отличия между venv, pyenv, pyvenv, virtualenv, pipenv, conda, virtualenvwrapp­­er, poetry и другими в Python
hw_wired 13.02.2025
В Python существует множество средств для управления зависимостями и виртуальными окружениями, что порой вызывает замешательство даже у опытных разработчиков. Каждый инструмент создавался для решения. . .
Навигация с помощью React Router
hw_wired 13.02.2025
React Router - это наиболее распространенное средство для создания навигации в React-приложениях, без которого сложно представить современную веб-разработку. Когда мы разрабатываем сложное. . .
Ошибка "error:0308010C­­:dig­ital envelope routines::unsup­­ported"
hw_wired 13.02.2025
Если вы сталкиваетесь с ошибкой "error:0308010C:digital envelope routines::unsupported" при разработке Node. js приложений, то наверняка уже успели поломать голову над её решением. Эта коварная ошибка. . .
Подключение к контейнеру Docker и работа с его содержимым
hw_wired 13.02.2025
В мире современной разработки контейнеры Docker изменили подход к созданию, развертыванию и масштабированию приложений. Эта технология позволяет упаковать приложение со всеми его зависимостями в. . .
Отличия интерфейсов и типов в TypeScript
hw_wired 13.02.2025
TypeScript - мощное средство для создания качественного и поддерживаемого кода, который расширяет возможности JavaScript, добавляя систему статической типизации. В отличие от динамической типизации. . .
Async/await в циклах JavaScript
hw_wired 13.02.2025
Современная веб-разработка немыслима без асинхронного программирования. Когда приложение выполняет длительные операции - загрузку данных с сервера, чтение файлов или обработку медиа-контента, важно. . .
Git не работает на MacOS после апдейта
hw_wired 13.02.2025
После очередного обновления MacOS многие разработчики сталкиваются с неприятным сюрпризом - Git перестает работать и выдает ошибку "xcrun: error: invalid active developer path". Эта проблема особенно. . .
Git отказывается объединять несвязанные истории
hw_wired 13.02.2025
Git работает безупречно, пока мы не сталкиваемся с особыми ситуациями вроде объединения веток с разными корнями истории. В таких случаях система контроля версий может преподнести неприятный сюрприз в. . .
Проверка email с помощью JavaScript
hw_wired 13.02.2025
Email-адреса имеют довольно запутанную спецификацию, которая допускает множество неочевидных вариантов написания. Например, знали ли вы, что адрес вида "name+tag@domain. com" или даже. . .
Замена всех вхождений строки с помощью JavaScript
hw_wired 13.02.2025
JavaScript предлагает несколько способов для выполнения операций замены в строках, каждый из которых имеет свои особенности и область применения. От простейшей замены первого найденного вхождения до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru