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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2008, 17:29   #1
SEREG@
Пользователь
 
Регистрация: 14.12.2007
Сообщений: 30
Восклицание Задача со скобками в Паскале

Уважаемые программисты,помогите решить задачу со скобками в Паскале.Учитель сказал,что задача зачетная,т.е. если решу поставит зачет,если нет... Вот условие задачи:составить задачу,которая при вводе операции со скобками должна определить правильная ли операция или нет,в конце операции должна быть точка.
Например:
(1+2+3). -правильная операция
(1+2+3(. -не правильная.
Или например:
)1+2(+1)+2(. -операция не верная,хотя количество скобок одинаковое.
Я пробовал через количество скобок посчитать,но как видите это не верно.Мои одногрупники как то решали через счетчик,но учитель сказал,что можно решить просще.Пожалуйста помогите,завтра уже надо задачу сдать

Последний раз редактировалось SEREG@; 10.06.2008 в 17:31.
SEREG@ вне форума Ответить с цитированием
Старый 10.06.2008, 19:47   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Если задача только в том, чтобы проверить корректность скобок, то вот:
Код:
program skobki;

var s: string;
     i: integer;
     otkr, zakr: integer;
     correct: boolean;

begin
...
//в s считываешь исходную строку
otkr := 0;
zakr := 0;
correct := true;
for i := 1 to length(s) do
  begin
  if s[i] = '(' then
    inc(otkr)
  else
    if s[i] = ')' then
      begin
      inc(zakr);
      if zakr > otkr then
        begin
        correct := false;
        break;
        end;
      end;
  end;
if correct then
  if zakr <> otkr then
    correct := false;

if correct then writeln('OK')
else writeln('Error');
end.
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 10.06.2008, 23:19   #3
SEREG@
Пользователь
 
Регистрация: 14.12.2007
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение
Если задача только в том, чтобы проверить корректность скобок, то вот:
Код:
program skobki;

var s: string;
     i: integer;
     otkr, zakr: integer;
     correct: boolean;

begin
...
//в s считываешь исходную строку
otkr := 0;
zakr := 0;
correct := true;
for i := 1 to length(s) do
  begin
  if s[i] = '(' then
    inc(otkr)
  else
    if s[i] = ')' then
      begin
      inc(zakr);
      if zakr > otkr then
        begin
        correct := false;
        break;
        end;
      end;
  end;
if correct then
  if zakr <> otkr then
    correct := false;

if correct then writeln('OK')
else writeln('Error');
end.
Спасибо большое за помощь,но может мне кто нить обьяснить,что делает операция break и вот эта вот фраза "begin inc(zakr);" inc это что?Можно как нить задачу упростить,чтоб не было этих операций или заменить их?

Последний раз редактировалось SEREG@; 10.06.2008 в 23:21.
SEREG@ вне форума Ответить с цитированием
Старый 11.06.2008, 00:02   #4
Artificial
Пользователь
 
Аватар для Artificial
 
Регистрация: 03.11.2007
Сообщений: 91
По умолчанию

Inc - увеличивает zakr на единицу, break прерывает работу.
Artificial вне форума Ответить с цитированием
Старый 11.06.2008, 00:03   #5
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

break - это принудительный выход из цикла, его можно выкинуть. inc(i) - это то же самое, что i := i + 1, только реализованное с помощью процессорных функций
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 11.06.2008, 00:15   #6
SEREG@
Пользователь
 
Регистрация: 14.12.2007
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение
break - это принудительный выход из цикла, его можно выкинуть. inc(i) - это то же самое, что i := i + 1, только реализованное с помощью процессорных функций
Большое спасибо,очень признателен.
SEREG@ вне форума Ответить с цитированием
Старый 11.06.2008, 00:34   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Мои одногрупники как то решали через счетчик,но учитель сказал,что можно решить просще
Тот вариант что предложил Greblin тоже со счетчиком, даже с двумя.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 11.06.2008, 15:01   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Препод наверняка хочет через динамическую память и стек, классика, нас так же грузили, тока я уже не помню как делал. Гугли 'проверка парности скобок стек'
пыщь
JTG вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача в паскале __k1ll3r__ Помощь студентам 3 27.12.2007 05:41
Работа со скобками alikon1 Общие вопросы Delphi 7 15.11.2007 15:14