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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2009, 23:05   #1
Karabas
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 15
По умолчанию [Паскаль] Преобразование формулы в дерево

Требуется преобразовать формулу в двоичное дерево,если формула введена неверно вывести сообщение об ошибки.
Код:
procedure GetForm (var tree:PTreeElem);
type sign = set of ['+','-','*'];
var c,c2:char;
 begin
  read(c);
  case c of
      '0'..'9','X':tree^.k:=c;
      '(' : begin
             NewTree(Tree^.l);GetForm(tree^.l);
             read(tree^.k);
             if tree^.k not (in sign) then writeln('+,- or - was missing 
but found ',tree^.k);
             NewTree(Tree^.r);GetForm(tree^.r);
             read(c2);
             if c2<>')' then writeln(') was missing after ',tree^.r^.k,
' but found ', c2)
           end;
     ')' : ;
   else writeln('Unrecognized symbol ',c);
 end;
end;
Но так программа не находит ошибки при неправильном балансе скобок типа (2*(3+X))).Подскажите как сделать,чтобы находила.

Последний раз редактировалось Karabas; 16.04.2009 в 18:02.
Karabas вне форума Ответить с цитированием
Старый 16.04.2009, 20:20   #2
Karabas
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 15
По умолчанию

Неужто я задал настолько сложный вопрос.....
Karabas вне форума Ответить с цитированием
Старый 17.04.2009, 03:14   #3
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

просто все намного сложнее, чем описано в вашей процедуре......
например при "встрече" откр. скобки, программа должна искать первую закр. скобку того же уровня. Только потом делать запись в дерево.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 17.04.2009, 23:47   #4
Karabas
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 15
По умолчанию

А нельзя ли просто содать счётчик,если встретил открывающую скобку,то inc, если закрывающую dec. Ну и если в какой то момент счётчик отрицательный,значит баланс скобок уже неверный.Ну или как-то похоже.
Karabas вне форума Ответить с цитированием
Старый 18.04.2009, 13:44   #5
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

можно. Именно это я и имел ввиду, говоря про скобку того же уровня. Но этого недостаточно. Для начала нужно расставить порядок действий. А потом делать анализ. Либо анализировать по ходу наперёд, с учетом преоритетов.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 18.04.2009, 22:31   #6
Karabas
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 15
По умолчанию

А можете подсказать, как именно надо делать анализ?И я не очень понял порядок действий чего вы имеете ввиду.
Karabas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Преобразование строки andronova Помощь студентам 1 13.04.2009 12:55
Дерево MAcK Общие вопросы Delphi 7 13.06.2008 17:30
Дерево Yoger БД в Delphi 3 25.01.2007 01:24