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

Не могу разобраться, в чём ошибка. Программа перевода инфиксной записи в постфиксную. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Объясните dynamic_cast http://www.cyberforum.ru/cpp-beginners/thread1015014.html
дали задание разобраться с dynamic_cast, что это такое и с чем его едят. Прочитал информацию про него, но в программе он не работает(или работает, я не пойму). В общем, помогите новичку #include "stdafx.h" #include <iostream> #include "clocale" #include <string>
C++ Перевод в двоичную систему счисления Пожалуйста, помогите с задачкой. Даны два числа a, b их нужно сперва перевести в двоичную систему счисления (сами они из десятичной), а потом сложить. Можете объяснить как программа должна работать? Вообще не понимаю... Это с остатком нужно что ли что-то делать? Делить на два? http://www.cyberforum.ru/cpp-beginners/thread1015012.html
Дано натуральное число n. Вычислить C++
#include "stdafx.h" #include <stdio.h> #include <math.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL,"Rus"); int n; int i=1; float k, S=0;
Найти все пары дружественных натуральных чисел из интервала от N 1 до N 2. C++
Очень нужна помощь!) Помогите пожалуйста) в С++, visual studio учусь на первом курсе мех-мата: Найти все пары дружественных натуральных чисел из интервала от N 1 до N 2. Два числа называются дружественными, если каждое из них равно сумме делителей другого (само число в качестве делителя не рассматривается).
C++ Разложение функций в ряды http://www.cyberforum.ru/cpp-beginners/thread1014991.html
Используя разложение функций в ряды, посчитайте их значения cos x=\sum_{k=0}^{\propto}(-1)k\frac{x2k}{(2k)!} --- Буду очень благодарен даже за мельчайшую помощь!
C++ C++ и QuickBMS Доброго времени суток, уважаемые форумчане. По просьбе друга выкладываю следующий вопрос. Может кто поможет? Существует скрипт на QuickBMS, нужно "перевести" его на С++. Я так понимаю это скрипт распаковки каких-то архивов. Вот собственно сам скрипт. Помогите кто сможет, пожалуйста. idstring "BFPK" get VERSION long get TABLESIZE long math TABLESIZE += 16 savepos TABLEOFFSET подробнее

Показать сообщение отдельно
kondusov
2 / 2 / 0
Регистрация: 01.06.2013
Сообщений: 153
21.11.2013, 23:51     Не могу разобраться, в чём ошибка. Программа перевода инфиксной записи в постфиксную.
вот код программы, которая должна переводить инфиксную запись в постфиксную. для бональныъ 1+2-4.... и тд работает. когда начинаю вводить бональные 1*2, то компилятор кладёт в выходную строку "1", затем он должен положить в стек знак "*", но как только он кладёт -сразу извлекает, а должен извлечь только после прочтения конечного символа входной строки ( в данном случае)


[
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
#include <iostream>
#include <string>
 using namespace std;
struct stek
{
    char d;
    struct stek *next; // указатель на следующий элемент списка (стека)
};
 
 
void push(stek* &next, char d)
{
    stek *pv = new stek;      // объявляем новую динамическую переменную типа stek
    pv->d = d;                // записываем  значение, которое помещается в стек
    pv->next = next;          // связываем новый элемент стека с предыдущим
    next = pv;   
    cout<<"dobavil v stek  "<<d<<endl;
    // новый элемент стека становится его вершиной
}
 
char pop(stek* &next)
{  if (next==NULL)
return '\0';
 
    char temp = next->d;     // извлекаем в переменную temp значение в вершине стека
   stek *pv = next;        // запоминаем указатель на вершину стека, чтобы затем
                            // освободить выделенную под него память
   next = next->next;      // вершиной становится предшествующий top элемент
    delete pv;              // освобождаем память, тем самым удалили вершину
    cout<<"izvlek iz steka"<<temp<<endl;
    return temp;          // возвращаем значение, которое было в вершине
}
 
char CurHead(stek* & next){
    if (next==NULL)
        return 'z';
    return next->d;
 
 
}
 
int prioritet(char s){
    if (s=='+' || s=='-')
        return 1;
    if (s=='*' || s=='/')
        return 2;}
 
 
int kol;
    char c;
 
int main()
{cout<<"loh"<<endl;
    string s, otvet,zapas;
    stek*p=0;
    
 
getline(cin, s);
 
cout<<"\n vashe virazhenie v obi4noy zapisi :"<<s<<"\n";
 
for(int i=0;s[i]!='\0';i++)
    {
        if (s[i]>'0'  &&  s[i]<'9')  {           //Если эелемент = цифра от 1 до 10
            otvet+=s[i];
            cout<<"dovavil v vihod   "<<s[i]<<endl;
        }
        
        
                                    //записываем в строку ответа
            if (s[i]=='+' || s[i]=='-' || s[i]=='*' || s[i]=='/')                      //если эл. знак операции
            {       
                if (pop(p)=='\0'){ push(p, s[i]);   kol++;}                 /* если стек пуст, то добавляем в стек операцию */
            
                if (pop(p)!='\0' && (prioritet(s[i]) > prioritet(CurHead(p)) ))
                    {push(p,s[i]);
                    kol++;}
                if(pop(p)!='\0' && (prioritet(s[i]) < prioritet(CurHead(p))))
                {   otvet+=pop(p);
                    push(p,s[i]);
                                }
 
        }
                
            
            if (s[i]=='(')                                      //встретилась открывющаяся 
                {
                push(p,s[i]);                                       //кладем её в стек 
                kol++;                                              //счётчик увеличиваем
                }                                                   //если встретилась закрывающая скобка
                    
                    if(s[i]==')')
                    {
                    
                    for (int i=0;i<kol;i++)
                {   otvet+=pop(p);                      //переносим элементы стека в выходную строку до тех пор
                    kol--;
                }
                    
                
                    }
                    
}
 
 
                    /*while(pop(p)!='(')
                    {otvet+=pop(p);
                    kol--;}*/
 
 
 
                
for (int i=0;i<kol;i++){
    
    otvet+=pop(p);
 
    }
 
 
                                                                                //пока стек непуст, выталкиваем элементы в выход
                                        
 
 
 
 
 
cout<<"POSTFIKS ---       "<<otvet<<endl;
cout<<" TUT DOLZNA LEZHAT' OTKR SKOBKA       "<<zapas;
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru