Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/67: Рейтинг темы: голосов - 67, средняя оценка - 4.72
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227

Баланс круглых скобок

10.03.2011, 19:14. Показов 13594. Ответов 42
Метки нет (Все метки)

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

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

Помогите люди добрые!!Со строками вообще проблема...не знаю как!!Помогите пожалуйста!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.03.2011, 19:14
Ответы с готовыми решениями:

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

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

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

42
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 20:52  [ТС]
Студворк — интернет-сервис помощи студентам
такое чувство что тут ваще ничего не работает....он не доходит почему-то что если ) то нет баланса...там же контролБ0...а он почему это не считывает((((

Добавлено через 33 секунды
asics, ваш код для меня сложный..не могу разобраться((

Добавлено через 1 минуту
я не понимаю std::cin и всё std::!!!

Добавлено через 1 минуту
#include <algorithm>и надо без этой библиотеки
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 21:56
все работает.
1)bz-был заход в блок он нужен для
C++
1
2
3
4
5
6
if(otkr==zakr &&bz==0)
cout<<"est balans";
else if(bz>0)
 cout<<"net balansa";
else if(otkr!=zakr)
cout<<"net balansa";
2)было сказанно что такая ситуация )( дисбаланс.я воспринял это как окончание парсинга,поэтому
C++
1
2
3
4
if(zakr>otkr) {
 bz++;
break;
    }
в тот момент когда закрывающихся скобок больше открывающихся break.если не важно в каком порядке появляются скобки,то ничего не остается как просто посчитать кол-во откр и закр скобок
1
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
17.03.2011, 21:58
Цитата Сообщение от barlog Посмотреть сообщение
#include <algorithm>и надо без этой библиотеки
Ааа ну да, религия, все дела...
1
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 22:02
asics человек сказал,что не разбирается в строках,а вы ему STL библиотеку предлагаете
1
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
17.03.2011, 22:05
Цитата Сообщение от lavan Посмотреть сообщение
asics человек сказал,что не разбирается в строках,а вы ему STL библиотеку предлагаете
Не вижу здесь ничего противозаконного, пусть учиться, ведь за этим он сюда пришол..

Добавлено через 1 минуту
Да и суть алгоритма не в использованию STL, а просто чтобы уменшить размеры кода.
1
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 22:08
Согласен,но если у него задание по строкам,то до STL еще далековато
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 22:56  [ТС]
всё!!!я переделала!!теперь работает!)))

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
#include <vcl.h>
#pragma hdrstop
#include<conio.h>
#include<iostream.h>
#include<string.h>
//---------------------------------------------------------------------------
 
#pragma argsused
void analize();
int c=1;
int main() {
        analize();
        analize();
        cin.get();
        return 0;
}
void analize() {
        string str;
         cout<<"Vvedistroky "<<c<<":";
    int kontrol=0;
        getline(cin,str);
        for(int i=0;i<str.size();i++)
         {
                if(str[i]=='(')
                kontrol++;
                else if(str[i]==')')
              kontrol--;
 
                 if(kontrol<0)
                 { cout<<endl<<"net balansa" ;
                          return;}    
 
    }
 
        if(kontrol==0)
        cout<<"est balans";
        else
        cout<<"net balansa";
        cout<<endl;
        c++;
Добавлено через 3 минуты
только теперь маленькая проблема...мне нельзя использовать
C++
1
cin.get();getline(cin,str);
и using namespace std;....вместо них gets(), <stdio> , <string>
я прочитала...вроде сделала как в книге написано....а он взял - да и перестал работать!!может кто-нибудь глянет,пожалуйста!много времени не займет..)

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
#include <vcl.h>
#pragma hdrstop
#include<conio.h>
#include<iostream.h>
#include<string.h>
#include<stdio>
//---------------------------------------------------------------------------
 
#pragma argsused
 
using namespace std;
const size=80;
int c=1;
void analize();
 
 
int main()
 {
int kol ;
cout<<" Vvedite kol-vo strok: " ;
cin>>kol ;
for (int w=0 ; w<kol ; w++ )
   analize();
 
  return 0;
}
 
 
void analize()
 {
        char str[size];
         cout<<"Vvedite stroky "<<c<<":";
    int kontrol=0;
        gets(str);
        for(int i=0;i<size;i++)
         {
                if(str[i]=='(')
                kontrol++;
                else
                 if(str[i]==')')
              kontrol--;
 
                 if(kontrol<0)
                 { cout<<"net balansa"<<endl ;
                    c++;
               return;}
 
 
 
        }
        if(kontrol==0)
        cout<<"est balans";
        else
        cout<<"net balansa";
            c++;
}
Добавлено через 12 минут
AAA,всё!!!я разобралась...ошибка не из-за смены функций...он психует из-за цикла!если его убрать и написать например 4 раза analize() в main - то считает все верно...а с этим циклом не верно..почему?...не могу понять(

C++
1
2
3
4
5
6
7
8
9
10
int main()
 {
int kol ;
cout<<" Vvedite kol-vo strok: " ;
cin>>kol ;
for (int w=0 ; w<kol ; w++ )
   analize();
 
  return 0;
}
Добавлено через 1 минуту
просто хочется использовать функцию столько раз сколько хочет пользователь.....не пойму...и чего в цикле эта функция не так работает!!!

Добавлено через 2 минуты
без цикла все хорошо....странно..разницы ведь никакой!
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 23:03
не правильные условия цикла.если введется 1 то ваш цикл не выполнится ни разу,а должен
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 23:10  [ТС]
lavan, спасибо...только как это исправить?ноль идей...((...помогите пожалуйста.

Добавлено через 1 минуту
C++
1
w<=kol
тогда выполниться для 1 раза

Добавлено через 30 секунд
а 2 ошибку...я не знаю..помогите пожалуйста!

Добавлено через 3 минуты
он почему -то на самую первую строку ,без ее ввода ,пишет нет баланса!!!
а без цикла нормально...
но от цикла тут ничего не зависит.просто n-раз применяем функцию и все.что не так?((
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 23:10
самое простое
C++
1
2
cin>>kol;
kol--;
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 23:12  [ТС]
lavan, это как?извините,не очень понятно и куда это писать?
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 23:15
учитываем возможность пустого ввода
C++
1
2
3
//был ввод теперь проверяем
int size=string.size();
if(size==0)cout<<"сторка пуста";
0
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 23:16  [ТС]
ВСЁ!!Я ИСПРАВИЛА !!вот так...
C++
1
2
3
4
5
6
7
8
9
10
int main()
 {
int k ;
cout<<" Vvedite kol-vo strok: " ;
cin>>k ;
for ( ; k>0 ;k-- )
   analize();
 
  return 0;
}
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 23:16
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
 {
int kol ;
cout<<" Vvedite kol-vo strok: " ;
cin>>kol ;
kol--;
for (int w=0 ; w<kol ; w++ )
   analize();
 
  return 0;
}
0
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 23:17  [ТС]
так работает...вроде)
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 23:18
а теперь в ваш "иправленный код " введите 1
0
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 23:23  [ТС]
аа...нее...не работает...

Добавлено через 42 секунды
да оно вообще не работает!!!во всех строках ни смотря ни на что пишет -нет баланса!

Добавлено через 1 минуту
пробейте в билдере...он сразу пишет на первую строку без ее ввода - нет баланса..и потом на остальные тоже!

Добавлено через 1 минуту
lavan, вы в своем коде ничего не сделали ..только чтобы джля 1 строки...но как он у вас вообще работает!если для одной строки он сразу выдает(БЕЗ ЕЕ ВВОДА!!!) -нет баланса!
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 23:36
вместо того чтобы нервничать,нужну не много подумать я вам все сделал.нужно это просто скомпонавать
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;
void analize();
static int c=1;
int main() {
        analize();
        analize();
        cin.get();
        return 0;
}
void analize() {
        string str;
        int bz;
         cout<<"Vvedi stroky "<<c<<":";
         short otkr=0,zakr=0;
        getline(cin,str);
        if(!str.size()) {
            cout<<"stroka pysta\n";
            return;
        }
        for(int i=0;i<str.size();i++) {
        if(str[i]=='(')
        otkr++;
        else if(str[i]==')')
        zakr++;
        if(zakr>otkr) {
        bz++;
        break;
        }
                }
 
                if(otkr==zakr &&bz==0)
                cout<<"est balans";
                else if(bz>0)
                 cout<<"net balansa";
                else if(otkr!=zakr)
                cout<<"net balansa";
                else if(otkr==0 && zakr==0)
                cout<<"skobok net";
                cout<<endl;
 
        c++;
}
просто забейте это в компилятор
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 23:39  [ТС]
lavan, спасибо большое!но у мення это и так работает.)
вот видите у вас в main только 2 раза функция вызывается,а я хочу чтобы ее можно было вызвать столько сколько душе захочется.ну и вот-тогда все и не работает(
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
17.03.2011, 23:49
C++
1
2
3
4
5
6
7
short r;
cout<<"Vvedi kol strok:";
cin>>r;
r--;
cin.get();//poimali '\n'
for(int i=0;i<r;i++)
    analize();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2011, 23:49

Перегрузка круглых скобок как ravalue
Не могу понять, как перегрузить () для того чтобы можно было использовать a(1, 2)=2; вместо a=3; ошибся, наверное не rvalue, а...

Баланс скобок
Помогите пожалуйста!!! Собственно задание: Текст в файле содержит многократно вложенные круглые скобки. Если баланс скобок соблюден,...

Баланс скобок
проверить правильность расстановки скобок, используя контейнерные типы(стек)

Баланс скобок
Люди может укажите мне на ошибку в программе по которой не находит баланс..? #include&lt;iostream.h&gt; #include&lt;string.h&gt; ...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru