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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2008, 00:39   #1
010
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 15
По умолчанию Проверить равенство числа открывающих и закрывающих круглых скобок

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

Какой цикл здесь взять?
010 вне форума Ответить с цитированием
Старый 02.05.2008, 00:52   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
...
begin
  ...
  for i:=1 to length(stroka) do
    if copy(stroka,i,1)='(' then inc(a) else inc(b);
  if a>b then for i:=1 to a-b do stroka:=stroka+')'
    else for i:=1 to b-a do stroka:=stroka+'('
  ...
end.
eoln вне форума Ответить с цитированием
Старый 02.05.2008, 10:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

eoln, принцип верный, но есть пара недочёток/ошибок...
1) if copy(stroka,i,1)='(' then inc(a) else inc(b);
это не будет считать закрывающие скобки, если в строке, помимо скобок есть ещё и другие символы...
а в условии о содержании строки ничего не сказано.

2) мне кажется, что открывающие скобки '(' будут немного странно смотреться В КОНЦЕ строки... :-D
тогда хотя бы так:
Код:
  else for i:=1 to b-a do stroka:='(' + stroka;
и лично я бы сделал подсчёт в одной переменной, как то так:
Код:
...
Pair := 0;
for i:=1 to length(stroka) do
    if copy(stroka,i,1)='(' then inc(Pair)
       else if copy(stroka,i,1)=')' then dec(Pair);
for i:=1 to abs(Pair) do
 if Pair>0 then stroka:=stroka+')'
              else stroka:='(' +stroka;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.05.2008, 16:16   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

if stroka[i]='(' then inc(pair) else
if stroka[i]=')' then dec(pair);

или

case stroka[i] of
'(': inc(pair);
')': Dec(pair);
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 17.05.2008, 23:56   #5
010
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 15
По умолчанию

Спасибо кто помогал. Кто-нибудь сможет написать готовую прогу, очень надо, а то я не догоняю
010 вне форума Ответить с цитированием
Старый 18.05.2008, 00:00   #6
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Проверить баланс не проблема... Достаточно сосчитать колво открывающих и закрывающих скобок.
Но поставить недостающую...... хм.. если только тупо добавить в начало или в конец.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 18.05.2008, 00:27   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Вот пример "правильно" добавлят скобки, хотя тоже тупо ставит открывающую перед закрывающей.
Код:
var
  s, s0: string;
  i, k, n: integer;
begin
  write('Stroka = '); readln(s);
  k := 1;
  n := 0;
  repeat
    s0 := copy(s, k, 1);
    if s0 = '(' then inc(n) else
    if s0 = ')' then dec(n);
    if n<0 then begin
      insert('(', s, k);
      inc(n);
      inc(k)
    end;
    inc(k)
  until k>length(s);
  if n>0 then for i := 1 to n do s := s + ')';
  write('New stroka = ', s);
  readln
end.
eoln вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить тип переменной satana Общие вопросы Delphi 10 20.11.2010 21:43
Как проверить строку? nikleb PHP 6 07.07.2008 22:04
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49
Проверить подключено ли устройство к usb Иллидан Win Api 7 19.01.2008 23:26