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

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

20.06.2012, 00:33. Показов 6877. Ответов 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru