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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Giggs131
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 19
#1

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

16.09.2010, 19:31. Просмотров 1324. Ответов 6
Метки нет (Все метки)

Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..(


Написать функцию вычисления значения по заданной строке символов, являющихся записью этого числа в десятичной системе счисления. Предусмотреть случай выхода за границы диапазона определяемого типом int. Используйте механизм исключений.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2010, 19:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка исключительных ситуаций. (C++):

Обработка исключительных ситуаций - C++
Доброго времени суток уважаемы программисты и начинающие программисты :) Скажите, почему появляется ошибка на 6й строке? Задача стоит...

Обработка исключительных ситуаций - C++
Код программы,Что та не робит помогите #include "stdafx.h" #include <iostream> #include<conio.h> using namespace std; int...

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

Обработка исключительных ситуаций - C++
Правильно ли тут я обрабатываю исключения? #pragma once #include <iostream> #include "stdio.h" #include "stdlib.h" #include...

Обработка исключительных ситуаций - C++
Помогите сделать обработку исключительных ситуаций вот мой код: #include <iterator> #include "conio.h" #include <iostream> ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
16.09.2010, 20:44 #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
//////////////////////////////////////////////////////////////////////////////////////
//  Написать функцию вычисления значения по заданной строке символов, 
//  являющихся записью этого числа в десятичной системе счисления. 
//  Предусмотреть случай выхода за границы диапазона определяемого типом int. 
//  Используйте механизм исключений.
//////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>
 
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
class bad_int : public std::out_of_range
{
public:     
    bad_int() : std::out_of_range("Ну какое же это целое число!")
    {}
};
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_str  num_str;
    int    n;
    for(;;)
    {
        std::cout << std::endl
                  << std::endl
                  << "Введите целое число: ";
        std::cin >> num_str;
        std::istringstream sin(num_str);    
        
        try
        {        
            if(!(sin >> n))
            {
                throw bad_int();
            }
            std::cout << n
                      << std::endl; 
        }
        catch(bad_int& e)
        {
            std::cout << e.what()
                      << std::endl;
        }      
    }  
}
1
niXman
Эксперт C++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.09.2010, 01:13 #3
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
расширяется очень просто.
доработки приветствуются.
1
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
17.09.2010, 17:17 #4
Цитата Сообщение от Giggs131 Посмотреть сообщение
по заданной строке символов, являющихся записью этого числа в десятичной системе счисления.
Цитата Сообщение от niXman Посмотреть сообщение
Mr.X, что-то я не вижу функцию вычисляющую значение. или я не правильно понял задачу?
Похоже что так.
0
niXman
Эксперт C++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.09.2010, 17:19 #5
Цитата Сообщение от Mr.X Посмотреть сообщение
Похоже что так.
"так" это как? надо вычислять, или нет?
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
17.09.2010, 17:26 #6
Цитата Сообщение от niXman Посмотреть сообщение
"так" это как? надо вычислять, или нет?
Я в том смысле, что это не калькулятор, как вы это вначале восприняли.
0
niXman
Эксперт C++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.09.2010, 17:33 #7
Цитата Сообщение от Mr.X Посмотреть сообщение
это не калькулятор, как вы это вначале восприняли.
гм... что-то я вижу в описании другое:
Цитата Сообщение от Giggs131 Посмотреть сообщение
вычисления значения
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2010, 17:33
Привет! Вот еще темы с ответами:

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

Обработка исключительных ситуаций - C++
Здравствуйте, друзья. Подскажите, пожалуйста, как можно при помощи try-throw-catch &quot;защититься&quot; от ввода пользователем &quot;не того типа...

Обработка исключительных ситуаций - C++
Мне нужно было создать шаблонный класс и написать обработку исключающих ситуаций. Вот, что я сделал #pragma once #include &lt;iostream&gt;...

Обработки исключительных ситуаций - C++
Объясните, что от меня хотят, а то уже мозг кипит ... 7. Не абстрактный класс В является производным от абстрактного класса А. Определить...


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

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

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