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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Дан массив A размера N http://www.cyberforum.ru/cpp-beginners/thread570444.html
Дан массив A размера N. Вывести вначале его элементы с четными номерами (в порядке возрастания номеров), а затем — элементы с нечетными номерами (также в порядке возрастания номеров): {A}_{2}, {A}_{4}, {A}_{6}, …, {A}_{1}, {A}_{3}, {A}_{5}, … .
C++ время работы сортировки Здравствуйте, не могу найти функцию, которая подсчитывала бы время работы сортировки. Очень нужна, помогите,пожалуйста, кто знает) http://www.cyberforum.ru/cpp-beginners/thread570443.html
C++ В упорядоченном по убыванию массиве перенести в хвост первый четный элемент, стоявший за элементом со значением Р
В упорядоченном по убыванию массиве перенести в хвост первый четный элемент, стоявший за элементом со значением Р
Принадлежит ли точка многоугольнику C++
Нужен такой вот алгоритм (а ещё лучше функция :) ).Поиск по форуму не увенчался успехом (темы есть , но кода нет). Вершины многоугольника не пересекаются. Помогите пожалуйста.
C++ Матрицы http://www.cyberforum.ru/cpp-beginners/thread570402.html
Из заданной матрицы A размером N*M получить матрицу В размером M*(N+M-1) по определенному на рисунке правилу. Недостающие элементы заменить нулями.
Visual C++ Генерация разноцветных эллипсов, которые двигаются по экрану (MFC) помогите мне кто силен с данной библиотекой MFC написать программу которая генерирует на экране разноцветные эллипсы, которые двигаются по экрану. при столкновении с краями эллипс разрушается подробнее

Показать сообщение отдельно
alex932109
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 11
31.05.2012, 19:11  [ТС]     Вычислить значение выражения с учетом приоритетов операций
Есть код, который считает пример в постфиксной системе.
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.
 
Текущее время: 14:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru