Форум программистов, компьютерный форум CyberForum.ru

Вычислить значение выражения с учетом приоритетов операций - C++

Восстановить пароль Регистрация
 
alex932109
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 11
10.05.2012, 18:16     Вычислить значение выражения с учетом приоритетов операций #1
Здравствуйте. Помогите решить задачу:

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

Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 18:16     Вычислить значение выражения с учетом приоритетов операций
Посмотрите здесь:

Расставить приоритеты операций и вычислить значение заданного выражения (Помогите с задачей) C++
Вычислить значение выражения с учетом приоритета выполнения C++
Вычислить значение выражения C++
Вычислить значение выражения C++
Вычислить значение выражения C++
Вычислить значение выражения C++
Вычислить значение выражения C++
Вычислить значение выражения dl ± d2 ± ... ± dn C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cayenne52
0 / 0 / 0
Регистрация: 31.03.2011
Сообщений: 7
29.05.2012, 12:48     Вычислить значение выражения с учетом приоритетов операций #2
Никто не знает?
alex932109
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 11
31.05.2012, 19:11  [ТС]     Вычислить значение выражения с учетом приоритетов операций #3
Есть код, который считает пример в постфиксной системе.
C
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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h.>
#include <conio.h>
 
 
int main(void)
{
        float stack[70];
        float res;
        int m = 0;
        char query[100];
 
        printf("Vvedite vyrazhenie: ");
        gets(query);
 
        for (int i = 0; i<strlen(query); i++)
        {
                if (query[i] > '0' && query[i] <= '9')
                {
                        stack[m] = query[i] - '0';
                        m++;
                        continue;
                }
 
                switch (query[i])
                {
                        case '+':
                        {
                                res = stack[m - 2] + stack[m - 1];
                                break;
                        }       
                        case '-':
                        {
                                res = stack[m - 2] - stack[m - 1];
                                break;
                        }
                        case '*':
                        {
                                res = stack[m - 2] * stack[m - 1];
                                break;
                        }
                        case '/':
                        {
                                res = stack[m - 2] / stack[m - 1];
                                break;
                        }
                }
 
                stack[m - 2] = res;
                m--;
        }
 
        printf("Otvet: %f", res);
        getch();
 
}

Как перевести выражение из инфиксной в постфикную, чтобы потом всё посчитать?

Нашёл код на Delphi, но не силён в названиях их функций


Delphi
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
uses crt;
const ds=['0'..'9','+','-','*'];
      cf=['0'..'9'];
      zn=['+','-','*'];
var s,s1,s2:string;
    i,j,k:byte;
    c,p1,p2:integer;
begin
clrscr;
repeat
k:=0;
writeln('Введите арифметическое выражение:');
readln(s);
for i:=1 to length(s)do
 begin
  if not(s[i] in ds)
  or((i>1)and(s[i] in zn)and(s[i-1] in zn)) then k:=1;
 end;
if k=1 then write('Выражение введено неверно, повторите ввод');
until k=0;
if s[1] in ['+','*'] then delete(s,1,1);{оставим первый если минус}
writeln;
i:=1;
while i<=length(s) do
if s[i]='*' then
 begin
  j:=i-1;
  s1:='';
  while (s[j] in cf)and(j>=1) do
   begin
    s1:=s[j]+s1;
    j:=j-1;
   end;
  j:=i+1;
  s2:='';
  while (s[j] in cf)and(j<=length(s)) do
   begin
    s2:=s2+s[j];
    j:=j+1;
   end;
  val(s1,p1,c);
  val(s2,p2,c);
  p1:=p1*p2;
  delete(s,i-length(s1),length(s1)+length(s2)+1);
  str(p1,s1);
  insert(s1,s,i-length(s1)+1);
 end
else i:=i+1;
writeln(s);
readln
end.
Yandex
Объявления
31.05.2012, 19:11     Вычислить значение выражения с учетом приоритетов операций
Ответ Создать тему
Опции темы

Текущее время: 15:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru