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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
#1

Ввод строки , результат число - C++

20.12.2011, 23:49. Просмотров 260. Ответов 2
Метки нет (Все метки)

Вводится строка например "5+5*5/6-7="
нужно посчитать чему она равна с учетом приоритета операторов.
Подскажите пжлст:P
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2011, 23:49     Ввод строки , результат число
Посмотрите здесь:

Проверить, одинаково ли число открывающихся и закрывающихся скобок в данной строке. Определить длину строки, результат вывести на экран. - C++
Помогите решить данные задачи пожалуйста, завтра надо сдавать, заранее спасибо. 1.Проверить, одинаково ли число открывающихся и...

Даны числа от 1 до 1000 и число m. Вывести результат умножение куба нечетных сотен на число m - C++
как записать?

Ввод из файла массива и вывод результат в файл среднее арифметическое - C++
Задание такое вычислить среднее арифметическое элементов массива, массив задан входным файлом. Результат записать в выходной файл. Как...

Вывести одно целое число - результат вычислений.С++ - C++
Одна строка, в которой могут встречаться цифры и символы «+» и «-». Длина строки не превышает 10000 символов, значение всех чисел в ней не...

Найти число, зная результат операции с ним - C++
С Трех значительного числа х отняли его последнюю цифру.Колы результат разделили на 10, а к остальным слева приписали последней цифры числа...

Вывести результат деления квадрата сотен кратных 5 на число m - C++
составить блок-схему алгоритма и программу согласно заданию Даны числа от 1 до 1000 и число m.Вывести результат деления квадрата сотен...

Строки.Анаграммы.(Задача сделана,но не выводит результат...) - C++
Даны 2 слова(строки),проверить есть ли эти слова анаграммами(отличаются только порядком букв) // анаграмма].cpp : Defines the entry point...

Вывести на экран суммарный результат, указав число студентов сдавших и проваливших экзамен - C++
День добрый помогите решить задачу: есть 10 студентов ( 10 раз на екран должно высвечиватся"Введите результат" результат- если...

Ввести число и вывести результат циклического сдвига его битов на 1 разряд влево - C++
Проверьте пожалуйста, правильное ли решение. Ввести число и вывести результат циклического сдвига его битов на 1 разряд влево (все биты...

ввод строки - C++
вводиться строка. как выделить память под ровно то количество символов, которое ввели. как-то можно сначала узнать количество символов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
21.12.2011, 00:29     Ввод строки , результат число #2
Числа только до 9? или 10..11..12 и т.д тоже?
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
21.12.2011, 00:55  [ТС]     Ввод строки , результат число #3
нашел , числа ток до 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
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
// parse.cpp
// программа разбора арифметических выражений
#include <iostream>
using namespace std;
#include <cstring>
 
const int LEN=80;
const int MAX=100;
class Token
{
public:
    virtual char getOperator()=0;
    virtual float getNumber()=0;
};
class Operator:public Token
{
private:
    char oper;
public:
    Operator(char a)
    {
        oper=a;
    }
    char getOperator()
    {
        return oper;
    }
    float getNumber()
    {
        return 0;
    }
};
class Number:public Token
{
private:
    float fnum;
public:
    Number(float a)
    {
        fnum=a;
    }
    char getOperator()
    {
        return 0;
    }
    float getNumber()
    {
        return fnum;
    }
};
class Stack
{
private:
    Token *st[MAX];
    int top;
public:
    Stack()
    {
        top=0;
    }
    void push(char var)
    {
        st[++top]=new Operator(var);
    }
    void push(float var)
    {
        st[++top]=new Number(var);
    }
    Token* pop()
    {
        return st[top--];
    }
    int gettop()
    {
        return top;
    }
};
class express
{
private:
    Stack s;
    char* pStr;
    int len;
public:
    express(char*ptr)
    {
        pStr=ptr;
        len=strlen(pStr);
    }
    void parse()
    {
        float F=0;
        int C=0,U=10;
        char ch;
        Token* lastval;
        Token* lastop;
        for(int j=0;j<len;j++)
        {
            ch=pStr[j];
            if(ch>='0'&&ch<='9'&&C==0)
            {
                F=F*10+(ch-'0');
            }
            if(ch>='0'&&ch<='9'&&C==1)
            {
                F=F+(ch-'0')/U;
                U=U*10;
            }
            if(ch=='.')
                C=1;
            if(ch=='+'||ch=='-'||ch=='*'||ch=='/')
            {
                s.push(F);
                F=0;
                C=0;
                U=10;
                if(s.gettop()==1)
                    s.push(ch);
                else
             {
                    lastval=s.pop();
                    lastop=s.pop();
                    if((ch=='*'||ch=='/')&&(lastop->getOperator()=='+'||lastop->getOperator()=='-'))
                    {
                        s.push(lastop->getOperator());
                        s.push(lastval->getNumber());
                    }
                    else
                    {
                        switch(lastop->getOperator())
                        {
                            case'+': s.push(s.pop()->getNumber() + lastval->getNumber()); break;
                            case'-': s.push(s.pop()->getNumber() - lastval->getNumber()); break;
                            case'*': s.push(s.pop()->getNumber() * lastval->getNumber()); break;
                            case'/': s.push(s.pop()->getNumber() / lastval->getNumber()); break;
                            default: cout<<"Неизвестный оператор\n";
                        }
                    }
                    s.push(ch);
                }
            }
        }
        s.push(F);
    }
    float solve()
    {
        Token* lastval;
        while(s.gettop()>1)
        {
            lastval=s.pop();
            switch(s.pop()->getOperator())
            {
                case'+': s.push(s.pop()->getNumber()+lastval->getNumber()); break;
                case'-': s.push(s.pop()->getNumber()-lastval->getNumber()); break;
                case'*': s.push(s.pop()->getNumber()*lastval->getNumber()); break;
                case'/': s.push(s.pop()->getNumber()/lastval->getNumber()); break;
                default: cout<<"Neizvestniy Operator\n";
            }
        }
        return float(s.pop()->getNumber());
    }
};
int main()
{
    setlocale(LC_ALL,"Rus");
    char ans;
    char str[LEN];
    cout<<"Vvedite arifmetik virazhenie\nVvide 1+3*5-7/2\nbez probelov i skobok\n";
    do
    {
        cout<<"Vvedite virazhenie: ";
        cin>>str;
        express*eptr=new express(str);
        eptr->parse();
        cout<<"Chislennoe znachenie: "<<eptr->solve()<<endl;
        delete eptr;
        cout<<"Eshe raz??(y/n) ";
        cin>>ans;
    }
    while(ans=='y');
    return 0;
}
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru