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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2009, 16:49   #1
BaTeX
Новичок
Джуниор
 
Регистрация: 28.11.2009
Сообщений: 2
По умолчанию преобразование арифметических форм

во входном файле находиться выражение в постфиксной форме, содержащее односимвольные имена (большие латинские буквы) логических операндов , символы операций (малые буквы n-вместо not, a-вместо and и o- вместо or) Требуется написать две процедуры
1) для проверки корректности записи постфиксной формы;
2) для преобразования постфиксной формы в инфиксную.
Насколько я понимаю в первой процедуре надо сделать счетчик для проверки кол-ва операндов и операций, а также проверить кол-во закрывающихся и открывающихся скобок.
А во-второй построить дерево поиска и сделать обход корень-левая-правая, для преобразования в инфиксную форму.
Но так как это мой первый опыт работы с деревьями, то как написать текст я не знаю
Программа нужна на Turbo Pascal

Последний раз редактировалось BaTeX; 28.11.2009 в 17:15.
BaTeX вне форума Ответить с цитированием
Старый 29.11.2009, 11:49   #2
BaTeX
Новичок
Джуниор
 
Регистрация: 28.11.2009
Сообщений: 2
По умолчанию

дерево вроде построил, но преобразовать в инфиксную форму не получается.
обход делаю так:
Код:
procedure obhod(p:ukaz;k:integer);
begin
if p<>nil then write(p^.symbol);
if p^.left<>nil then
obhod(p^.left,k+1);
p^.mark:=k;
if p^.right<>nil then
obhod(p^.right,k+1);
end;
мб ошибка в построении дерева?
Код:
procedure buildtree(var p:ukaz;var stek:ukaz);
var
f:text;
begin
assign(f,'input.txt');
reset(f);
stek:= nil;
while not eoln(f) do
  begin
	new(p);
	read(f,p^.symbol);
	if p^.symbol in ['+','-','*','/']then
	begin
         p^.right:= stek;
         p^.left:= stek^.next;
         p^.next:= stek^.next^.next;
         stek:= p;
   end
   else
   begin
      p^.left:= nil;
      p^.right:= nil;
      p^.next:= stek;
      stek:= p;
     end;
  end;
end;
В дерево записываю "ab+cd/+". После обхода выдает ++ab/cd
BaTeX вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление арифметических выражений.(delphi) КуДрЯ Помощь студентам 3 02.04.2009 02:54
Трансляция арифметических выражений StakanpORTvejna Microsoft Office Excel 2 12.03.2009 05:57
обработка арифметических выражений (assembler) designer Помощь студентам 8 02.12.2008 21:16
Деление без арифметических операций imera Общие вопросы C/C++ 2 14.11.2008 03:02
выполнения арифметических действий над обыкновенными дробями jenja Общие вопросы C/C++ 1 24.10.2008 10:35