Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 21:07   #1
TRANE82
Пользователь
 
Регистрация: 11.12.2012
Сообщений: 10
По умолчанию Консольное приложение

Проверить, имеется ли в заданном пpедложении баланс открывающих и закрывающих
скобок ( ).
TRANE82 вне форума Ответить с цитированием
Старый 13.12.2012, 21:22   #2
NinjaNoob
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 40
По умолчанию

Если я правильно понимаю, нужно просто посчитать количество левых и правых скобок в строке, а потом сравнить их количество
NinjaNoob вне форума Ответить с цитированием
Старый 13.12.2012, 21:40   #3
TRANE82
Пользователь
 
Регистрация: 11.12.2012
Сообщений: 10
По умолчанию

Ну не совсем) Не знаю как обьяснить, поэтому покажу на примере))

вапывапыв(ывапывап)выапывап((ЫВапвыап)ывапывап)выапывап(

Вот например в предложении выше есть баланс таких скобок, тоесть они открываются и закрываются)

sdfasdF)asdfasdf(asdfasdf(asdf

А тут нету))
TRANE82 вне форума Ответить с цитированием
Старый 13.12.2012, 21:53   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Язык неплохо бы было указывать
Паскаль:
Код:
function brackets_balance(s: string): boolean;
var
  count, i: integer;
begin
  count := 0;
  brackets_balance := false;
  for i := 1 to length(s) do
    if s[i] = '(' then
      inc(count)
    else if s[i] = ')' then
      if count = 0 then
        exit
      else
        dec(count);
  if count = 0 then
    brackets_balance := true;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 13.12.2012, 23:56   #5
TRANE82
Пользователь
 
Регистрация: 11.12.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Язык неплохо бы было указывать
Паскаль:
Код:
function brackets_balance(s: string): boolean;
var
  count, i: integer;
begin
  count := 0;
  brackets_balance := false;
  for i := 1 to length(s) do
    if s[i] = '(' then
      inc(count)
    else if s[i] = ')' then
      if count = 0 then
        exit
      else
        dec(count);
  if count = 0 then
    brackets_balance := true;
end;

Ход ваших мыслей я понял, но программа работает немного не так)
Я ее переделал в нужном направлении:

Код:
function brackets_balance(s: string): boolean;
var
  i,j,k,l: integer;
begin
  brackets_balance := false;
  for i := 1 to length(s) do
    if s[i] = '(' then
      for j:=i to length(s) do
        if s[j]=')' then brackets_balance := True
        else
  for k :=1 to length(s) do
    if s[k] = ')' then
      for l:=i to length(s) do
        if s[l]='(' then brackets_balance := True
        else brackets_balance := false;
end;
Спасибо за предложенный вариант, он мне помог)))

Последний раз редактировалось TRANE82; 14.12.2012 в 00:02.
TRANE82 вне форума Ответить с цитированием
Старый 14.12.2012, 00:22   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

TRANE82, Вы взяли корректный и правильный вариант и превратили его в нечто неудобоваримое!

я в шоке.

Какие строки Вы считаете имеют баланс скобок?
Код:
var ss : string;
begin
 ss := '((((( ) ((((';
 WriteLn(ss,' ',brackets_balance(ss) );
 ss := 'вы(ып)ап((Ывыап)ывапывап)вы (((апывап((((';
 WriteLn(ss,' ',brackets_balance(ss) );
 ss := ' a ( b ) ';
 WriteLn(ss,' ', brackets_balance(ss) );
 Readln;
end.
после вашей модификации кода получаем результаты
'вы(ып)ап((Ывыап)ывапывап)вы (((апывап((((' - правильный баланс ?!
'((((( ) ((((' - правильный баланс ?!?!?!?
' a ( b ) ' - неправильный баланс
' ( a (( b) ) ) ' - неправильный баланс
' ( a ( b) ) ' - неправильный баланс

где логика?!

Последний раз редактировалось Serge_Bliznykov; 14.12.2012 в 00:24.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.12.2012, 00:22   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пожалуйста, хотя я не понял, что значит для Вас баланс скобок
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 14.12.2012, 01:42   #8
TRANE82
Пользователь
 
Регистрация: 11.12.2012
Сообщений: 10
По умолчанию

Вы меня не поняли)
Вот оканчательный код:

Код:
program Ex_1;

var
  Str:string;

function brackets_balance(s: string): boolean;
var
  i,j,k,l: integer;
begin
  brackets_balance := false;
  for i := 1 to length(s) do
    if s[i] = '(' then
      for j:=i to length(s) do
        if s[j]=')' then brackets_balance := True
        else
  for k :=1 to length(s) do
    if s[k] = ')' then
      for l:=i to length(s) do
        if s[l]='(' then brackets_balance := True
        else brackets_balance := false;
end;

begin
Writeln('Vvedite stroky: ');
Readln(Str);

if  brackets_balance(Str)=True then write('Zdes est balans skobok ( i ).')
                               else write('Zdes net balansa skobok ( i ).');

Readln;
end.
TRANE82 вне форума Ответить с цитированием
Старый 14.12.2012, 03:15   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Мы отлично понимаем, как использовать функцию. Если Вас все устраивает, то замечательно, но мы АБСОЛЮТНО не видим логики в Вашей функции. Вы можете объяснить, что Вы называете балансом скобок?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 14.12.2012, 09:26   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

BDA, +1

TRANE82,
введите в вашу программу строчку:
a ( b )
и она скажет, что в этой строке: 'Zdes net balansa skobok '
вопрос - почему?!

введите в вашу программу строчку:
((((( ) ((((
и она скажет, что в этой строке: ''Zdes est balans skobok '
вопрос - почему?!!



p.s. Если нужно, чтобы значение булевой функции/переменной было True,
не нужно писать if brackets_balance(Str)=True then
достаточно просто указать if brackets_balance(Str) then
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консольное приложение Lag Общие вопросы C/C++ 3 05.05.2010 08:02
Консольное приложение shock-in Общие вопросы Delphi 2 19.12.2009 22:03
Консольное приложение __Demon__ Общие вопросы C/C++ 8 23.10.2009 10:08
Консольное приложение eks-s Общие вопросы Delphi 17 25.01.2008 03:12
Консольное приложение MAcK Общие вопросы Delphi 2 03.12.2006 18:28