Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


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

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


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

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

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

Код:
...
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, 09:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

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, 15:16   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,236
По умолчанию

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, 22:56   #5
010
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 15
По умолчанию

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

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

Вот пример "правильно" добавлят скобки, хотя тоже тупо ставит открывающую перед закрывающей.
Код:
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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить тип переменной satana Общие вопросы Delphi 10 20.11.2010 21:43
Как проверить строку? nikleb PHP 6 07.07.2008 21: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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS