Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

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

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

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

Здравствуйте! Задание звучит так:
Напишите программу, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 20:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack (C++):

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

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

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

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

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

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

6
zss
Модератор
Эксперт С++
6535 / 6097 / 2007
Регистрация: 18.12.2011
Сообщений: 15,859
Завершенные тесты: 1
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
Модератор
Эксперт С++
6535 / 6097 / 2007
Регистрация: 18.12.2011
Сообщений: 15,859
Завершенные тесты: 1
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
Модератор
Эксперт С++
6535 / 6097 / 2007
Регистрация: 18.12.2011
Сообщений: 15,859
Завершенные тесты: 1
24.12.2013, 21:45 #6
pop извлекает элемент из стека. С-но его надо отдать (записать во внешнюю переменную переданную по ссылке).
Так что, верните
C++
1
bool Stack:: pop(Item & item)
1
Agrik
6 / 6 / 0
Регистрация: 31.03.2013
Сообщений: 120
26.02.2014, 17:24 #7
CHELOVEKPAUK, заработала прога? можно увидеть все файлы готовые?
0
26.02.2014, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 17:24
Привет! Вот еще темы с ответами:

Создать программу, которая будет удалять символы введенные с клавиатуры - Pascal ABC
Доброго времени суток. Мне нужна программа, которая удаляла бы введенные с клавиатуры символы. Что именно мне нужно: Есть ссылка -...

Написать процедуру, которая будет удалять повторяющиеся элементы списка - Pascal ABC
Помогите написать процедуру(в коде она Delete2) которая будет удалять повторяющиеся элементы списка, если в них совпадает шифр и...

Создать стек сплошным представлением и продемонстрировать методы класса для стека из 15 элементов - Delphi
нужно создать стек сплошным представлением и продемонстрировать методы класса для стека из 15ти элементов. Не могу понять как описать...

Функция, которая будет добавлять новую строку в таблицу и возвращать id - SQL Server
В таблице есть 2 столбца. (Id, Name). Нужно перед добавлением проверить есть ли уже такое значение и, если нет, то добавить его. При этом...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru