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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2016, 13:02   #1
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию Динамические структуры. Стеки.

Вычислить значение арифметического выражения, хранящегося в постфиксной записи. В выражение входят:
a) целые числа;
б) знаки плюс (+), минус (–).
E1337 вне форума Ответить с цитированием
Старый 08.03.2016, 13:59   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

выражения типа такие?
1+2-3+100500
если да, то для решения не нужны ни дин. структуры, ни стек.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.03.2016, 14:06   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
выражения типа такие?
1+2-3+100500
это ИНфиксная запись, ИМХО.
Вадим Мошев вне форума Ответить с цитированием
Старый 08.03.2016, 14:13   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
это ИНфиксная запись
да. я ошибся.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.03.2016, 15:25   #5
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию

<up>
E1337 вне форума Ответить с цитированием
Старый 09.03.2016, 06:02   #6
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 38
По умолчанию

Код:
program Stack;

{$mode fpc}
uses Crt;
type
  tSt = ^Node;
  Node = record
    Numb : integer;
    Next : tSt;
  end;
  procedure AddSt(var St:tSt;const Numb_:integer);
  var temp : tSt;
  begin
    New(temp);
    temp^.Numb:=Numb_;
    temp^.Next:=St;
    St:=temp;
  end;

  procedure Pop(var St:tSt;var numb_ : integer);
  var p : tSt;
  begin
    if St=nil then exit;
    Numb_:=St^.Numb;
    p := St;
    St:=St^.Next;
    dispose(p);
  end;

var
  st_nm, st_sg : tSt;
  a,b,err,i : integer;
  s : string;
begin
  st_nm := nil;
  write('Числа в выражении через пробел s='); readln(s);

  err:=0;
  while err=0 do begin
    Val(Copy(s,1,pos(' ',s)-1),a,err);
    if err<>0 then break;
    delete(s,1,pos(' ',s));
    AddSt(St_nm,a);
  end;

  st_sg := nil;
  for i := length(s) downto 1 do if s[i]='+' then AddSt(st_sg,1)
  else if s[i]='-' then AddSt(st_sg,0);

  while st_sg<>nil do begin
     Pop(st_nm,a);
     Pop(st_nm,b);
     Pop(st_sg,i);
     if i=1 then a := a + b
     else a := b - a;
     AddSt(St_nm,a);
  end;
  Pop(st_nm,a);
  writeln('Результат ',a);
  readln;
end.
CMY_3 вне форума Ответить с цитированием
Старый 13.03.2016, 13:25   #7
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию

Цитата:
Сообщение от CMY_3 Посмотреть сообщение
Код:
program Stack;

{$mode fpc}
uses Crt;
type
  tSt = ^Node;
  Node = record
    Numb : integer;
    Next : tSt;
  end;
  procedure AddSt(var St:tSt;const Numb_:integer);
  var temp : tSt;
  begin
    New(temp);
    temp^.Numb:=Numb_;
    temp^.Next:=St;
    St:=temp;
  end;

  procedure Pop(var St:tSt;var numb_ : integer);
  var p : tSt;
  begin
    if St=nil then exit;
    Numb_:=St^.Numb;
    p := St;
    St:=St^.Next;
    dispose(p);
  end;

var
  st_nm, st_sg : tSt;
  a,b,err,i : integer;
  s : string;
begin
  st_nm := nil;
  write('Числа в выражении через пробел s='); readln(s);

  err:=0;
  while err=0 do begin
    Val(Copy(s,1,pos(' ',s)-1),a,err);
    if err<>0 then break;
    delete(s,1,pos(' ',s));
    AddSt(St_nm,a);
  end;

  st_sg := nil;
  for i := length(s) downto 1 do if s[i]='+' then AddSt(st_sg,1)
  else if s[i]='-' then AddSt(st_sg,0);

  while st_sg<>nil do begin
     Pop(st_nm,a);
     Pop(st_nm,b);
     Pop(st_sg,i);
     if i=1 then a := a + b
     else a := b - a;
     AddSt(St_nm,a);
  end;
  Pop(st_nm,a);
  writeln('Результат ',a);
  readln;
end.
Работает?
E1337 вне форума Ответить с цитированием
Старый 13.03.2016, 14:20   #8
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 38
По умолчанию

Код:
Работает?
Проверь.
CMY_3 вне форума Ответить с цитированием
Старый 13.03.2016, 14:32   #9
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию

Цитата:
Сообщение от CMY_3 Посмотреть сообщение
Код:
Работает?
Проверь.
Что-то не то, или я что-то ввожу не так.
E1337 вне форума Ответить с цитированием
Старый 13.03.2016, 14:41   #10
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 38
По умолчанию

https://ru.wikipedia.org/wiki/%D0%9E...B8%D1%81%D1%8C
и учти код только для + -
CMY_3 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры. стеки в Си Julia220 Помощь студентам 0 24.11.2013 03:43
динамические структуры данных, стеки, очереди, списки. rinoolik Паскаль, Turbo Pascal, PascalABC.NET 1 24.12.2012 17:42
Динамические структуры. Стеки Juicy_Stilet Общие вопросы C/C++ 1 21.11.2012 17:40
Динамические структуры данных. Стеки. Очереди. Двоичные деревья. Paulo Помощь студентам 0 30.04.2009 06:12