Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 32
1

Реализовать алгоритм I-P

23.05.2015, 22:57. Просмотров 379. Ответов 1
Метки нет (Все метки)

Доброго времени суток, нужна помощь с заданием:

1. Реализовать алгоритм I-P на языке программирования Pascal. Для работы со стеком
использовать связное распределение памяти и процедуры для:
- Создание пустого стека
- Добавление элемента на вершину стека
- Удаление элемента с вершины стека
2. Доработать алгоритм I-P, обеспечив обработку арифметических выражений,
содержащих скобки. Запрограммировать доработанный алгоритм на языке Паскаль.

Нужно подкорректировать. Буду благодарен за помощь.


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
uses crt;
type
       pnode = ^node;
       node = record
        p : pnode;
        data : char;
       end;
var     top, temp : pnode;
       post, inf : string;
       symb, outdata: char;
       i : integer;
function push (top : pnode; data : char) : pnode;
var
       p : pnode;
begin
       new (p);
       p^.data := data;
       p^.p := top;
       push := p;
end;
function pop (top : pnode; var data : char) : pnode;
begin
       data := top^.data;
       pop := top^.p;
       dispose (top);
end;
function empty (top : pnode) : boolean;
begin
       if top = nil then empty := true
       else empty := false;
end;
function pred (oper1 : char; oper2 : char) : boolean;
begin
       pred := true;
       if (oper1 = '(') or (oper2 = '(') then pred := false;
       if oper2 = '^' then pred := false;
       if ((oper1 = '-') or (oper1 = '+'))
       and ((oper2 = '*') or (oper2 = '/')) then pred := false;
end;
begin
       clrscr;
       write ('Stroka v infiksnoi forme: '); readln (inf);
       inf := inf + ' ';
       post := '';
       top := nil;
       i := 1;
       repeat
               symb := inf[i];
               if (symb >= 'A') and (symb <= 'Z') then begin
                       post := post + symb;
                       inc (i);
               end
               else begin
                       while (empty (top) = false) and
                       (pred (top^.data, symb) = true) do begin
                               top := pop (top, outdata);
                               post := post + outdata;
                       end;
                       if (empty (top) = true) or (symb <> ')')
                       then top := push (top, symb)
                       else top := pop (top, outdata);
                       inc (i);
               end;
       until symb = ' ';
       while empty (top) = false do begin
               top := pop (top, outdata);
               post := post + outdata;
       end;
       writeln ('Stroka v postfiksnoi forme: ', post);
       readln;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2015, 22:57
Ответы с готовыми решениями:

Как реализовать алгоритм конвертирования файлов?
Всем привет. В программировании я новичек, для себя выбрал язык Паскаль чтобы понять именно...

Записать алгоритм вычисления значения, и реализовать его в виде функции
Записать алгоритм вычесления значение У-f(x,a) , и реализовать его в виде функции.x,a-вводит...

Составить алгоритм вычисления значения Y = f (x, a) и реализовать его в виде функции
Для заданного варианта составить алгоритм вычисления значения Y = f (x, a) и реализовать его в виде...

Записать алгоритм вычисления значения, и реализовать его в виде функции
Записать алгоритм вычесления значение У-f(x,a) , и реализовать его в виде функции ...

1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5443 / 3265 / 2390
Регистрация: 22.11.2013
Сообщений: 9,218
25.05.2015, 14:04 2
Не вдаваясь в суть самого алгоритма, поменял бы в части работы с памятью, имен функций и их прототипов на что-то вроде:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
type
  PNode = ^TNode;
  TNode = record
    next: PNode;
    data: char;
  end;
 
procedure push(var top: PNode; data: char);
var p: PNode;
begin
  new(p);
  p^.data:=data;
  p^.next:=top;
  top:=p;
end;
 
function IsEmpty(top: PNode): Boolean;
begin
  IsEmpty:=top=nil;
end;
 
function pop(var top: PNode): Char;
var p: PNode;
begin
  if IsEmpty(top) then RunError(201);
  pop:=top^.data;
  p:=top;
  top:=top^.next;
  Dispose(p);
end;
 
function pred(oper1, oper2: Char): Boolean;
begin
  pred:=not (
    (oper1='(') or (oper2='(') or (oper2='^') or
    (oper1 in ['-','+']) and (oper2 in ['*','/']));
end;
 
var
  top, t: PNode;
  post, inf: String;
  symb, outdata: Char;
  i: integer;
begin
  Write('Строка в инфиксной форме: '); ReadLn(inf);
  inf:=inf+' ';
  post:='';
  top:=nil;
  i:=1;
  repeat
    symb:=inf[i];
    if symb in ['A'..'Z'] then begin
      post:=post+symb;
      Inc(i);
    end else begin
      while not IsEmpty(top) and pred(top^.data,symb) do
        post:=post+pop(top);
      if IsEmpty(top) or (symb<>')') then
        push(top, symb)
      else
        pop(top);
      Inc(i);
    end;
  until symb=' ';
  while not IsEmpty(top) do post:=post+pop(top);
  WriteLn('Строка в постфиксной форме: ',post);
  ReadLn;
end.
Добавлено через 27 минут
С учетом того, что неплохо было бы разделять операнды и знаки операций, можно так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
const
  symbs = ['0'..'9','A'..'Z','a'..'z'];
 
type
  PNode = ^TNode;
  TNode = record
    next: PNode;
    data: char;
  end;
 
procedure push(var top: PNode; data: char);
var p: PNode;
begin
  new(p);
  p^.data:=data;
  p^.next:=top;
  top:=p;
end;
 
function IsEmpty(top: PNode): Boolean;
begin
  IsEmpty:=top=nil;
end;
 
function pop(var top: PNode): Char;
var p: PNode;
begin
  if IsEmpty(top) then RunError(201);
  pop:=top^.data;
  p:=top;
  top:=top^.next;
  Dispose(p);
end;
 
function pred(oper1, oper2: Char): Boolean;
begin
  pred:=not (
    (oper1='(') or (oper2='(') or (oper2='^') or
    (oper1 in ['-','+']) and (oper2 in ['*','/']));
end;
 
var
  top: PNode;
  post, inf: String;
  symb: Char;
  i: integer;
begin
  Write('Строка в инфиксной форме: '); ReadLn(inf);
  inf:=inf+' ';
  post:='';
  top:=nil;
  for i:=1 to Length(inf)-1 do begin
    symb:=inf[i];
    if symb=' ' then Break;
    if symb in symbs then begin
      post:=post+symb;
      if not (inf[i+1] in symbs) then post:=post+' ';
    end else begin
      while not IsEmpty(top) and pred(top^.data,symb) do
        post:=post+pop(top)+' ';
      if IsEmpty(top) or (symb<>')') then
        push(top, symb)
      else
        pop(top);
    end;
  end;
  while not IsEmpty(top) do post:=post+' '+pop(top);
  WriteLn('Строка в постфиксной форме: ',post);
  ReadLn;
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2015, 14:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Придумать и реализовать алгоритм шифрования текста (использовать функции обработки символов и строк)
5)Придумать и реализовать алгоритм шифрования текста (использовать функции обработки символов и...

Построить минимальное дерево-остов графа пошагово аналитически и реализовать данный алгоритм
Построить минимальное дерево-остов графа пошагово аналитически и реализовать данный алгоритм на...

Составить алгоритм и реализовать программу для определения на ЭВМ коэффициентов a0, a1, a2 аппроксимирующей функции
Помогите подредактировать код программы под вариант. У меня задание сделать алгоритм под этот...

Как реализовать алгоритм для вычисления корней уравнения (tg) с помощью метода простой итерации?
Необходимо найти корень уравнения tg(1,5773х) – 2,3041х = 0 с заданной точностью с помощью метода...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.