0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 12
1

Расставить приоритет арифметической операции в массив

07.05.2020, 10:27. Показов 461. Ответов 5
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Итак, задачка. Расставить приоритет арифметической операции в массив. например (1+2)+5*12-5*3 = [0,2,1,4,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
#include <string>
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
 
string test = "(1+2)+5*12-5*3";
stack<char>operations;
vector<int>order;
int i = -1;
int brackets_i = 0;
 
bool is_el(char element) { // функция возвращает 'true', если элемент - операция или скобка
    if (element == '+' || element == '-' || element == '*' ||
        element == '/' || element == ')' || element == '(') {
        return true;
    }
    return false;
}
int priority(char element) { // функция возвращает приоритет операции
    if (element == '+' || element == '-') {
        return 1;
    }
    if (element == '*' || element == '/') {
        return 2;
    }
    return -1;
}
void print() { // вывод вектора на экран
    for (auto element : order) {
        cout << element << " " << endl;
    }
}
int main()
{
    for (auto element : test) {
        int k = 0;
        if (is_el(element)) {
            i++;
            operations.push(element);
            order.push_back(i);
            if (is_el(element) == ')') {
                while (operations.top() != '(') {
                    char el = operations.top();
                    operations.pop();
                    if (priority(el) >= priority(operations.top)) {
                        order[i] = k;
                        k++;
                    }
                    else if (priority(operations.top()) >= priority(el)) {
                    
                    }
                }
            }
        }
    }
    print();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2020, 10:27
Ответы с готовыми решениями:

Приоритет операторов (расставить скобки)
Необходимо расставить скобки в следующем выражении: a==b||a==c&amp;&amp;c&lt;5Объясните расстановку. Я...

Логические операции и приоритет операций
Привет всем, объясните, пожалуйста: 1)За что отвечает эта часть кода? bool xor(bool a, bool b) {...

Возможно ли менять приоритет операции с++
Возможно ли менять приоритет операции с++

Переполнение в арифметической операции
Вот код, говорит, что ошибка находится на строке 10 uses crt; var n,i : integer; max :...

5
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 10:46 2
Цитата Сообщение от Yocata123 Посмотреть сообщение
Итак, задачка. Расставить приоритет арифметической операции в массив. например (1+2)+5*12-5*3 = [0,2,1,4,3].
Прошу вас, опытных, проверить, иду ли я в правильном направлении. Вот, что есть на данном этапе "разработки"))
Попробуй использовать std::priority_queue вместо vector
1
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 12
07.05.2020, 10:50  [ТС] 3
Еще дополню цитатой: "Создать словарь и расставить по словарю порядок действий"
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 10:52 4
Цитата Сообщение от Yocata123 Посмотреть сообщение
Еще дополню цитатой: "Создать словарь и расставить по словарю порядок действий"
Ты о чём, вообще? Причём здесь словарь?
0
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 12
07.05.2020, 10:58  [ТС] 5
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ты о чём, вообще? Причём здесь словарь?
Цитата руководителя:
(1+2)*3 -11+2*(21+1)=>array[ 0, 1, 2, 3, 4, 5 ]
формируешь список или массив всего операций
заводишь словарь
суть - расставить по словарю порядок действий
короче скобка первая
0=>1
5=>1
потом умножение
1=>2
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 11:05 6
Цитата Сообщение от Yocata123 Посмотреть сообщение
суть - расставить по словарю порядок действий
Порядок действий можно и без словаря определить, в массиве
0
07.05.2020, 11:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2020, 11:05
Помогаю со студенческими работами здесь

Повтор арифметической операции
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; float...

Ввести знак арифметической операции
С знаком + у меня работает &lt;body&gt; &lt;script&gt; str1=prompt(&quot;Введите первое число&quot;, &quot;0&quot;); var...

Точка в арифметической операции из кода c++
Подскажите пожалуйста, что означает точка (возле двойки) в языке c++, и какой аналог в Java? x =...

Неправильный результат арифметической операции
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { float e; e = 1 + (1/1) + (1/(1*2));...

Выбор арифметической операции и ее выполнение
Program P6; uses crt; var x,y,k:integer; begin clrscr; writeln(‘введите х и у’); readln(x,y);...

Выбор арифметической операции через RadioButton
Разбираюсь на примерах калькулятора Имеется форма с двумя эдитами и 4мя радио батонами...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru