0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 22

Написать программу преобразования инфиксной формы выражения в постфиксную (память)

09.10.2015, 02:18. Показов 2530. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникает проблема с использованием памяти. Не могу исправить. Точка останова срабатывает в функции removeAll

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
#include <iostream>
 
using namespace std;
 
struct Stack
{
    char element;
    struct Stack *next;
};
 
int priority(char c)
{
    switch (c)
    {
    case '*':
    case '/':
        return 3;
 
    case '-':
    case '+':
        return 2;
 
    case '(':
        return 1;
    }
}
 
char pop(Stack **stack)
{
    Stack *auxiliary = *stack;
    char symbol;
    symbol = auxiliary->element;
    *stack = auxiliary->next;
    free(auxiliary);
    return symbol;
}
 
void removeAll(Stack **stack)
{
    Stack *auxiliary = new Stack;
    while (*stack != NULL)
    {
        auxiliary = *stack;
        *stack = (*stack)->next;
        delete auxiliary;
    }
}
 
void add(char symbol, Stack **stack)
{
    Stack *auxiliary = new Stack;
    auxiliary->element = symbol;
    auxiliary->next = *stack;
    *stack = auxiliary;
}
 
bool empty(Stack *stack)
{
    return stack == NULL;
}
 
int main()
{
    Stack *operations = new Stack;
    removeAll(&operations);
    int length = 0;
    char *entered = new char[length];
    char *rendered = new char[length];
 
    cout << "Enter the arithmetic expression: " << endl;
    cin >> entered;
 
    int j = -1;
    for (int i = 0; i < strlen(entered); ++i)
    {
        if ((entered[i] >= '0') && (entered[i] <= '9'))
        {
            rendered[j++] = entered[i];
        }
        if (entered[i] == '(')
        {
            add(entered[i], &operations);
        }
        if ((entered[i] == '+') || (entered[i] == '*') || (entered[i] == '/') || (entered[i] == '-'))
        {
            if (empty(operations))
            {
                add(entered[i], &operations);
            }
            else
            {
                if (priority(operations->element) < priority(entered[i]))
                {
                    add(entered[i], &operations);
                }
                else
                {
                    while ((!empty(operations)) && (priority(operations->element) >= priority(entered[i])))
                    {
                        rendered[j++] = pop(&operations);
                    }
                    add(entered[i], &operations);
                }
            }
        }
        ++i;
    }
 
    while (operations != NULL)
    {
        rendered[j++] = pop(&operations);
    }
    rendered[j] = NULL;
    for (int i = 0; i < j; ++i)
    {
        cout << rendered[i];
    }
 
    removeAll(&operations);
 
    delete[] entered;
    delete[] rendered;
 
    cout << "Enter 0 to exit: " << endl;
    cin >> length;
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2015, 02:18
Ответы с готовыми решениями:

Преобразования инфиксной формы в постфиксную
Во входном файле задана корректная инфиксная форма арифметического выражения , содержащая односимвольные операнды в виде десятичных цифр...

Написать программу, которая переводит выражение, записанное в обычной (инфиксной) форме в текстовом файле infix, в постфиксную форму
Дали непростые задачи по программированию. Кто бы мог хотя бы ввести меня в дело? Постфиксной формой записи выражения aΔb...

Перевод выражения из инфиксной в постфиксную форму
Перевести выражение из инфиксной в постфиксную форму. Вот мой код. Почему то на некоторых примерах при выводе ответа несколько раз пищит и...

1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.10.2015, 03:51
1) Учить тему "конструкторы". 64 строчка - создается новый объект Stack. Конструктора у Stack нет, поэтому объект забит мусором. Потом removeAll пытается что-то с этим мусором сделать...
2) Учить тему ссылок и заменять все эти сишные Stack **stack на плюсовые Stack *&stack.
3) Учить тему "методы". Stack переименовать в Stack_Node. Затем, создать новый класс Stack содержащий указатель на начало стека. Все эти pop/add сделать методами этого самого Stack.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2015, 03:51
Помогаю со студенческими работами здесь

Перевод инфиксной формы в постфиксную
Пишу программу для перевода из инфиксной системы в постфиксную, при работе программы выдает ошибку EAccessviolation, и указывает на Stack....

Перевод арифметического выражения из инфиксной форму в постфиксную
Помогите написать код, попытки были но неудачные . polsk=raw_input(&quot;vvedi polskyy &quot;) #infix or postfix in input??? not clear ...

Перевести выражение из инфиксной формы в постфиксную
Помогите пожалуйста написать программу. Дана строка, в которой записано математическое выражение в инфиксной форме. В этой строке могут...

Преобразование арифметического выражения из инфиксной в постфиксную форму записи
Помогите реализовать алгоритм I-P на Pascal...Для работы со стеком использовать связное распределение памяти процедуры: - Создание...

Написать программу, которая преобразует выражение из инфиксной формы в префиксную
Используя класс Stack написать программу, которая преобразует выражение из инфиксной формы в префиксную. т.е. по такому принципу:


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

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

Новые блоги и статьи
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
Основы WebGL. Раскрашивание вершин с помощью VBO
8Observer8 05.07.2025
На русском https:/ / vkvideo. ru/ video-231374465_456239020 На английском https:/ / www. youtube. com/ watch?v=oskqtCrWns0 Исходники примера:
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Mr. Docker 04.07.2025
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К. . .
Проблемы с Kotlin и Wasm при создании игры
GameUnited 03.07.2025
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой. . .
Создаем микросервисы с Go и Kubernetes
golander 02.07.2025
Когда я только начинал с микросервисами, все спорили о том, какой язык юзать. Сейчас Go (или Golang) фактически захватил эту нишу. И вот почему этот язык настолько заходит для этих задач: . . .
C++23, квантовые вычисления и взаимодействие с Q#
bytestream 02.07.2025
Я всегда с некоторым скептицизмом относился к громким заявлениям о революциях в IT, но квантовые вычисления - это тот случай, когда революция действительно происходит прямо у нас на глазах. Последние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru