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

Рекурсивное вычисление постфиксного выражения без стека(!) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать алгоритм и написать программу вычисления принадлежности точки с заданными координатами (x, y) http://www.cyberforum.ru/cpp/thread1389235.html
Разработать алгоритм и написать программу вычисления принадлежности точки с заданными координатами (x, y) заштрихованной области. x и y нужно вводить самому.
C++ С++ и Ассемблерная вставка/чтение SPD ОЗУ Добрый день форумчане, делаю программу на подобии CPU-Z, необходимо узнать тайминги и прочую информацию из SPD оперативной памяти. Нашел код Asssmbler на просторах интернета, но без понятия как его перенести на C++/C#, как понимаю, на C# вообще не перенести, что обидно так как изначально программа была написана именно на нем, ну да и ладно, перекинуть не так долго. Собственно прошу у вас помощи... http://www.cyberforum.ru/cpp/thread1389011.html
C++ Как сделать Game over в игре
Здравствуйте, разрабатываю змейку через OpenGL на с++ и в принципе игра работает , но хотелось бы как то сделать что бы если змейка выползает за границы игрового поля выскакивала надпись или может картинку вставить GAME OVER и игра завершалась. P.S. В данный момент у меня сделано что бы если змейка выползает за границы , то ее просто разворачивает в обратном направлении и при этом она худеет...
C++ Блокировка мыши по оси y
Здравствуйте! Нужно решить задачу: Вычислять текущую позицию по оси y, и при нажатии ctrl(control)+1 блокировать мышь по этой оси, т.е чтоб y был равен всегда тому значению, которое было при нажатии. Помогите пожалуйста! Заранее благодарен!
C++ Парсер выражений http://www.cyberforum.ru/cpp/thread1386542.html
Здравствуйте, помогите пожалуйста написать простой парсер, для дальнейшей самостоятельной доработки под нужды. Ссылки на гугл и прочее не интересует, перерыл уже. мне нужно консольное приложение, что я мог вбить в консоль следующее например: пишу a = 5 нажал enter появляется a = 5 пишу b = 7 нажал enter появляется b = 7
C++ Топологическая сортировка Есть алгоритм, реализация с помощью обхода в глубину: http://rain.ifmo.ru/cat/view.php/vis/graph-general/topological-sort-2007/algorithm boolean topological_sort(){ boolean Cycle; for(int i = 1;i <= N;i ++){ Cycle = dfs(i); if(Cycle)return false; } for(int i = 1;i <= n;i ++){ Numbers = i; подробнее

Показать сообщение отдельно
ShinaZin
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 13
07.03.2015, 10:32  [ТС]     Рекурсивное вычисление постфиксного выражения без стека(!)
Входная строка - массив символов, например 93+6-, для простоты считаем, что числа состоят из одной цифры, а разделителей (типа пробела) нет, это для варианта выше. Кстати, скобок в постфиксной записи я не припомню. А сам я уже написал вариант программы, который обрабатывает строки примерно такого вида: 27 90 - 110 + 2 ^
Вот он:
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
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <cstring>
 
using namespace std;    
float eval();
char str[255];
int i = 0;
 
int main(int argc, char *argv[]) 
{
    if(argc==1) {
      cout<<"Input postfix string: "; gets(str);
  }
    else strcpy(str,argv[1]);//чтение строки из параметров запуска
    i = strlen(str)-1;//Индекс = последний символ, не '\0'
    cout<<str<<" = "<<eval()<<'\n';//вычисление выражения
    return 0;
}
 
float eval()
{
    float x = 0;
    while (str[i]==' ') i--;
 
    if (str[i] == '+')
    {
        i--;
        x=eval() + eval();
        return x;
    }
 
    if (str[i] == '*')
    {
        i--;
        x=eval() * eval();
        return x;
    }
    
    if (str[i] == '/')
    {
        i--;
        x=eval() / eval();
        return 1.0/x; //обратное значение, из-за обратного порядка вычисления
    }
    
    if (str[i] == '-')
    {
        i--;
        x=eval() - eval();
        return -1*x; //обратное значение
    }
    if (str[i] == '^')
    {
        i--;
        int n,p,j, res=1;
        n=eval();//возводим число p
        p=eval();//в степень n
        for(j=0;j<n;j++)
          res*=p;
        return res;
    }
    int w=1;//"вес" очередной цифры
    while((str[i] >= '0') && (str[i] <= '9')){
        x = x + (str[i--] - '0')*w;
        w*=10;
    }
        
    return x;
}
PS: работает только для целых чисел, хотя исправлять не много там для работы с дробями. Ну и нет "защиты от дураков", кому надо - допилят
 
Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru