Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
24.12.2013, 20:49     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack #1
Здравствуйте! Задание звучит так:
Напишите программу, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса 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;
}


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

Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 20:49     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack
Посмотрите здесь:

C++ Написать программу, которая будет добавлять в текстовый файл введенную из клавиатуры информацию
C++ Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ.
Conflicting declaration при предварительным объявлением класса C++
STL. Функция, которая будет искать элементы большее среднего арифметического вектора и удалять их из вектора C++
Динамические структуры данных ( функцию, которая будет удалять i-ый элемент) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,188
Завершенные тесты: 1
24.12.2013, 20:58     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack #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;
}
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
24.12.2013, 21:03  [ТС]     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack #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 элемент стека назад? и данные в элементе не удаляются, а просто заменяются?
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,188
Завершенные тесты: 1
24.12.2013, 21:06     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack #4
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
не удаляются, а просто заменяются?
Именно так.
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
24.12.2013, 21:39  [ТС]     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack #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;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,188
Завершенные тесты: 1
24.12.2013, 21:45     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack #6
pop извлекает элемент из стека. С-но его надо отдать (записать во внешнюю переменную переданную по ссылке).
Так что, верните
C++
1
bool Stack:: pop(Item & item)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 17:24     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack
Еще ссылки по теме:

C++ Написать программу, которая будет добавлять в текстовый файл введенную с клавиатуры информацию.З клавиатуры вводится имя компании, год основания
Создать файл, в который можно добавлять, редактировать и удалять элементы структуры C++
C++ Как правильно добавлять и удалять элементы в вектор и из него

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

Или воспользуйтесь поиском по форуму:
Agrik
5 / 5 / 0
Регистрация: 31.03.2013
Сообщений: 120
26.02.2014, 17:24     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack #7
CHELOVEKPAUK, заработала прога? можно увидеть все файлы готовые?
Yandex
Объявления
26.02.2014, 17:24     Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack
Ответ Создать тему
Опции темы

Текущее время: 15:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru