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

Обратная Польская Нотация - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В символьной строке удалить все слова, состоящие более чем из N букв http://www.cyberforum.ru/cpp-beginners/thread177265.html
Не использовать дефолтные функции работы со строками (например strstr, strlen) -В символьной строке удалить все слова, состоящие более чем из N букв.
C++ Создать класс "Вещественное число" Создать класс:"Вещественное число" Элементы класса: Поле задает значение вещественного числа; Конструктор для инициализации поля; Метод для вычисления квадратного корня из вещественного числа;... http://www.cyberforum.ru/cpp-beginners/thread177257.html
C++ функцию, которая перемещает элементы с 1 стека во второй
из введенных целых чисел сформулировать два списка типа стек. разработать функцию, которая перемещает все элементы с 1 стека во второй, пока значение в вершине Первого стека не станет четным (в...
Макросы C++
Написать макрос находящий большое из 4 чисел в студии с++
C++ Функции http://www.cyberforum.ru/cpp-beginners/thread177181.html
Помогите пожалуйста решить данный пример с использованием функций. Вот мои наработки но у меня не совсем получилось: #include <iostream> #include <math.h> #include <conio.h> using namespace std;...
C++ Необходимо решить задание Здравствуйте помогите пожалуйста задача такая: Даны два числа A и B (A<B). Вывести в порядке убывания все целые числа, расположенные между A и B (не включая числа A и B) а так же количество этих N... подробнее

Показать сообщение отдельно
turtLe
3 / 3 / 2
Регистрация: 11.11.2009
Сообщений: 41

Обратная Польская Нотация - C++

16.10.2010, 18:56. Просмотров 4295. Ответов 6
Метки (Все метки)

Пытался реализовать ОПН....ничего не вышло,обращаюсь за помощью: в чем ошибка(и)?
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
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
#include <iostream>
using namespace std;
 
struct stack{
    char key;
    stack *next;
}*top=NULL,*p=new stack;
 
void push(char S)
{
    if(p!=NULL)
    {
        p->key=S;
        p->next=top;
        top=p;
    }
    else return;
 
}
 
char pop()
{
    char S;
    stack *p=new stack;
    p=top;
    S=p->key;
    top=p->next;
    delete p;
    return S;
}
 
int main()
{
    char Sinput[21];
    char Soutput[21];
    int k=0,n=0,Q;
    p=NULL;
    cout<<"Enter a mathematical expression: ";
    gets(Sinput);
    cout<<"\n";
    Q=strlen(Sinput);
    while(Q>k)
   {
        if ((Sinput[k]>=0)||(Sinput[k]<=9))
            {
                Soutput[n]=Sinput[k];
                k++;
                n++;
            }
        switch(Sinput[k])
        {
            
            case '(':
            {
                push(Sinput[k]);
                k++;
                break;
            }
            case ')':
            {
                    while(pop()!='(')
                    {
                        Soutput[n]=pop();
                        n++;
                    }
                    pop();break;
            }
             case '+':
             {
                 if((p->key=='-')||(p->key=='+'))
                 {
                     Soutput[n]=pop();
                     n++;
                 }
                 push(Sinput[k]);
                 k++;
                 break;
             }
             case '-':
             {
                 if((p->key=='-')||(p->key=='+'))
                 {
                     Soutput[n]=pop();
                     n++;
                 }
                 push(Sinput[k]);
                 k++;break;
             }
             case '*':
             {
                 if((p->key=='*')||(p->key=='^'))
                 {
                     Soutput[n]=pop();
                     n++;
                 }
                 push(Sinput[k]);
                 k++;break; 
             }
             case '/':
             {
                 if((p->key=='^'))
                 {
                     Soutput[n]=pop();
                     n++;
                 }
                 push(Sinput[k]);
                 k++;break;
             }
             case '^':
             {
                 push(Sinput[k]);
                 k++;
                 break;
             }
        }
        k++;
        n++;
    }
 
    if (Q==k)
        while(p!=NULL)
        {
            Soutput[n]=pop();
            n++;
        }
 
    cout<<"\n";
    for(int i=0;i<=strlen(Soutput);i++)
    cout<<Soutput[i]<<" ";
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru