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

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

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

Показать сообщение отдельно
barcelona-2013
 Аватар для barcelona-2013
0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 16
07.01.2014, 11:53     Обратная польская запись на С++
Доброго времени суток =)Есть некоторые проблемы при реализации обратной польской записи,
ошибок не выдает, не могу понять в чем дело.

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;
  }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru