Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 47

Разобраться в комментариях. Польская запись

16.12.2010, 16:45. Показов 2433. Ответов 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
Uses CRT;
{Вычисление значения выражения. 
Сначала скобочное выражение преобразуется в польскую (постфиксную) запись. 
Далее высчитывается само выражение.}
 
Const OperSet:set of char= ['+','-','*','/','(',')','^'];
 
Var Stack : array [1..10] of Char;
    InputString : String;
    OutputString : String;
    I,J,K, TopStack : Word;
    Symb : Char;
    Temp : Char;
    Variable, VarStack : array [1..10] Of Real;
    Result, Op : Real;
 
Function Calc(Op1, Op2 : Real; Op : Char):Real;
Var Result : Real;
Begin
      Case Op Of
           '+':Result := Op1 + Op2;
           '-':Result := Op1 - Op2;
           '*':Result := Op1 * Op2;
           '/':Result := Op1 / Op2;
      End;
      Calc := Result;
End;
 
 
Function ChToInt(C:Char):Integer;
Var Result : Integer;
Begin
     Case C Of
          '-': Result := 1;
          '+': Result := 1;
          '*': Result := 2;
          '/': Result := 2;
     End;
     ChToInt := Result;
End;
 
Function PRCD(Ch1, Ch2 : Char):Boolean;
Var Result : Boolean;
Begin
     If ChToInt(Ch1) >= ChToInt(Ch2) Then Result := True
                                     Else Result := False;
 
     If Ch2='(' Then Result := False;
     If Ch1='(' Then Result := False;
     If (Ch2=')') And (Ch1<>'(') Then Result := True;
     If (Ch2='(') And (Ch1=')') Then Result := False;
 
     PRCD := Result;
End;
 
Procedure Push(Ch : Char);
Begin
     Inc(TopStack);
     Stack[TopStack] := Ch;
End;
 
Function Pop:Char;
Begin
     Pop := Stack[TopStack];
     Stack[TopStack] := ' ';
     Dec(TopStack);
End;
 
Begin
     ClrScr;
     TopStack := 0;
     OutputString := '';
 
     Write('Введите выражение: ');
     ReadLn(InputString);
 
     For I := 1 To 10 Do Stack[I] := ' ';
     For I := 1 To 10 Do Variable[I] := 0;
     For I := 1 To 10 Do VarStack[I] := 0;
 
     For I := 1 To Length(InputString) Do Begin
         Symb := InputString[I];
         If Symb IN OperSet Then Begin
            While (TopStack <> 0) And PRCD(Stack[TopStack],Symb) Do Begin
                  Temp := Pop;
                  OutputString := OutputString + Temp;
            End; { while }
            If (TopStack = 0) Or (Symb<>')') Then Push(Symb)
                                             Else Temp := Pop;
 
         End Else OutputString := OutputString + Symb;
     End; { for }
 
     While TopStack <> 0 Do Begin
           Temp := Pop;
           OutputString := OutputString + Temp;
     End;
 
     WriteLn(InputString);
     WriteLn(OutputString);
 
     K := 0;
     For I := 1 To Length(OutputString) Do Begin
         If Not(OutputString[I] IN OperSet) Then Begin
            Inc(K);
            Write('Input value of ',OutputString[I],' = ');
            ReadLn(Variable[K]);
         End; { if }
     End; { for }
 
     K := 0;
     Result := 0;
     TopStack := 0;
 
     For I := 1 To Length(OutputString) Do Begin
         If OutputString[I] IN OperSet Then Begin
            If TopStack = 1
               Then Result := Calc(0,VarStack[TopStack],OutputString[I])
               Else Begin
                    VarStack[TopStack-1] := Calc(VarStack[TopStack-1],VarStack[TopStack],OutputString[I]);
                    VarStack[TopStack] := 0;
                    Dec(TopStack);
                    Result := VarStack[TopStack];
               End;
         End Else Begin
             Inc(K);
             Inc(TopStack);
             VarStack[TopStack] := Variable[K];
         End; { if }
     End; { for }
 
     WriteLn(Result:2:0);
     ReadLn;
     End.
Добавлено через 14 часов 44 минуты

Неужели никто не может помочь???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2010, 16:45
Ответы с готовыми решениями:

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

Польская запись
Здравствуйте, у меня возникли некоторые проблемы с данной задачей(если сказать точнее, то я ее вообще не понял): Дано выражение...

Обратная польская запись
Помогите написать программу для вычисления обратной польской записи, использовав стек. Например, выражению «1 + 2» соответствует запись «1...

2
Заблокирован
16.12.2010, 17:10
Когда отучишься от `магических чисел`, тогда и приходи.
0
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 47
16.12.2010, 17:36  [ТС]
Цитата Сообщение от Kami-sama Посмотреть сообщение
Когда отучишься от `магических чисел`, тогда и приходи.
О_о магические числа?

В другой раз.

По делу бы ответ, без флуда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2010, 17:36
Помогаю со студенческими работами здесь

Обратная польская запись
Нужна помощь. Есть программа с общей польской записью. Программа принимает только буквенное выражение ( например: &quot;a+b+c*d&quot; и...

Обратная польская запись
Пожалуйста помогите, всю голову себе сломал. Задание: &quot;Обеспечить перевод инфиксного выражения в ОПЗ и вычислить его результат. Входные...

Обратная польская запись
Вычислить выражение состоящее из цифр, скобок,знаков операций (+, -, *,/) записанное в виде: обратной польской записи.

Обратная польская запись
Нужно реализовать обратную польскую запись с помощью стека (стек должен быть задан массивом)

Обратная польская запись
Доброго времени суток. Нужно сделать программу которая переводит арифм. выражение в обратную польскую запись и считает его по ней. ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru