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

Подсчет значения арифметического выражения методом рекурсивного спуска! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как задать обратное условие в if http://www.cyberforum.ru/cpp-beginners/thread736817.html
как задать в такой строке обратное условие? if ( p = strstr(buf, "//") )
C++ Напечатать все слова, которые отличаются от последнего, но предварительно надо уничтожить из них все последующие вхождения первой буквы Дано рядок символів,який складається з окремих слів,відокремлених пробілом. Після останнього слова стоїть крапка. Надрукувати всі слова,які відрізняються від останнього, але попередньо треба знищити з них всі подальші входження першої букви. http://www.cyberforum.ru/cpp-beginners/thread736803.html
C++ Введите с клавиатуры строку символов, после чего выведите ее на экран вертикально (по одной букве в каждой строке).
ДОБРОГО ВРЕМЕНИ СУТОК ВАМ))) помогите пожалуйста,если не трудно с выполнением задания.:umnik: Введите с клавиатуры строку символов, после чего выведите ее на экран вертикально (по одной букве в каждой строке). ЗАРАНЕЕ СПАСИБО)
Имеются два текстовые файла с одинаковым числом строк. Выяснить совпадает ли их строки. C++
Имеются два текстовые файла с одинаковым числом строк. Выяснить совпадает ли их строки. Если нет, то получить номер первой строке в которой єти файлы отличаются друг от друга. Зарание спасибо всем кто решит помочь)) Добавлено через 11 минут и да всё это в с++
C++ есть матрица(см. код), как вывести только верхний ее треугольник? http://www.cyberforum.ru/cpp-beginners/thread736766.html
есть матрица(см. код), как вывести только верхний ее треугольник? Код: #include "stdafx.h" #include <stdio.h> #include <math.h> #include <ctime> #include <stdlib.h> #include <iostream> using namespace std;
C++ Деструктор не обязателен? #include <iostream> using namespace std; class Cat { public: Cat(int); // Конструктор int GetAge(); void SetAge(int); void Meow(); подробнее

Показать сообщение отдельно
Mitchlow
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 5

Подсчет значения арифметического выражения методом рекурсивного спуска! - C++

18.12.2012, 16:56. Просмотров 801. Ответов 0
Метки (Все метки)

Здравствуйте! У меня есть такая программа. Выдает ошибку при работе со скобками. 1)Что не так?
2)Как сюда добавить деление и вычитание?

Помогите, пожайлуста

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
#include <iostream>
#include <iostream>
#include <stdio.h>
using namespace std;
typedef char TLexem;
const char _Num = '1',
           _Plus = '+',  
           _Mul = '*',
           _Open = '(',
           _Close = ')',
           _End = '\n';
bool is_error = 0;
void error(TLexem& curlex, int& vl);
int expr(TLexem& curlex, int& vl);
int item(TLexem& curlex, int& vl);
void nextlexem(TLexem& curlex, int& vl);
int mult(TLexem& curlex, int& vl);
int main()
{
    TLexem curlex;
    int vl;
    int v;
    setlocale(LC_ALL, "Russian");
    nextlexem(curlex, vl);
    if(curlex == _End)
        cout << "Введена пустая строка." << endl;
    else
    {   
        v = expr(curlex, vl);
        if(!is_error)
            cout << "Результат = " << v <<endl;
    }
    system("pause");
    return 0;
}
void nextlexem(TLexem& curlex, int& vl)     
{
    char sim;
    sim = cin.get();
    if(isdigit(sim))
    {
        cin.putback(sim);
        cin >> vl;
        curlex = _Num;
    }
    else
        switch(sim)
        {
            case '+':
                curlex = _Plus;
                break;
            case '*':
                curlex = _Mul;
                break;
            case '(':
                curlex = _Open;
                break;
            case ')':
                curlex = _Close;
                break;
            case ' ':                   
                nextlexem(curlex, vl);
                break;
            case '\n':
                curlex = _End;
            default:
                curlex = sim;//записываю сам символ для послед. обработки ошибок
        }
}
int expr(TLexem& curlex, int& vl)
{
    int a;
    a = item(curlex, vl);
    while(curlex == _Plus)
    {
        nextlexem(curlex, vl);
        a+=item(curlex, vl);
    }
    return a;
}
int item(TLexem& curlex, int& vl)
{
    int a;
    a = mult(curlex, vl);
    while(curlex == _Mul)
    {
        nextlexem(curlex, vl);
        a*=mult(curlex, vl);
    }
    return a;
}
int mult(TLexem& curlex, int& vl)
{
int r = 1;//произвольное значение
switch(curlex)
{
case _Num:
r = vl;
nextlexem(curlex, vl);
break;
case _Open:
            r = expr(curlex, vl);
            if(curlex == _Close)
            {
                nextlexem(curlex, vl);
                break;
            }
default:
error(curlex, vl);
}
if(curlex!= _Plus && curlex!= _Mul && curlex!= _End)
error(curlex, vl);
return r;
}
void error(TLexem& sim, int& vl)
{
    if(sim == _Open || sim == _Close)
        cout << "Ошибка: неверная расстановка скобок." << endl;
    else
        cout << "Ошибка: введён символ '" << sim << "' не являющийся частью выражения, или значение которого в данной позиции не определено." << endl;
    is_error = 1;
    while(sim!= _End)
        nextlexem(sim, vl);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru