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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Подключение обработчика JavaScript к браузеру на основе IE http://www.cyberforum.ru/cpp-beginners/thread308906.html
Собственно, сделал браузер "под себя" на базе IE (основной функционал), но столкнулся с проблемой: не работают джава скрипты. Как можно подключить стандартный обработчик? Заранее благодарю.
C++ Expression Syntax Error на Turbo C 3.0 Доброго времени суток, форумчане! Пишу только потому, что уже 3 часа ломаю голову над этой ошибкой. Спросил всех одногрупников, никто ничего дельного не подсказал. Соседям по комнате уже надоело слушать мои трёхэтажноматовые восклицания в адрес всех, хоть как-то имеющих отношение к Си, людей, предметов, программ и т.п. К сути, мне нужно сделать лаб.работу на TC компиль у нас в универе... http://www.cyberforum.ru/cpp-beginners/thread308903.html
Программка готова,как записать результат в файл.. C++
/* Задание 6.3 Есть четыре функции: 1.заполняет массив A10 случайными числами; 2.распечатывает массив A10; 3.находит максимальное значение; 4.распечатывает максимальное значение. Функциям ничего не передаётся, и они ничего не возвращают. */
Сортировка символов в строке, виртуальные функции C++
Всем привет! Помогите пожалуйста, нужно написать лабу на С++: базовый класс "строки" с виртуальной функцией сортировки строки с выводом результата. Производный класс "Большие буквы" с вирт. функцией сортировки по возрастанию, и произв. класс "Маленькие буквы" с вирт. функцией сортировки по убыванию. Нужно использовать полиморфизм. Так, как я пробовал, не получается, файл компилируется но на этапе...
C++ Почему все обнуляется??? http://www.cyberforum.ru/cpp-beginners/thread308864.html
#include <iostream.h> #include <iomanip.h> // прототипы функций void input ( float , char); void raschet ( float , float , float*,float*, int); void output ( float , char, float, float, int); void main() {
C++ не понятно(извиняюсь если не туда!) прога на си на IBM PC Добавлено через 15 секунд Необходимо реализовать на языке Си на IBM PC один из ал- горитмов управления памятью путем разработки следующих функций по выделению и освобождению памяти: void *Malloc(unsigned int) - выделения блока памяти, заданной длины; void *Calloc(unsigned int, unsigned int) - выделения блока памяти, достаточного для размещения заданного ... подробнее

Показать сообщение отдельно
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
31.05.2011, 14:27     Обратная польская запись
Задание: надо посчитать значения выражения ОПЗ
в первоим листинге, у меня все работает, но там он работает без приоритетов, и в этом определенная проблема
во втором, я расставляю приоритеты и добавляю скобки, и тут начинается проблема, с закрывающейся скобкой, точнее с удалением скобок () и выражения внутри с заменой на число, ведь по приоритету скобки выполняются первыми
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
#include "stdafx.h"
#include <stdio.h>
#include "locale.h"
#include <string.h>
#include "iostream"
#include "conio.h"
using namespace std;
int main(void)
{
    setlocale (LC_ALL, "Russian");
       int stack[100];// выходная строка
        int m = 0;//cчетчики
        char q[100];// массив введеных данных
        int res;
            
        printf("Введите выражение: ");
        gets(q);
        for (int i = 0; i < strlen(q); i++)
        {
                if (q[i] >= '0' && q[i] <= '9')
                {
 
                        stack[m] = q[i] - '0';
                        m++;
                }
                switch (q[i])
                {
                        case '+':
                        {
                                res = stack[m - 2] + stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        } 
                        case '-':
                        {
                                res = stack[m - 2] - stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        }
                        case '*':
                        {
                                res = stack[m - 2] * stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        }
                        case '/':
                        {
                                res = stack[m - 2] / stack[m - 1];
                                stack[m-2]=res;
                                m--;
 
 
                }
        }
        printf("Ответ: %d", res);
        getchar();
        return 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
#include "stdafx.h"
#include <stdio.h>
#include "locale.h"
#include <string.h>
#include "iostream"
#include "conio.h"
using namespace std;
int m=0;
const int N=10;
int S[N];
int STACK_EMPTY(int S[N])       //функция проверяет пуст ли стек
{
if (m==0) return true;
else return false;
}; 
 
int pop(int S[N])                  // извлечение из стека 
{
if (STACK_EMPTY(S))    printf("error underflow \n");
else m=m-1;
    return S[m];
};
 
int main(void)
{
    setlocale (LC_ALL, "Russian");
       int stack[100];// выходная строка
        int m = 0, f=0, t=0;//cчетчики
        char q[100];// массив введеных данных
        
        int res, u;
        int p[35]; // приоритет знака 1-наим, 2-меньший, 3-нивысш
    
        printf("Введите выражение: ");
        gets(q);
        for (int i = 0; i < strlen(q); i++)
        {
                if (q[i] >= '0' && q[i] <= '9')
                {
 
                        stack[m] = q[i] - '0';
                        m++;
                }
                else 
                    if(q[i]=='+'||q[i]=='-')
                    {
                        p[f]=2;
                        f++;
                    }
                    else
                        if(q[i]=='*'||q[i]=='/')
                            {
                                p[f]=3;
                                f++;
                            }   
                        else
                            if(q[i]=='(')
                            {
                                p[f]=1;
                                f++;
                            }
                        else
                            if(q[i]==')')
                            {
                                p[f]=4;
                                f++;
                            }
 
                            
        if(p[t]<p[t+1])
        {
                switch (q[i])
                {
                        case '+':
                        {
                                res = stack[m - 2] + stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        } 
                        case '-':
                        {
                                res = stack[m - 2] - stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        }
                        case '*':
                        {
                                res = stack[m - 2] * stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        }
                        case '/':
                        {
                                res = stack[m - 2] / stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        }
                        case '(':
                        {
                                stack[m] = q[i];
                                u=m; // начало скобки
                                break;
                        }
                        case ')':
                        {
                            int y=m-u;// длина скобок
                            //stack.splice(u,y);// начиная с индекса u удалить y элементов
                            for(int j=0; j<y; j++)
                            {
                                int a=pop(stack);
                            }
                            stack[m]=res;
                            
                        }   
 
                }
        }
        }
        printf("Ответ: %d", res);
        getchar();
        return 0;
}
Добавлено через 10 часов 9 минут
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
#include "stdafx.h"
#include <stdio.h>
#include "locale.h"
#include <string.h>
#include "iostream"
#include "conio.h"
using namespace std;
int m=0;
const int N=10;
int S[N];
 
int main(void)
{
    setlocale (LC_ALL, "Russian");
       int stack[100], s[50];// выходная строка
        int m = 0, f=0, t=0;//cчетчики
        char q[100];// массив введеных данных   
        int res, u;
        int p[35]; // приоритет знака 1-наим, 2-меньший, 3-нивысш
    
        printf("Введите выражение: ");
        gets(q);
        for (int i = 0; i < strlen(q); i++)
        {
                if (q[i] >= '0' && q[i] <= '9')
                {
                        stack[m] = q[i] - '0';
                        m++;
                }
                else 
                    if(q[i]=='+'||q[i]=='-')
                    {
                        p[f]=2; s[f]=q[i]; f++;
                        
                    }
                    else
                        if(q[i]=='*'||q[i]=='/')
                            {
                                p[f]=3;
                                s[f]=q[i]; f++;
                            }   
                        else
                            if(q[i]=='(')
                            {
                                p[f]=1; s[f]=q[i]; f++;
                                
                            }
                        else
                            if(q[i]==')')
                            {  
                                p[f]=4; s[f]=q[i]; f++;
                                
                            }   
        }
        for(int i=0; i<f; i++)
        {
                switch (s[i])
                {
                    if(p[i]<=p[i+1])
                        {
                        case '+':
                        {
                                res = stack[m - 2] + stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        } 
                        case '-':
                        {
                                res = stack[m - 2] - stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        }
                        case '*':
                        {
                                res = stack[m - 2] * stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        }
                        case '/':
                        {
                                res = stack[m - 2] / stack[m - 1];
                                stack[m-2]=res;
                                m--;
                                break;
                        }
                        case '(':
                        {
                                stack[m] = q[i];
                                u=m; // начало скобки
                                break;
                        }
                        case ')':
                        {
                            int y=m-u;// длина скобок
                            for(int j=y; j>=u; j--)
                            {
                                stack[j]=NULL;
                                m--;
                            }
                            stack[m]=res;       
                        }   
                    t++;
                }
        }
}
 
        
        printf("Ответ: %d", res);
        getchar();
        return 0;
}
Тот трабл я решила, теперь проблема с приоритетом... считает не правильно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru