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

Обработка исключительных ситуаций. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ vector - что не так? http://www.cyberforum.ru/cpp-beginners/thread166452.html
void delSame(vector<int> &first, vector<int> &second) { vector<int>::iterator pf, ps; for(pf=first.begin(); pf!=first.end(); pf++) for(ps=second.begin(); ps!=second.end(); ps++) if(*pf==*ps) {first.erase(pf); second.erase(ps); break;} } функция получает два вектора и если два элемента одинаковые, удаляет их 1--> 2 3 5 5
C++ Наследование.Виртуальные функции. Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Создать класс живущих с местоположением. Определить наследуемые классы - лиса, кролик и трава. Лиса ест кролика. Кролик ест траву. Лиса может умереть - определен возраст. Кролик тоже может умереть. Кроме этого определен класс - отсутствие жизни. Если в окрестности имеется больше травы, чем... http://www.cyberforum.ru/cpp-beginners/thread166451.html
C++ Файловый ввод-вывод.
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Создать класс СПРАВОЧНИК со следующими полями: Название фирмы Владелец Телефон Адрес Род деятельности
Работа с файлами и директории. C++
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Необходимо создать следующий набор программ: Программа для копирования каталогов (копируются все вложенные папки и файлы). Программа для перемещения каталогов (перемещаются все вложенные папки и файлы). Программа для удаления каталогов (удаляются все вложенные папки и файлы). В том...
C++ Бинарное дерево. http://www.cyberforum.ru/cpp-beginners/thread166448.html
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Реализовать базу данных ГАИ по штрафным квитанциям с помощью бинарного дерева. Ключом будет служить номер автомашины, значением узла - список правонарушений. Если квитанция добавляется в первый раз, то в дереве появляется новый узел, а в списке данные по правонарушению; если нет, то данные...
C++ Работа с файлами. Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Создать телефонный справочник для осуществления следующих операций: Добавление абонентов в базу. Удаление абонентов из базы. Модификация данных абонента. Поиск абонентов по телефонному номеру или фамилии. Распечатка в алфавитном порядке абонентов из заданного диапазона номеров или... подробнее

Показать сообщение отдельно
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.09.2010, 01:13     Обработка исключительных ситуаций.
Mr.X, что-то я не вижу функцию вычисляющую значение. или я не правильно понял задачу?

Добавлено через 42 минуты
вот мой вариант
хз, правильно ли я понял задачу, но давно хотел написать гиперкрутой каркулятор
up.
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
#include <iostream>
#include <sstream>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <stdexcept>
#include <functional>
 
/***************************************************************************/
 
typedef std::function<int(int, int)> func_t;
typedef std::pair<char, func_t> pair_t;
 
/***************************************************************************/
 
template<typename To, typename From>
To cast_to(const From& v) {
    To result;
    std::stringstream ss;
    ss << v;
    ss >> result;
    return result;
}
 
/***************************************************************************/
 
struct operation_t {
   enum {add = '+', sub = '-', mul = '*', div = '/'};
   operation_t(int a, int b):v1(a),v2(b) {}
   int v1, v2;
};
 
operation_t separate(const std::string& exp, std::vector<pair_t>::const_iterator i) {
   std::string::const_iterator it = std::find(exp.begin(), exp.end(), i->first);
   return operation_t(
      cast_to<int>(std::string(exp.begin(), it)),
      cast_to<int>(std::string(it+1, exp.end()))
   );
}
 
/***************************************************************************/
 
int calculate(const std::string& exp) {
   static std::vector<pair_t> pairs = {
      {operation_t::add, [](int a, int b) {return a+b;} },
      {operation_t::sub, [](int a, int b) {return a-b;} },
      {operation_t::mul, [](int a, int b) {return a*b;} },
      {operation_t::div, [](int a, int b) {return a/b;} }
   };
   static std::map<char, func_t> map(pairs.begin(), pairs.end());
   /** remove all spaces */
   std::string correctexp;
   std::remove_copy(exp.begin(), exp.end(), std::back_inserter(correctexp), ' ');
   /** find op`s symbol */
   std::vector<pair_t>::const_iterator it = std::find_if(pairs.begin(), pairs.end(),
      [&](const pair_t& p) {
         return std::find(correctexp.begin(), correctexp.end(), p.first) != correctexp.end();
      }
   );
   if ( it == pairs.end() ) { throw std::runtime_error("error in expression: \"" + correctexp + "\""); }
   /** separate expression into pieces */
   operation_t op = separate(correctexp, it);
   /** evaluate */
   return map[it->first](op.v1, op.v2);
}
 
/***************************************************************************/
 
int main() {
   std::cout<< "1+2=" << calculate("1+2") << std::endl
            << "4-2=" << calculate("4-2") << std::endl
            << "2*2=" << calculate("2*2") << std::endl
            << "4/2=" << calculate("4/2") << std::endl;
   
   return 0;
}
 
/***************************************************************************/
потыкать можно тут: http://liveworkspace.org/code/8d2202...e6265b8bc5689a
расширяется очень просто.
доработки приветствуются.
 
Текущее время: 06:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru