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

Стек: Калькулятор ОБЗ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать функцию создания массива n на m. Вывести на экран N строку из файла http://www.cyberforum.ru/cpp-beginners/thread894646.html
1.1 Один из аргументов функции имеет вид: char *x Написать функцию создания массива n на m 1.2 С помощью командной строки >printstr filename n Вывести на экран n-ую строку файла filename
C++ С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp http://www.cyberforum.ru/cpp-beginners/thread894641.html
C++ Написати программу, которая позволяет вычислить по указанной сумме и курса евро, доллара и российского рубля сумму в гривнах.
Написати программу, которая позволяет вычислить по указанной сумме и курса евро, доллара и российского рубля сумму в гривнах. Примечание! С использованием констант. Добавлено через 8 минут Помогите с решением, задали д\з а как делать не обьяснили) сижу теперь мучаюсь (второй день ток програмирование изучаю)...
Написать функцию чтения н строк текста из файла C++
Помогите пожалуйста с заданием, если можно, то дать небольшие комментарии. Спасибо заранее Написать функцию чтения н строк текста из файла, сохранив их с помощью массива указателей на строки
C++ Найти количество наборов, содержащих число 2 http://www.cyberforum.ru/cpp-beginners/thread894635.html
Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Найти количество наборов, содержащих число 2. Если таких наборов нет, то вывести 0. Помоите исправить. #include <iostream> //библиотека подключает функции ввода-вывода #include <math.h> //библиотека подключает математические функции using namespace std; //Компилятор использует пространство имён std int...
C++ Определить минимум среди сумм модулей элементов диагоналей Дана целочисленная квадратная матрица:задается с экрана либо генерируется в пределах от -20 до 20. Определить минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы. Добавлено через 6 часов 7 минут последняя задача, помогите пжл.. подробнее

Показать сообщение отдельно
VirchKS
0 / 0 / 0
Регистрация: 05.06.2013
Сообщений: 6
07.06.2013, 17:54     Стек: Калькулятор ОБЗ
Написать программу, получающую строку с некоторым выражением, записанным обратной бесскобочной записью и находящую его значение. Использование стека обязательно.
Пример: 1 2 + ! 4 2 / 2 ^ - = 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
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
#include <iostream>
#include <cstdlib>
#include <stack>
#include <cmath>
double const pi=3.141592653589;
double const e=2.718281828459;
std::stack<double>Stk;
int     F1(std::string mSt,int n);
void    F2(std::string mSt,std::string pkSl[],int n,int kSl);
double  F3(std::string pkSl[],int n,int kSl);
double  F4(std::string pkSl);
double  F5(char c);
double  F6(std::stack<double>Stk);//  +
double  F7(std::stack<double>Stk);//  -
double  F8(std::stack<double>Stk);//  *
double  F9(std::stack<double>Stk);//  /
double F10(std::stack<double>Stk);//  !
int    F11(int a,int i);
double F12(std::stack<double>Stk);//  ^
double F13(std::stack<double>Stk);//  yroot
int main()
{
    std::string mSt;
    std::cout<<"..:";
    getline(std::cin,mSt);
    int n=mSt.size(),kSl=F1(mSt,n);
    std::string *pkSl=new std::string[kSl];
    F2(mSt,pkSl,n,kSl);
    system("cls");
    std::cout<<mSt<<" = "<<F3(pkSl,n,kSl);
    delete[] pkSl;
    return 0;
}
int F1(std::string mSt,int n)
{
    int kSl=1;
    for(int i=0;i<n;i++)
        if(mSt[i]==' ') kSl++;
    return kSl;
}
void F2(std::string mSt,std::string pkSl[],int n,int kSl)
{
    int j=-1,k=0;
    for(int i=0;i<n;i++)
    {
        if(mSt[i]==' ')
        {
            std::string pS(mSt,j+1,i-j-1);
            pkSl[k]=pS;
            k++;
            j=i;
        }
        else if(i+1==n)
        {
            std::string pS(mSt,j+1,i-j);
            pkSl[k]=pS;
            k++;
            j=i;
}   }   }
double F3(std::string pkSl[],int n,int kSl)
{
    for(int i=0;i<kSl;i++)
             if(pkSl[i]=="+") {int q=F6(Stk);Stk.pop();Stk.pop();Stk.push(q);}
        else if(pkSl[i]=="-") {int q=F7(Stk);Stk.pop();Stk.pop();Stk.push(q);}
        else if(pkSl[i]=="*") {int q=F8(Stk);Stk.pop();Stk.pop();Stk.push(q);}
        else if(pkSl[i]=="/") {int q=F9(Stk);Stk.pop();Stk.pop();Stk.push(q);}
        else if(pkSl[i]=="!") {int q=F10(Stk);Stk.pop();Stk.push(q);}
        else if(pkSl[i]=="^") {int q=F12(Stk);Stk.pop();Stk.pop();Stk.push(q);}
        else if(pkSl[i]=="yroot") {int q=F13(Stk);Stk.pop();Stk.pop();Stk.push(q);}
        else if(pkSl[i]=="pi") Stk.push(pi);
        else if(pkSl[i]=="e") Stk.push(e);
        else Stk.push(F4(pkSl[i]));
    return Stk.top();
    Stk.pop();
}
double F4(std::string pkSl)
{
    int n=pkSl.size();
    double bd=0.0,bi=0,k=1.0;
    bool b=false;
    for(int i=0;i<n;i++)
    {
        if((pkSl[0]=='-')and(pkSl!="-")) {k=-1.0;i++;}
        if((pkSl[i]==',')or(pkSl[i]=='.'))
        {
            b=true;
            i++;
        }
        if(b==false)
            bi=10*bi+F5(pkSl[i]);
        else
            bd=bd+F5(pkSl[i])/10;
    }
    return (bi+bd)*k;
}
double F5(char c)
{
         if(c=='9')return 9;
    else if(c=='8')return 8;
    else if(c=='7')return 7;
    else if(c=='6')return 6;
    else if(c=='5')return 5;
    else if(c=='4')return 4;
    else if(c=='3')return 3;
    else if(c=='2')return 2;
    else if(c=='1')return 1;
    else if(c=='0')return 0;
}
double F6(std::stack<double>Stk)
{
    double a=Stk.top();
    Stk.pop();
    double b=Stk.top();
    Stk.pop();
    return b+a;
}
double F7(std::stack<double>Stk)
{
    double a=Stk.top();
    Stk.pop();
    double b=Stk.top();
    Stk.pop();
    return b-a;
}
double F8(std::stack<double>Stk)
{
    double a=Stk.top();
    Stk.pop();
    double b=Stk.top();
    Stk.pop();
    return b*a;
}
double F9(std::stack<double>Stk)
{
    double a=Stk.top();
    Stk.pop();
    double b=Stk.top();
    Stk.pop();
    return b/a;
}
double F10(std::stack<double>Stk)
{
    double a=Stk.top();
    Stk.pop();
    return F11(round(a),1);
}
int F11(int a,int i)
{
    while(a!=0)
    {
        i=i*a;
        a--;
    }
    return i;
}
double F12(std::stack<double>Stk)
{
    double a=Stk.top();
    Stk.pop();
    double b=Stk.top();
    Stk.pop();
    return pow(b,a);
}
double F13(std::stack<double>Stk)
{
    double a=Stk.top();
    Stk.pop();
    double b=Stk.top();
    Stk.pop();
    return pow(b,1/a);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru