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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2012, 02:36   #1
glushara
 
Регистрация: 22.04.2012
Сообщений: 4
По умолчанию Программа проверки правильности расстановки скобок

программа проверяет правильность расстановки скобок.

Код:
var
  s: string;
  i,a: integer;
begin
  ReadLn(s);
  a := 0;
  for i := 1 to Length(s) do
  begin
    if (s[i] = '(') and (a >= 0) then
      Inc(a);
    if s[i] = ')' then
      Dec(a);
  end;
  if a = 0 then
    WriteLn('Yes')
  else
    WriteLn('No');

end.
что значит эта строчка.
не обвиняйте в тупизме только)
Код:
if (s[i] = '(') and (a >= 0) then
а именно что такое а>=0
что она проверяет?

______________
Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
на первый раз я исправил название темы.
В последующем, темы с названием наподобие "Задача на Делфи" будут закрываться или удаляться,
а автор такой темы будет получать штрафные баллы.
Учтите это на будущее.

Модератор.

Последний раз редактировалось Serge_Bliznykov; 23.04.2012 в 02:44.
glushara вне форума Ответить с цитированием
Старый 23.04.2012, 02:48   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

a>=0 проверяет не отрицательность значения переменной а.
Если а равно или больше нуля, то условие выполняется (a>=0 - True)
Скандербег вне форума Ответить с цитированием
Старый 23.04.2012, 02:49   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
if (s[i] = '(') and (a >= 0) then
читается так:
Код:
если i-й символ строки равен открыающей скобке И счётчик скобок больше или равен нулю, тогда увеличить счётчик скобок.
А по сути - наращивание счётчика (открывающих) скобок происходит только в случае положительного значения счётчика. Если встретится закрывающая скобка БЕЗ открывающей. счётчик станет меньше нуля и дальше увеличиваться не будет (условие a>=0 не позволит)

p.s. а я бы не выпендривался и банально прерывал цикл в случае, если a стало меньше нуля. вот так, примерно:
Код:
  a := 0;
  for i := 1 to Length(s) do
  begin
    if s[i] = '(' then
      Inc(a);
    if s[i] = ')' then
      Dec(a);
    if a<0 then Break;
  end;
  if a = 0 then
    WriteLn('Yes')
  else
    WriteLn('No');
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа, которая определяет правильность расстановок скобок (, [, {, ), }, ] sidestep Общие вопросы C/C++ 14 04.04.2012 15:36
Проверка правильности расстановки круглых скобок. torren108 Помощь студентам 7 11.12.2011 20:15
Программа для проверки (правильности кода). Контекст. AmbaQ Софт 4 14.11.2010 16:50
Автосигнализация на базе MC-51, реализация проверки правильности кода Lesha_maestro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.05.2010 17:08
Помогите написать скрипт для проверки правильности ввода числа в строке DiSpalL JavaScript, Ajax 6 19.06.2009 16:48