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

Обратная польская запись на С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Трабл линковки http://www.cyberforum.ru/cpp-beginners/thread1064743.html
Всем привет! Хочу запустить пример, который показывает приветствие. Код: #include <Windows.h> #include <tchar.h> int APIENTRY _tWinMain(HINSTANCE instancem, HINSTANCE, LPTSTR, int) {...
C++ Функция абстрактного базового класса Есть абстрактный класс, пусть его зовут A, а у него есть 4 потомка, пусть их зовут: B, C, D и F. Функция должна возвращать экземпляры потомков. Можно ли декларировать её, как возвращающую экземпляр... http://www.cyberforum.ru/cpp-beginners/thread1064732.html
Сравнение при наследовании C++
Есть базовый класс, пусть его зовут А, а у него есть 4 потомка. Пусть их зовут: B, C, D и E. Базовый класса абстрактный,в нём есть виртуальные операторы == и !=, декларированные, как не имеющие...
C++ Найти все пути шахматного коня между двумя заданными полями, не содержащие повторяющихся полей
Найти все пути шахматного коня между двумя заданными полями, не содержащие повторяющихся полей. ПОМОГИТЕЕЕЕ если кто напишет код прокоментите плиз Добавлено через 6 часов 16 минут ну пжста...
C++ Найти раскраску вершин графа минимальным числом цветов так, что ни одно ребро не соединяло две вершины одного цвета http://www.cyberforum.ru/cpp-beginners/thread1064713.html
Найти раскраску вершин графа минимальным числом цветов так, что ни одно ребро не соединяло две вершины одного цвета. помогите по братски срочно надо)
C++ Найти максимальные элементы столбцов матрицы Помогите, пожалуйста, с таким заданием: определить и инициализировать двумерный массив целочисленных элементов, затем удвоить все положительные четные значения; с помощью оператора new создать... подробнее

Показать сообщение отдельно
barcelona-2013
0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 16

Обратная польская запись на С++ - C++

07.01.2014, 11:53. Просмотров 210. Ответов 0
Метки (Все метки)

Доброго времени суток =)Есть некоторые проблемы при реализации обратной польской записи,
ошибок не выдает, не могу понять в чем дело.

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
133
134
135
136
137
138
139
#include<stdafx.h>
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
 
 
struct st                
{ char c;struct st *next;};
struct st *push(struct st *, char); 
 
char DEL(struct st **);
int PRIOR(char);
 
void main(void)
{
    setlocale(LC_ALL,"Russian" );
 
  struct st *OPERS=NULL;                     
  char a[80], outstring[80];
  int k, point;
  do
  { puts("Введите выpажение(в конце '='):");
    fflush(stdin);
    
    gets(a);                                 
    k=point=0;
    
    while(a[k]!='\0'&&a[k]!='=')           
    {
    
      if(a[k]==')')             
                 
      {                                     
            
        while((OPERS->c)!='(')         
             
        outstring[point++]=DEL(&OPERS);  
           
        DEL(&OPERS);
      }
                   
      if(a[k]>='a'&&a[k]<='z')        
             
          outstring[point++]=a[k];        
                  
      if(a[k]=='(')                         
            
          OPERS=push(OPERS, '(');           
      if(a[k]=='+'||a[k]=='-'||a[k]=='/'||a[k]=='*')
     
      {                             
              
        if(OPERS==NULL)                     
        
            OPERS=push(OPERS, a[k]);        
             /* если не пуст */
        else                                 
 
        if(PRIOR(OPERS->c)<PRIOR(a[k]))      
              
            OPERS=push(OPERS, a[k]);      
            
        else                              
        {
          while((OPERS!=NULL)&&(PRIOR(OPERS->c)>=PRIOR(a[k])))
 
              outstring[point++]=DEL(&OPERS); 
               
          OPERS=push(OPERS, a[k]);           
        } 
      }
     
      k++;                                    
    }
      
    while(OPERS!=NULL)                     
    
        outstring[point++]=DEL(&OPERS);    
         
    outstring[point]='\0';                    
     
    printf("\n%s\n", outstring);            
    fflush(stdin);
    puts("\nПовтоpить(y/n)?");
  } while(getchar()!='n');
}
 
 
struct st *push(struct st *HEAD, char a)
{
  struct st *PTR;
 
  if((PTR==malloc(sizeof(struct st)))==NULL) 
  {
  
    puts("нет памяти");exit(-1);             
  }
 
  PTR->c=a;                                
 
  PTR->next=HEAD;           
  
  return PTR;                               
}
 
 
char DEL(struct st **HEAD)
{
  struct st *PTR;
  char a;
  
  if(*HEAD==NULL) return '\0'; 
 
  PTR=*HEAD;                   
  a=PTR->c;
 
  *HEAD=PTR->next;         
 
  free(PTR);   
          
  return a;                   
}
 
int PRIOR(char a)
{
  switch(a)
  {
    case '*':
    case '/':
         return 3;
 
    case '-':
    case '+':
         return 2;
 
    case '(':
         return 1;
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru