Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/35: Рейтинг темы: голосов - 35, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120

Раскрытие скобок

20.06.2012, 00:33. Показов 6912. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, алгоритм раскрытия вложенных и перемножаемых скобок типа: (..())()()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2012, 00:33
Ответы с готовыми решениями:

Своеобразное раскрытие аргументов variadic template
Товарищи. Как бы сделать так, чтобы variadic раскрылся в нечто такое: template <typename ... Args> void func(const...

[C++] Синтаксис скобок
Здравствуйте, вот задача: Используя стек, определить функцию проверки правильности расстановки скобок в алгебраическом выражении....

Включить отображение парных скобок в c++ Builder 6
Здравствуйте уважаемые форумчане. Вот сижу копаюсь в опциях(c++ Builder 6) и никак не могу найти где поставить отображение парных скобок....

8
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
20.06.2012, 00:42
1rop, чтиво
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
/*Функция возвращает приоритет*/
int Priority(char in)
{
        switch (in)
        {
                case '+': case'-':           return 1;
                case '*': case'/': case '^': return 2;
        }
}
/*Функция удаляет скобки*/
void Del_Par(char *in)
{
        int min_pr, pr, i, l, n;
 
        n = strlen(in);
 
        if (in[0] == '(' )
        {
                i = 1;
                l = 0;
                
        /* Проверка соответствия символов '(' и ')'
        в строке in[2..n-1] или отсутствия этих
        символов */
                while ((l >= 0) && (i < n - 1))
                {
                        if (in[i] == ')') l--;
                        if (in[i] == '(') l++;
                        i++;
                }
 
                if (l == 0)
                {
                        in[n - 1] = 0;
                        char *in2 = strdup((in + 1));
                        strcpy(in, in2);
                }
        }
}
/*Функция вычисляет приотритет для чтения*/
int Last_Oper(char *in)
{
        int min_pr, pr, i, n, last, l;
 
        Del_Par(in);
        last = -1;
        min_pr = 3;
        i = 0;
        n = strlen(in);
 
        while (i <= n - 1)
        {
                if (in[i] == '(') //пропустить выражение в круглых скобках
                {
                        l = 1;
                        while (l > 0)
                        {
                                i++;
                                if(in[i] == ')')  l--;
                                if(in[i] == '(') l++;
                        }
                }
                else
                        switch(in[i])
                        {
                                case'+':case'-':case'*':case '/':case '^':
                                {
                                        pr = Priority(in[i]);
                                        if(pr <= min_pr)
                                        {
                                                min_pr = pr;
                                                last = i;
                                        }
                                }break;
                        }
                        i++;
        }
        return last;
}
1
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
20.06.2012, 01:17  [ТС]
что-то не очень понятно с приоритетом, по какому принципу определяется первое действие? а где тут перемножение скобок?
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
20.06.2012, 01:28
1rop, читайте книжку.
0
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
20.06.2012, 02:02  [ТС]
Да теория-то понятна, рекурсивный вызов и все такое, но вот алгоритм для этой задачи не пойму никак, ясно, что нужно рекурсивно вызывать функцию пока не останется скобок, но как это делается, я просто думаю надо из самых внутренних скобок идти наружу, а вот перемножение скобок по две вызывают опасения, ибо в любой скобке может находится огромное выражение с перемножением и т.п., а, и попытался ваш код в обработчик вставить, ругается на первую функцию, синтаксическая ошибка вроде...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
20.06.2012, 02:39
1rop, чем меньше отсебятины - тем лучше. Показывате, что, куда и как вставляли, пишете тексты ошибок и ждете.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
20.06.2012, 02:57
Цитата Сообщение от QVO Посмотреть сообщение
case '*': case'/': case '^': return 2;
или я чего то не понимаю или одно из двух
с какого перепугу логическая операция XOR (^)стала наравне с умножением и делением
даже если это возведение в степень(^) то тоже не логично

2*2^3 по вашей логике будет 64 (2*2)^3(слева идем) =4^3=64
а не 16 как положено 2*(2^3) =2*8=16

Добавлено через 4 минуты
Цитата Сообщение от QVO Посмотреть сообщение
int Priority(char in)
{
switch (in)
{
case '+': case'-': return 1;
case '*': case'/': case '^': return 2;
}
}
это че вот так учат? а если символ не равен этим значениям ???
где default ???
return после switch?? и даже компилятор не возмутился?
1
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
20.06.2012, 11:44
ValeryS, и какой же знак может быть, когда в задание (откуда взят код) были четко написаны символы.
Цитата Сообщение от ValeryS Посмотреть сообщение
это че вот так учат?
Вообще не учат.
0
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
21.06.2012, 00:31  [ТС]
Спасибо всем, экзамен на 4 сдал, но лично для меня все эти case и рекурсивный вызов сложнее и тяжелее, чем замена их на условные операторы и циклы типа while, и как я понял, это малая часть функции, ибо нужно учитывать вложенность и перемножение скобок внутри, да, перемножение довольно просто, что я и сделал, а вот с вложенностью проблемы, так как доходя до первой закрывающей скобки(по другому приоритет не придумал как выделять) появляется куча вариаций развития событий, таких как простые множители, влияние минуса перед скобкой, положение делителя или делимого, которое нельзя менять, так же, если идет одновременно с этим перемножение скобок. Может есть простой способ, но как минимум все эти варианты должны быть учтены.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2012, 00:31
Помогаю со студенческими работами здесь

Авто-расположения скобок в visual studio
Сейчас, при нажатии Enter, это выглядит так: int parser(){ } а нужно: int parser() {

Написать алгоритм для перемножения скобок вида (4-А)* (3-А)
Нужно написать алгоритм для перемножения скобок вида (4-А)*(3-А). Причем таких скобок может быть больше, и всегда в скобках вычитается А....

Расстановка скобок в запросе, в условии or
Доброго времени суток.. есть вот такой запрос DataModuleABS-&gt;ADOQueryZakaz-&gt;SQL-&gt;Add(&quot;SELECT КодОпл, Заказ FROM dbo.ТипНовости...

раскрытие скобок
Доброе время суток! Понимаю, что вопрос очень глупый))но начала раскрывать скобки в выражении и получился немного другой вид, нежели,...

Множества, раскрытие скобок
x принадлежит(A U B) в отрицании =&gt; x не принадлежит A(без отрицания) или x не принадлежит B(без отрицания). Почему при раскрытии скобок...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru