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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 14:21   #1
alexmakeev1
Новичок
Джуниор
 
Регистрация: 14.03.2013
Сообщений: 1
По умолчанию Алгоритм Бауэра-Замельзона для вычисления скобочно-арифметического выражения.

В новом семестре вообще перестал понимать, что к чему. ( Если в предыдущем были задания намного проще и с ними я худо-бедно справлялся, то сейчас постигла меня тоска и печаль. Поэтому остается надеяться только на вашу помощь. В Стек, @Бауэра-Замельзона.pdf файле описание задания. А вот то, что я смог сделать:
Код:
program Task2;
{$mode objfpc}{$H+}
uses
  Classes, SysUtils, CustApp;
type
  NodePointer = ^TNode;
  TNode = record
    value : double;
    next : NodePointer;
  end;
var
  T: NodePointer; // операторы (знаки)
  E: NodePointer; // операнды (числа)
  str: string;
  i, temp1: integer;
  temp: double;
procedure Push(var head : NodePointer; val : double); // проталкивание
var current: NodePointer;
begin
  New(current);
  current^.value := val;
  current^.next := head;
  head := current;
end;
procedure Pop(var head : NodePointer); // выталкивание
var current: NodePointer;
begin
  current := head;
  head := head^.next;
  dispose(current);
end;
procedure ShowOnConsole(head : NodePointer); // вывод элементов списка
var current: NodePointer;
begin
  current := head;
  writeln('Содержимое списка: ');
  while (current <> NIL) do
  begin
     write(current^.value:0:1, ', ');
     current := current^.next;
  end;
  writeln;
end;
function ReadValue(var head: NodePointer): double; // чтение первого элемента
begin
  if head = NIL then
    result := 7
  else
    result := head^.value;
end;
procedure F1(var value: char); // поместить операцию в стек Т
begin
  case value of
  '(' : Push(T, 1);
  ')' : Push(T, 2);
  '+' : Push(T, 3);
  '-' : Push(T, 4);
  '*' : Push(T, 5);
  '/' : Push(T, 6);
  end;
end;
procedure F3; // исключить символ из стека Т
begin
  Pop(T);
end;
procedure F5; // сообщение об ошибке
begin
  writeln('Ошибка');
end;
procedure F6; // завершить работу
begin
  exit;
end;
begin
  readln(str);
  for i := 1 to length(str) do
  begin
    if str[i] in ['0'..'9'] then
      Push(E, strtoint(str[i]))
    else
    begin
    case str[i] of
    '(': F1(str[i]);
    // не получается сделать вложенный case
    // здесь работают функции, как сделать таблицу перехода, я не знаю
    end;
  end;
  ShowOnConsole(T);
  ShowOnConsole(E);
  readln;
end.
alexmakeev1 вне форума Ответить с цитированием
Старый 15.03.2013, 18:49   #2
Елена Дьяченко
Новичок
Джуниор
 
Регистрация: 15.03.2013
Сообщений: 1
По умолчанию

В таком случае, Александр, будем готовить документы на отчисление, если Вы не приложите необходимые усилия.
Елена Дьяченко вне форума Ответить с цитированием
Старый 07.04.2013, 14:31   #3
Loreena.J
Пользователь
 
Аватар для Loreena.J
 
Регистрация: 08.10.2012
Сообщений: 11
По умолчанию

Бугагашеньки!
Loreena.J вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для вычисления среднего арифметического и геометрического массива чисел Defalliance Общие вопросы C/C++ 1 04.12.2012 21:57
программа для вычисления выражения Александрq Помощь студентам 2 16.11.2012 14:07
Составить функцию для вычисления среднего арифметического в Delphi laventus Помощь студентам 2 15.06.2012 14:53
приложение для вычисления значения арифметического выражения Wera Общие вопросы C/C++ 8 04.12.2010 01:53
Алгоритм арифметического действия для машины Тьюринга Arkuz Помощь студентам 1 25.03.2009 17:04