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

Как пофиксить проблему в программе с шаблоном класса?

23.04.2022, 14:12. Показов 421. Ответов 3

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Задание такое: "Создать шаблонный класс – стек на основе статического массива указателей. Тип элемента стека определяется параметром шаблона (числа или символьные строки). Предусмотреть функции для выполнения следующих операций: занесение элементов в стек, удаление значения из вершины стека, вывод всех значений стека на экран, определение максимального элемента в стеке."

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
#include <iostream>
#include <cstring>
 
using namespace std;
 
template <class T, unsigned k>
class Stack {
 
private:
    T* arr;
    int size = 5;
 
public:
    Stack();
    ~Stack();
    T delfromstack(); // вилучення значення з вершини стеку
    T maxstack(const char* MinOrMax); // визначення максимального елемента у стеку
 
    friend ostream& operator<< <>(ostream&, Stack&);
    friend istream& operator>> <>(istream&, Stack&);
};
 
template <class T, unsigned k>
Stack<T, k>::Stack() {
 
    arr = new T[size];
 
    for (int i = 0; i < size; i++)
        arr[i] = k;
}
 
template <class T, unsigned k>
Stack<T, k>::~Stack() {
 
    delete[] arr;
}
 
 
template <class T>
istream& operator >> (istream& is, Stack<T, 0>& x) {
 
    cout << "Enter " << x.size << " stack's elements\n";
 
    for (int i = 0; i < x.size; i++)
        is >> x.arr[i];
 
    return is;
}
 
 
template <class T>
ostream& operator << (ostream& os, Stack<T, 0>& x) {
 
    cout << "------------------\n";
    cout << "Entered stack:  ";
 
    for (int i = 0; i < x.size; i++)
        os << x.arr[i] << ' ';
    os << endl;
 
    return os;
}
 
//----------------УДАЛЕНИЕ ИЗ СТЕКА----------------
template <class T, unsigned k>
T Stack<T, k>::delfromstack() {
    for (int i = 0; i < size - 1; i++)
        if (i >= arr[size - 1] - 1)
        {
            arr[i] = arr[i + 1];
        }
        else;
    cout << "\nNew stack: ";
    for (int i = 0; i < size - 1; i++)
    {
        cout << arr[i] << " ";
    }
    cout << "\nDeleted element: ";
    return arr[size - 1];
}
 
 
//----------------МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ----------------
template <class T, unsigned k>
T Stack<T, k>::maxstack(const char* MinOrMax) {
 
    T ExtrElem = arr[0];
 
    for (int i = 0; i < size - 1; i++)
 
        if (!strcmp(MinOrMax, "max")) {
 
            if (arr[i] > ExtrElem) ExtrElem = arr[i];
        }
        else {
 
            if (arr[i] < ExtrElem) ExtrElem = arr[i];
        }
    cout << "\nMax:  ";
    return ExtrElem;
}
 
 
 
int main()
{
    Stack<int, 0> V;
    Stack<int, 0>* Z = new Stack<int, 0>;
 
    Stack<char, 0> X;
    Stack<char, 0>* Y = new Stack<char, 0>;
 
    for (int i = 0; i < 1; ++i) {
        cout << "You what enter (1. NUMBERS/ 2. SYMBOLS): ";
        int choise;
        cin >> choise;
 
        switch (choise)
        {
        case 1:
            cin >> V;
            cout << V;
 
            *Z = V;
            cout << Z->delfromstack() << endl;
            cout << Z->maxstack("max") << endl;
            break;
        case 2:
            cin >> X;
            cout << X;
            
            *Y = X;
            cout << Y->delfromstack() << endl;
            cout << Y->maxstack("max") << endl;
            break;
        default:
             --i;
             cout << "Invalid choise! Try again!\n" << endl;
             break;
        }
    }
 
    return 0;
}
С вводом чисел все просто прекрасно, все работает как надо. А вот при вводе лексем, происходит следующая ситуация:

Code
1
2
3
4
5
6
7
8
9
10
You what enter (1. NUMBERS/ 2. SYMBOLS): 2
Enter 5 stack's elements
dfh d dkj ep fg
------------------
Entered stack:  d f h d d
 
New stack: d f h d
Deleted element: d
 
Max:  h
По задумке оно должно обрабатывать все 5 введенных лексем целиком, удалять необходимое, и выводить максимальное.
Но оно обрабатывает каждый символ по отдельности. Подскажите как это можно исправить, не переписывая с нуля уже имеющийся код(то есть можно ли его просто дополнить всем необходимым?)

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

В коде ошибка в 4 батоне(сортировка) как убрать проблему проблему(112 строка)
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, ...

Работа с шаблоном класса
Приветствую. Есть задание: 1. Создать шаблон заданного класса. Определить конструкторы, деструктор, перегруженную операцию присваивания...

Проблемы с шаблоном класса
Здравствуйте, помогите пожалуйста понять в чем ошибка, пытаюсь написать шаблон класса векторов, но получаю следующее: 1&gt;main.obj :...

3
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
23.04.2022, 14:44
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
оно обрабатывает каждый символ по отдельности.
Вы же сами сказали ему, что стек хранит отдельные символы.
char - это отдельный символ.

Цитата Сообщение от Retr0Hacker Посмотреть сообщение
не переписывая с нуля уже имеющийся код
Тут столько ошибок (помимо ситуации, которая привела к созданию темы), что без этого никак нельзя. Это самое лучшее, что вы можете сделать сейчас - поэтапно разобрать задачу и сделать все еще раз, но уже нормально.
0
0 / 0 / 0
Регистрация: 09.12.2021
Сообщений: 81
23.04.2022, 14:51  [ТС]
Тут столько ошибок (помимо ситуации, которая привела к созданию темы), что без этого никак нельзя
А где именно ошибки в шаблоне класса или в функциях(ну там в алгоритамх и т.д.)?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
23.04.2022, 15:01
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
А где именно ошибки в шаблоне класса или в функциях(ну там в алгоритамх и т.д.)?
Везде.
Например:
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
C++
1
i >= arr[size - 1] - 1
Что это? Какой смысл это будет иметь для стека, хранящего строки?

Например:
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
C++
1
arr = new T[size];
Что это? У вас в задании написано:
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
Создать шаблонный класс – стек на основе статического массива указателей.
Например:
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
C++
1
*Z = V;
Правило "трех" проигнорировано, чтобы эта запись была безопасной.

Например:
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
C++
1
strcmp(MinOrMax, "max")
Что это?

Например:
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
C++
1
return arr[size - 1];
Что это будет означать, если в стеке всего один элемент?

Ну и т.д.

Добавлено через 40 секунд
Все мои вопросы были риторические.
Если что.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2022, 15:01
Помогаю со студенческими работами здесь

Объявление класса с шаблоном
Пишу в Qt. Создал класс с шаблоном matrix.h #ifndef MATRIX_H #define MATRIX_H template &lt;class T&gt; class Matrix {

Работа с шаблоном класса Vector
Я недавно начала интересоваться программированием на С++, но для меня это достаточно сложно. Вот написала прогу, в которой надо создать...

Маленький косяк с шаблоном класса
Задание: Разработать шаблонный класс для работы с очередью. Должны быть реализованы операции включения и выборки значений из очереди....

В чем разница между классом и шаблоном класса?
Помогите ответить. В чем разница между классом и шаблоном класса?

Зачем пишется имя класса перед шаблоном?
#include &lt;iostream&gt; template &lt;typename T&gt; class Grid { public: Grid(int mWidth = kDefaultWidth, int mHeight =...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru