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

Используя рекурсию, определить правильность размещения скобок

03.12.2016, 12:11. Показов 1487. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу, что определяет правильность размещения трьох видов скобок ( ), [ ], { }. Использовать рекурсию
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2016, 12:11
Ответы с готовыми решениями:

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

Написать парсер текста, проверяющий правильность расстановки скобок, используя стек и файловый ввод/вывод
Дан текстовый файл INPUT.TXT. Проверить в тексте файла правильности расстановки открывающих и закрывающих скобок ‘(‘, ‘)’, ‘{‘, ‘}’, ‘’....

В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой программе
В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой...

24
76 / 73 / 67
Регистрация: 18.09.2015
Сообщений: 234
03.12.2016, 12:36
Что есть "правильное размещение"?
0
2 / 2 / 2
Регистрация: 10.09.2015
Сообщений: 100
03.12.2016, 12:44  [ТС]
amaralikyr, что они являються закрытыми, () - правильное, (() - неправильное
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
03.12.2016, 12:48
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
#include <iostream>
#include <string>
 
using namespace std;
 
bool braces_ok(string a, int idx){
    static int braces_count[3] = {0};
    if(idx == a.size()){
        for(int i = 0; i < 3; i++)
            if(braces_count[i] != 0)
                return false;
        return true;
    }
    switch(a[idx]) {
        case '(':
            braces_count[0]++;
            break;
        case ')':
            if(braces_count[0] == 0)
                return false;
            braces_count[0]--;
            break;
        case '[':
            braces_count[1]++;
            break;
        case ']':
            if(braces_count[1] == 0)
                return false;
            braces_count[1]--;
        case '{':
            braces_count[2]++;
            break;
        case '}':
            if(braces_count[2] == 0)
                return false;
            braces_count[2]--;
        braces_ok(a,idx + 1);
    }
}
 
int main() {
    string a = "(({{{[[[[]]]]}}}))";
    cout << boolalpha << braces_ok(a,0);
}
Добавлено через 2 минуты
на всякий случай напишу: true правильно , falseне правильное размещение скобок)
0
2 / 2 / 2
Регистрация: 10.09.2015
Сообщений: 100
03.12.2016, 12:54  [ТС]
IchimaruGin, ну это же итерационное решение, я так знаю как решить
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
03.12.2016, 12:55
hardyaw, ты знаешь что такое рекурсия?
0
2 / 2 / 2
Регистрация: 10.09.2015
Сообщений: 100
03.12.2016, 13:06  [ТС]
IchimaruGin, функция, вызывающая саму себя
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
03.12.2016, 13:12
hardyaw, рекурсивная функция это та что вызывает саму себя.
Цитата Сообщение от IchimaruGin Посмотреть сообщение
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
bool braces_ok(string a, int idx)
{
    static int braces_count[3] = { 0 };
    if (idx == a.size()) {
        for (int i = 0; i < 3; i++)
            if (braces_count[i] != 0)
                return false;
        return true;
    }
    switch (a[idx]) {
    case '(':
        braces_count[0]++;
        break;
    case ')':
        if (braces_count[0] == 0)
            return false;
        braces_count[0]--;
        break;
    case '[':
        braces_count[1]++;
        break;
    case ']':
        if (braces_count[1] == 0)
            return false;
        braces_count[1]--;
    case '{':
        braces_count[2]++;
        break;
    case '}':
        if (braces_count[2] == 0)
            return false;
        braces_count[2]--;
        braces_ok(a, idx + 1); // вот вызов функции braces_ok из braces_ok
    }
}
что не так?

Добавлено через 4 минуты
блин только надо вынести ее за пределы switch'a

Добавлено через 37 секунд
и добавить break
0
2 / 2 / 2
Регистрация: 10.09.2015
Сообщений: 100
03.12.2016, 13:12  [ТС]
IchimaruGin, ну это понятно, а можно как то сделать не свитчем? например 3 функции которые отвечают за каждую из скобок, но я не могу додуматься что в них написать
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
03.12.2016, 13:25
но ведь всё равно придется проверять какая скобка

Добавлено через 1 минуту
сейчас по другому сделаю, думаю тебе понравится, но вс'равно со свичом

Добавлено через 9 минут
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
bool braces_ok(string a, int idx, int square, int round, int braces){// square - '['']' round - '('')' braces - '{''}'
    if(idx == a.size()){
        if(square == 0 && round == 0 && braces == 0)
            return true;
        return false;
    }
    switch(a[idx]) {
        case '(':
            braces_ok(a, idx + 1, square, round + 1, braces);
            break;
        case ')':
            if(round == 0)
                return false;
            braces_ok(a, idx + 1, square, round - 1, braces);
            break;
        case '[':
            braces_ok(a, idx + 1, square + 1, round, braces);
            break;
        case ']':
            if(square == 0)
                return false;
            braces_ok(a, idx + 1, square - 1, round, braces);
        case '{':
            braces_ok(a, idx + 1, square, round, braces + 1);
            break;
        case '}':
            if(braces == 0)
                return false;
            braces_ok(a, idx + 1, square, round, braces - 1);
    }
}
0
76 / 73 / 67
Регистрация: 18.09.2015
Сообщений: 234
03.12.2016, 13:25
IchimaruGin, Не совсем понятно, к примеру string a = "[]]"; результат true, так и должно быть по условию задачи?
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
03.12.2016, 13:28
amaralikyr, сейчас пересмотрю
0
2 / 2 / 2
Регистрация: 10.09.2015
Сообщений: 100
03.12.2016, 13:42  [ТС]
IchimaruGin, окей, а можешь сделать полный код?
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
03.12.2016, 13:44
hardyaw, в каком смысле?
0
2 / 2 / 2
Регистрация: 10.09.2015
Сообщений: 100
03.12.2016, 13:59  [ТС]
IchimaruGin, ну с мейном библиотеками и т.д
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
03.12.2016, 14:00
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
#include <iostream>
#include <string>
 
using namespace std;
 
bool braces_ok(string a, int idx, int square, int round, int braces){
    cout << square << " " << round << " " << braces << endl;
    if(idx == a.size())
        return true;
    if(square < 0 || round < 0 || braces < 0)
        return false;
    else {
        switch(a[idx]) {
            case '(':
                return braces_ok(a, idx + 1, square, round + 1, braces);
                break;
            case ')':
                return braces_ok(a, idx + 1, square, round - 1, braces);
                break;
            case '[':
                return braces_ok(a, idx + 1, square + 1, round, braces);
                break;
            case ']':
                return braces_ok(a, idx + 1, square - 1, round, braces);
                break;
            case '{':
                return braces_ok(a, idx + 1, square, round, braces + 1);
                break;
            case '}':
                return braces_ok(a, idx + 1, square, round, braces - 1);
                break;
            default:
                return braces_ok(a, idx + 1, square, round, braces);
                break;
        }
    }
}
 
int main() {
    string a = "{}[][]][";
    cout << boolalpha << braces_ok(a,0,0,0,0);
}
0
76 / 73 / 67
Регистрация: 18.09.2015
Сообщений: 234
03.12.2016, 14:00
Вообще не понимаю зачем использовать рекурсию для этого задания, это все равно что прикрутить 5 колесо к машине.
0
2 / 2 / 2
Регистрация: 10.09.2015
Сообщений: 100
03.12.2016, 14:04  [ТС]
amaralikyr, я тоже не понимаю, ибо в 100 раз проще решить так, и затрат ПК меньше будет нужно, но преподам нужна рекурсия...
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
03.12.2016, 14:05
так предыдущая функция тоже рекурсивная но с меньшим уровнем рекурсии
0
2 / 2 / 2
Регистрация: 10.09.2015
Сообщений: 100
03.12.2016, 14:08  [ТС]
IchimaruGin, а можно ли как то сделать в этом коде, что бы оно в ответ выдавало по отдельным скобкам результат?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2016, 14:08
Помогаю со студенческими работами здесь

Используя Стек, Определить Правильность Расстановки Скобок
С Клавиатуры Вводится Арифметическое Выражение С Использование Круглых, Квадратных И Фигурных Скобок. Используя Стек, Определить ...

Используя стек, проверить правильность вложений операторных скобок (begin/end)
В файле находится текст программы на pascal. используя стек проверить правильность вложений операторных скобок (begin/end) в этой...

Используя стек, проверить правильность вложений операторных скобок (begin - end) в программе на Паскале
В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой...

Определить правильность расстановок скобок в тексте
Дан файл содержащий произвольный текст. Определить правильно ли в нем расставлены скобки. (количество &quot;(&quot;=количеству...

Определить правильность расстановки скобок в строке
Добрый день. Появилась проблема: имеется задача &quot;Дан текст в файле, проверить правильно ли расположены скобки ( и ), т.е. ( перед )....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
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
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru