Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
A1exSun
C#
55 / 55 / 1
Регистрация: 09.03.2013
Сообщений: 214
#1

Решение уравнений - последовательность действий - C++

12.04.2013, 18:25. Просмотров 1199. Ответов 3
Метки нет (Все метки)

Дано 3 числа. Между ними можно ставить знаки математических операций: сложение, вычитание, умножение, деление. Сколько различных значений может образоваться в результате вычисления полученных таким образом выражений?
Пример:
2 + 2 + 8 = 12
2 + 2 - 8 = -4
2 + 2 * 8 = 18
2 + 2 / 8 = 2.25
2 - 2 + 8 = 8
2 - 2 - 8 = -8
2 - 2 * 8 = -14
2 - 2 / 8 = 1.75
2 * 2 + 8 = 12
2 * 2 - 8 = -4
2 * 2 * 8 = 32
2 * 2 / 8 = 0.5
2 / 2 + 8 = 9
2 / 2 - 8 = -7
2 / 2 * 8 = 8
2 / 2 / 8 = 0.125
Различные значения: -14, -8, -7, -4, 0.125, 0.5, 1.75, 2.25, 8, 9, 12, 18, 32. Всего 13 значений.
Входные данные - 3 числа, выходные - количество различных значений.

Для того чтоб не делать решения уравнений "в лоб", придумал такое:
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
float calc(int i, float f, float s)
{
    switch(i)
    {
        case 0: return f + s;
        case 1: return f - s;
        case 2: return f * s;
        case 3: return f / s;
    }
    return 0;
}
 
int main(void)
{
    float a, b, ab, c;
    int i, j;
    cin>>a>>b>>c;
    int res[12];
    for (i = 0; i < 4; i++)
    {
        ab = calc(i, a, b);
        for (j = 0; j < 4; j++)
            cout<<calc(j, ab, c)<<"\n";
    }
}
Но как учесть приоритет действий?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 18:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение уравнений - последовательность действий (C++):

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

Выполнить над прямоугольной матрицей последовательность действий - C++
Доброго времени суток, помогите написать программу, ибо уже отчаялся... Выполнить над прямоугольной матрицей B с размером m x n...

Выяснить, можно ли добавить в последовательность цифры и знаки арифметических действий - C++
1. Дана последовательность из N круглых, квадратных и фигурных скобок. Выяснить, можно ли добавить в неё цифры и знаки арифметических...

Выполнить над квадратной матрицей А порядка n последовательность действий, указанную в задании - C++
Нужна помощь народ ! Мне задали в универе такую батву аш волосы дыбом . В С++ я полный нуль так что если можно прокомментируте прогу ...

Решение уравнений - C++
Я только начал изучать C++. Вот решил сделать маленькую программку: #include &lt;iostream&gt; using namespace std; int main() { ...

Решение уравнений на С++ - C++
Помогите решить уравнение пожалуйста, под номером 16! Задание надо переписывать в сообщение!

3
A1exSun
C#
55 / 55 / 1
Регистрация: 09.03.2013
Сообщений: 214
12.04.2013, 18:38  [ТС] #2
Цитата Сообщение от ValeryS Посмотреть сообщение
delete
2 / 8 = 0.25
2 + 0.25 = 2.25
1
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 756
12.04.2013, 18:41 #3
вчера кому-то на форуме писал разбор обратной польской нотации, не нашёл что-то той темы

в общем вот код
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
#include <iostream>
#include <sstream>
#include <string>
#include <stack>
 
int main()
{
std::stack <int> st;
std::string s="11 23 +45 *32 +",str;
char symb;
int secoper,firoper,value;
std::size_t n_s = 0;
for (int i=0;i<=s.size() ;i++)
{
    symb = s[n_s];
    ++n_s;
    switch (symb)
                {
                case '+':
                        secoper=st.top();
                        st.pop();
                        firoper=st.top();
                        st.pop();
                        value=secoper+firoper;
                        st.push(value);
                        break;
                case '-':
                        secoper=st.top();
                        st.pop();
                        firoper=st.top();
                        st.pop();
                        value=secoper-firoper;
                        st.push(value);
                        break;
                case '/':
                        secoper=st.top();
                        st.pop();
                        firoper=st.top();
                        st.pop();
                        value=secoper/firoper;
                        st.push(value);
                        break;
                case '*':
                        secoper=st.top();
                        st.pop();
                        firoper=st.top();
                        st.pop();
                        value=secoper*firoper;
                        st.push(value);
                        break;
                case ' ': 
                          {
                              int num;
                              std::stringstream(str) >> num;
                              st.push(num);
                              str = "";
                          }
                case 0 : break;
                 default : str += symb;
                }
 
}
    std::cout<<st.top()<<std::endl;
    st.pop();
    system("pause");
    return 0;
}
генерируйте вместо std::string s="11 23 +45 *32 +" нужную вам последовательность действий
и приоритет можно уже алгоритмически придумать как расставить в исходную строку или заранее сделать всевозможные шаблоны

возможно поможет
1
A1exSun
C#
55 / 55 / 1
Регистрация: 09.03.2013
Сообщений: 214
12.04.2013, 18:56  [ТС] #4
Цитата Сообщение от abit Посмотреть сообщение
вчера кому-то на форуме писал разбор обратной польской нотации, не нашёл что-то той темы
Кажется, я видел эту тему
В общем, в моем случае, быстрее сделать "в лоб".
0
12.04.2013, 18:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2013, 18:56
Привет! Вот еще темы с ответами:

Решение уравнений - C++
а) Решить уравнение 0,4+arctg(sqrt(x))-x=0 с точностью E=10^-4. Отрезок содержащий корень . б) Найти все натуральные числа, не...

Решение интегральных уравнений - C++
помогите решить интегральные уравнения на с++

Решение уравнений с матрицами - C++
нужно решить большое уравнение с матрицами M = (y* A-A*B)*(B+x)-A*y*x найти М A и B - квадратные матрицы размерности больше...

Решение квадратных уравнений - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; using namespace std; void roots(float a, float b, float c) { ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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