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

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

Войти
Регистрация
Восстановить пароль
 
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
#1

Передача в функцию знака операции (+,-,*,/) - C++

03.07.2014, 15:57. Просмотров 290. Ответов 9
Метки нет (Все метки)

Хотелось бы написать функцию по работе очень похожа на калькулятор, для удобства расчетов. Но ни как не могу понять как передать операцию + или - или / или * . К примеру вызываю функцию poshitay(100, +, 200, /, 2). Может ли кто сказать возможно ли такое реализовать. Длинна переменных изменчива.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2014, 15:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача в функцию знака операции (+,-,*,/) (C++):

Написать функцию вычисления знака числа - C++
Здравствуйте! Прошу прощения за глупый вопрос, мог бы спросить и у препода, но ждать долго, а сдать хочу досрочно) Задание прикрепил ниже. ...

Передача массива в функцию используя указатель на функцию - C++
У меня имеется готовая программа без передачи функции в функцию указателем, мне нужно передать функцию ввода масива в функцию его обработки...

Передача объекта в функцию или функцию друга - C++
Здравствуйте, уважаемые программисты :) К примеру есть такой код. #include <iostream> using namespace std; class My_Class1 { ...

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

Передача операнда внутри переопределенной операции - C++
Здравствуйте. Пытаюсь разобраться с перегрузкой операций для классов, и вот в чем проблема: Есть класс longNumber, в котором...

Передача двухмерного массива из функцию в функцию - C++
Допустим у меня есть функция, в которой "генерируется" массив. Но нужно его передать в другую функцию, которая его выведет на экран. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
03.07.2014, 16:19 #2
Передавайте букву '+'
poshitay(100, '+', 200, '/', 2)
1
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
03.07.2014, 16:21 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define plus 1
#define minus 2
#define delit 3
#define umnozhit 4
int poschitai(int chislo1, int deistvie1, int chislo2, int deistvie2, int chislo3)
{
    if(deistvie1 == 1) int x = chislo1 + chislo2)
    if(deistvie1 == 2) int x = chislo1 - chislo2)
    if(deistvie1 == 3) int x = chislo1 / chislo2)
    if(deistvie1 == 4) int x = chislo1 * chislo2)
    if(deistvie1 == 1) int y = x + chislo3)
    if(deistvie1 == 2) int y = x - chislo3)
    if(deistvie1 == 3) int y = x / chislo3)
    if(deistvie1 == 4) int y = x * chislo3)
    return y;
}
int S = poschitai(1, plus, 2, minus, 3); // S = 0
Вот это совсем по простому. Если делать калькулятор, то накидать на форму кнопок которые будут определенные действия выполнять, например кнопка "+" будет передавать параметр 1, и т.д.
1
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
03.07.2014, 16:23  [ТС] #4
Ребята спасибо большое, очень помогли.
0
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
03.07.2014, 16:28 #5
zasadadada, Точки с запятой забыл расставить..
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
03.07.2014, 16:34 #6
Цитата Сообщение от takhvatulin Посмотреть сообщение
Если делать калькулятор, то накидать на форму кнопок которые будут определенные действия выполнять, например кнопка "+" будет передавать параметр 1, и т.д.
а завтра забудешь что эти волшебные числа означают
тогда уж лучше enum
а еще лучше, развивая мысль zss, передавать в функцию строку, а в функции парсить
типа "1+2"
или как в ЛИСПе "+1 2"
0
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
03.07.2014, 16:52 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
poshitai(char c, int ....)
switch(c)
{
case '+':
break;
case '-':
break;
case '/':
break;
case '*':
break;
}
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
03.07.2014, 16:59 #8
На просторах инета нашел..
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
#include <iostream>
 
int parseT(const char* s, int value = 0, bool op = true);
int parseU(const char* s, int limit, int value = 1,
                     bool op = true);
 
 
bool is_number(const char c)
{
    return c >= '0' && c <= '9';
}
 
 
bool is_valid(const char c)
{
    return is_number(c) || c == '+' || c == '-' || c == '*' || c == '/';
}
 
 
bool my_static_assert(bool b, const char*)
{
    return b ? true : throw std::exception();
}
 
 
int myatoi_private(const char* s, int len, int value = 0)
{
    return *s && len
        ? (my_static_assert(is_number(*s), "Invalid character!"),
        myatoi_private(s + 1, len - 1,
        (*s - '0') + value * 10))
        : value;
}
 
 
int myatoi(const char* s, int len)
{
    return my_static_assert(len, "No side by side operators!"),
        myatoi_private(s, len);
}
 
 
int parseU_private(const char* s, int limit, const char* begin, int len,
    int value, bool mul)
{
    return *s && limit
        ? (*s == '*' || *s == '/'
        ? (mul
        ? parseU(s + 1, limit - 1, value * myatoi(begin, len),
        *s == '*')
        : parseU(s + 1, limit - 1, value / myatoi(begin, len),
        *s == '*'))
        : parseU_private(s + 1, limit - 1, begin, len + 1, value, mul))
        : (mul
        ? value * myatoi(begin, len)
        : value / myatoi(begin, len));
}
 
 
int parseU(const char* s, int limit, int value, bool op)
{
    return parseU_private(s, limit, s, 0, value, op);
}
 
 
int parseT_private(const char* s, const char* begin, int len,
    int value, bool add)
{
    return *s
        ? (*s == '+' || *s == '-'
        ? (add
        ? parseT(s + 1, value + parseU(begin, len),
        *s == '+')
        : parseT(s + 1, value - parseU(begin, len),
        *s == '+'))
        : parseT_private(s + 1, begin, len + 1, value, add))
        : (add
        ? value + parseU(begin, len)
        : value - parseU(begin, len));
}
 
 
int parseT(const char* s, int value, bool op)
{
    return parseT_private(s, s, 0, value, op);
}
 
int main()
{
    const char* e = "2+2*2";
 
    auto res = parseT(e);
 
    std::cout << res << std::endl;
 
    return 0;
}
0
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
03.07.2014, 17:19 #9
ValeryS, Так я для этого и написал дефайны чтобы числа не запоминать. Согласен мой вариант деревенский, но зато просто))
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,417
Записей в блоге: 3
Завершенные тесты: 1
03.07.2014, 17:25 #10
Передавайте туда указатель на функцию или функтор
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 17:25
Привет! Вот еще темы с ответами:

Используя функцию, составить программу, которая считает количество изменений знака в массиве чисел. y=f(x). В С++ - C++
Используя функцию, составить программу, которая считает количество изменений знака в массиве чисел. y=f(x). В С++.

Дан массив строк. Написать функцию, которая после каждого знака пунктуации будет ставить пробел - C++
Например, если после точки в строке нет пробела, то как его вставить туда?

Указатели на функцию, операции .* и ->* - C++
Закомментируйте пожалуйста код в тех местах где пометил , что то запутался. class A { public: void f() { ...

Передача в функцию - C++
вот есть такие строки кода: typedef vector&lt; vector&lt;char&gt; &gt; string_sound; void sound_func(string_sound &amp;text_sound, int sum_words)...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.07.2014, 17:25
Ответ Создать тему
Опции темы

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