Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 07.11.2018
Сообщений: 9

Класс-контейнер стек с итератором

07.11.2018, 17:17. Показов 1974. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть задание - калькулятор комплексных чисел. Нужна помощь в написании класса-контейнера(стека), который должен хранить комплексные числа(объекты уже созданного мной ранее класса с именем Complex) и арифметические операции над ними (+ - * /).
Класс должен содержать: конструкторы по умолчанию и копирования; методы добавления и удаления элементов; метод, удаляющий все хранимые элементы; метод, возвращающий число хранящихся объектов; два метода для загрузки данных из произвольного файла и для записи данных в произвольный файл; метод доступа к элементу по итератору; класс итератор для стека(внутри класса-контейнера). Также вне классов нужна функция вывода элементов стека на экран.

Пожалуйста помогите, очень долго пытаюсь сделать и не получается, перегуглил все, что мог!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2018, 17:17
Ответы с готовыми решениями:

Класс list с итератором на суд для знающих
Прошу просмотреть на предмет плохого кода и потенциальных багов. Любая критика приветствуется!#include <ctime> #include...

Описать и реализовать класс Стек, моделирующий массивом стек, для хранения любых объектов
ПОЖАЛУЙСТА ПОМОГИТЕ РАЗОБРАТЬСЯ С ЗАДАЧЕЙ НА JAVA!!! только начинаю изучать этот язык. буду очень признательна за пояснение каждой...

Создать класс СПИСОК целых чисел. Разработать класс СТЕК
"Создать класс СПИСОК целых чисел. Разработать класс СТЕК, который вмещает объект класса СПИСОК. Определить необходимые конструкторы,...

3
 Аватар для Горбаг
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 834
07.11.2018, 17:31
Ну кидай свой код, смотреть будем. И с чем конкретно проблема, не забудь сказать?
0
0 / 0 / 0
Регистрация: 07.11.2018
Сообщений: 9
07.11.2018, 18:31  [ТС]
Вот код. Не знал, как хранить в стеке и комплексные числа и арифм. операторы, поэтому сделал структуру. В моем коде нет итератора, так и не разобрался как его писать. Изучать ООП начал недавно, но требуют уже много, не успеваю разобраться.
Есть много копипаста. Проблема в том, что не пойму, как нормально хранить данные в стеке, дальше проблема с итератором. Из-за всего этого некрасиво получилась функция подсчета значения выражения, какой-то костыль...

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
//Структура, состоящая из комплексного числа и математического оператора
struct NumberAndOperator  {
   Complex Number;
   char operate;
};
//КЛАСС СТЕК----------------------------------------------------------------------------------------------
template <typename T>
class Stack
{
private:
   T *stackPtr;                      // указатель на стек
   const int size;                   // максимальное количество элементов в стеке
   int top;                          // номер текущего элемента стека
 
public:
   Stack(int = 10);                  // по умолчанию размер стека равен 10 элементам
   Stack(const Stack<T> &);          // конструктор копирования
   ~Stack();                         // деструктор
 
   void push(const T & );     // поместить элемент в вершину стека
   char OperatorFromStack();  //выделить математический оператор из стека
   Complex pop();                   // удалить элемент из вершины стека и вернуть его
   const T &Peek(int ) const; // n-й элемент от вершины стека
   int getStackSize() const;  // получить размер стека
   T *getPtr() const;         // получить указатель на стек
   int getTop() const;        // получить число элементов в стеке
   void empty();              //удалить все элементы стека
   Complex Calculator();      //подсчёт значения выражения, хранящегося в стеке
};
 
// реализация методов шаблона класса Stack
 
// конструктор Стека
template <typename T>
Stack<T>::Stack(int maxSize) :
   size(maxSize) // инициализация константы
{
   stackPtr = new T[size]; // выделить память под стек
   top = 0; // инициализируем текущий элемент нулем;
}
 
// конструктор копирования
template <typename T>
Stack<T>::Stack(const Stack<T> & otherStack) :
   size(otherStack.getStackSize()) // инициализация константы
{
   stackPtr = new T[size]; // выделить память под новый стек
   top = otherStack.getTop();
 
   for(int ix = 0; ix < top; ix++)
       stackPtr[ix] = otherStack.getPtr()[ix];
}
 
// функция деструктора Стека
template <typename T>
Stack<T>::~Stack()
{
   delete [] stackPtr; // удаляем стек
}
 
// функция добавления элемента в стек
template <typename T>
void Stack<T>::push(const T &value)
{
   // проверяем размер стека
   assert(top < size); // номер текущего элемента должен быть меньше размера стека
 
   stackPtr[top++] = value; // помещаем элемент в стек
}
 
 
//функция выделения математического оператора из стека
template <typename T>
char Stack<T>::OperatorFromStack()
{
   // проверяем размер стека
   assert(top > 0); // номер текущего элемента должен быть больше 0
   NumberAndOperator StructureOp = stackPtr[top - 1];
   char TopOperator = StructureOp.operate;
   return TopOperator;
}
 
 
// функция удаления элемента из стека; возвращает комплексное число, входящее в структуру
template <typename T>
Complex Stack<T>::pop()
{
   // проверяем размер стека
   assert(top > 0); // номер текущего элемента должен быть больше 0
   NumberAndOperator Structure = stackPtr[top - 1];
   Complex TopValue = Structure.Number;
   stackPtr[--top]; // удаляем элемент из стека
   return TopValue;
}
 
// функция возвращает n-й элемент от вершины стека
template <class T>
const T &Stack<T>::Peek(int nom) const
{
 //
 assert(nom <= top);
 
 return stackPtr[top - nom]; // вернуть n-й элемент стека
}
 
 
 
// вернуть размер стека
template <typename T>
int Stack<T>::getStackSize() const
{
   return size;
}
 
// вернуть указатель на стек (для конструктора копирования)
template <typename T>
T *Stack<T>::getPtr() const
{
   return stackPtr;
}
 
// вернуть число элементов стека
template <typename T>
int Stack<T>::getTop() const
{
   return top;
}
//удаление всех элементов стека
template <typename T>
void Stack<T>::empty()
{
   while(top)
       pop();
}
 
//Метод подсчёта значения выражения
template <typename T>
Complex Stack<T>::Calculator()
{   Complex Value;
 
   while(top){
       switch(OperatorFromStack()){
           case '0':
               Value = pop();
               break;
           case '+':
               Value = Value + pop();
               break;
           case '-':
               Value = Value - pop();
               break;
           case '*':
               Value = Value * pop();
               break;
           case '/':
               Value = Value / pop();
               break;
       }
   }
 
   return Value;
}
0
0 / 0 / 0
Регистрация: 07.11.2018
Сообщений: 9
08.11.2018, 12:40  [ТС]
Есть ли какие-то идеи по моему коду?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2018, 12:40
Помогаю со студенческими работами здесь

Разработать базовый класс "прямоугольник", производный класс "Окно" и класс-контейнер "Список окон"
Реализовать все задачи в С # WPF 1. Разработать класс прямоугольник, имеющий координаты верхнего левого и нижнего правого угла, цвет...

Класс Стек Stack. не работает класс исключений
Здравствуйте! Решил проверить код на пригодность, но почему то класс исключений выскакивает на ошибке. Я никак не могу понять такие вещи...

класс-контейнер
Дан файл, содержащий информацию о сотрудниках фирмы: фамилия, имя, отчество, пол, возраст, размер зарплаты. За один просмотр файла...

класс-контейнер
ArrayList — реализует интерфейс List. Как известно, в Java массивы имеют фиксированную длину, и после того как массив создан, он не может...

Класс- контейнер
Помогите, пожалуйста! Создать класс Liquid (жидкость), имеет поля «имя» и «плотность». определить методы переназначения и изменения...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru