Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Pascal Определить название месяца, на который приходится указанный день https://www.cyberforum.ru/ pascal/ thread1455872.html
Задан S - номер дня не высокосного года (1< S < 365). Определить название месяца и номер дня такого месяца, на который выпадает заданный день. Задано S – номер дня не високосного року (1 < S...
Pascal Удалить из строки все буквы с четными номерами
Используя строковый тип, удалить все буквы с четными номерами. Помогите пожалуйста.
Рассчитать элементы массива по формуле Pascal
di = е-0,1ci (ai-bi)– формула расчета элементов массива D(8); A(8), B(8), C(8) – выходные массивы; D(8) – искомый массив.
Pascal Найти максимальную сумму чисел по диагонали матрицы Нужно найти максимальную сумму чисел по диагонали (главной или побочной). И вывести ее Пишу код: program Elvis; var i, j, N: integer; F: arrayof array of integer; file_in: text; ... https://www.cyberforum.ru/ pascal/ thread1455696.html
Pascal Определить процентное соотношение количества мужчин в возрасте до 60 лет к общему количеству мужчин учреждения https://www.cyberforum.ru/ pascal/ thread1455472.html
нужно написать прогу вот задание: В автоматизированной инф. системе содержатся анкетные данные сотрудников учреждения. В массиве Y(8) содержаться года рождение сотрудников; В массиве P(8)...
Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками» Pascal
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array of integer; Var i,b,n,j,a: integer; x: mass; start:longint; Function GetTim:longint; var...
Pascal При переводе из String в Real теряется "0"
При переводе из строки в вещественный тип, если в начале строки стоит 0, то он пропадает. Подскажите как его сохранить? Добавлено через 17 минут ошибка была выявлена, извиняюсь за мусор
Pascal Вывести две рандомные матрицы, 3х3 и 3х1 Ребята, нужно написать простенькую программу, которая выводит 2 матрицы с рандомными числами. Первая 3х3, вторая 3х1. Помогите пожалуйста! Пример матриц: Первая 1 2 3 5 6 7 ... https://www.cyberforum.ru/ pascal/ thread1455268.html
Pascal Элементы столбца матрицы с максимальным по модулю элементом в k-ой строке заменить на число X https://www.cyberforum.ru/ pascal/ thread1455119.html
Элементы столбца матрицы с максимальным по модулю элементом в k-ой строке заменить на число X. Помогите пожалуйста.
Pascal Создать файл Y, компоненты которого вычисляются по формуле Добрый вечер! Помогите пожалуйста с задачей. Создать файл Y, компоненты которого вычисляются по формуле: {Y}_{i}=\frac{I^3+2}{I^3+2} I=1,2,…10 Записать файл Z все компоненты и сумму... https://www.cyberforum.ru/ pascal/ thread1455006.html
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5580 / 3317 / 2401
Регистрация: 22.11.2013
Сообщений: 9,328
25.05.2015, 14:04 0

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

25.05.2015, 14:04. Просмотров 395. Ответов 1
Метки (Все метки)

Ответ

Не вдаваясь в суть самого алгоритма, поменял бы в части работы с памятью, имен функций и их прототипов на что-то вроде:
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.


Вернуться к обсуждению:
Реализовать алгоритм I-P
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2015, 14:04
Готовые ответы и решения:

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

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

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

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

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