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

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

Восстановить пароль Регистрация
 
Dantekiberg
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 8
22.01.2014, 13:12     Обработка исключительных ситуаций! #1
Составьте программу на языке С++. Обрабатывающую исключительную ситуацию, которая может возникнуть в ходе выполнения программы.

Выведите на экран значение функции для некоторого диапазона значений аргумента х. Коэффициенты a, b, c, d и диапазон значений аргумента вводятся с клавиатуры.

При организации ввода/вывода должен использоваться механизм для отлова исключений типа.
Название: Снимок.JPG
Просмотров: 71

Размер: 8.8 Кб

Помогите пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 13:17     Обработка исключительных ситуаций! #2
Числа, надо считывать как строки, проверять, число это или нет, если не число, то возбуждать исключение.
так же можно исключение вызвать при делении на 0
Dantekiberg
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 8
22.01.2014, 13:20  [ТС]     Обработка исключительных ситуаций! #3
Подобрать параметры таким образом, чтобы в определенный момент происходило выполнение функции с некорректным аргументом (например, квардатный корень из -1, деление на 0,переполнение типа и т.д.)
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
22.01.2014, 13:21     Обработка исключительных ситуаций! #4
Цитата Сообщение от _script_ Посмотреть сообщение
исключение вызвать при делении на 0
и не надо его вызывать
само вызовется, нужно только обработать
правда если деление целочисленное
при плавающем даст бесконечность и никакого исключения
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 13:31     Обработка исключительных ситуаций! #5
Цитата Сообщение от ValeryS Посмотреть сообщение
само вызовется, нужно только обработать
У меня не обрабатывается. или я что то не так делаю? Когда в блоке try свое исключение вызываю, то все обрабатывается.
C++
1
2
3
4
5
6
7
8
int a;
    try{
        a= 3/0;
    }
    catch(...)
    {
        cout <<"Error";
    }
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
22.01.2014, 13:36     Обработка исключительных ситуаций! #6
Цитата Сообщение от _script_ Посмотреть сообщение
У меня не обрабатывается.
И не должно
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 13:39     Обработка исключительных ситуаций! #7
Цитата Сообщение от Kastaneda Посмотреть сообщение
И не должно
я так и думал) Просто в таких случаях, надо свое исключение генерировать)
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
22.01.2014, 13:43     Обработка исключительных ситуаций! #8
Цитата Сообщение от _script_ Посмотреть сообщение
У меня не обрабатывается. или я что то не так делаю? Когда в блоке try свое исключение вызываю,
ты понятия путаешь
ты не вызываешь исключения (ну по крайней мере в этом листинге)
try блок для ловли исключений (критический код)
catch для обработки исключений
throw (которого здесь нет) для генерации исключений
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 13:48     Обработка исключительных ситуаций! #9
ValeryS, под "вызвать исключение при делении на 0", я как раз подразумевал генерацию исключения с помощью throw)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 15:37     Обработка исключительных ситуаций!
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
22.01.2014, 15:37     Обработка исключительных ситуаций! #10
_script_,
в смысле
примерно так
C++
1
2
3
try {
if(d==0) throw Zero();
else cout  << 10 / d << "\n";}
но согласись это глупо использовать if чтобы сгенерить исключение
гораздо проще
C++
1
2
if(d)
 cout  << 10 / d << "\n";
лучше попытаться превратить системные прерывания в С++ исключение

теперь ведем речь про VisualStudio про другие не знаю
можно работать __try __except.
написать свой транслятор
и пришпандорить его
C++
1
_set_se_translator
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
#include <iostream>
#include <windows.h>
#include <eh.h>
 void trans_func( unsigned int, EXCEPTION_POINTERS* );
 
int main ()
{
    int a = 1, b = 0;
_set_se_translator( trans_func );
    try {
 
        int c = a / b;
       printf(" after Expection");
    } catch (...) { 
        std::cout << "Exception" << std::endl;
    }
 system("pause");
    return 0; // до сюда мы тоже никогда не доберемся
}
 
void trans_func( unsigned int u, EXCEPTION_POINTERS* pExp)
{
    printf( "Some structured exception occurred.\n" );
    throw std::exception(" may be division by zero - for more details look at my 'pExp'");
}
http://www.firststeps.ru/mfc/winapi/r.php?128
http://msdn.microsoft.com/ru-ru/library/5z4bw5h5.aspx
можно поиграться настройками проекта
например есть
"Включить С++ исключения Да, с SEH исключениями (/EHa)"
Yandex
Объявления
22.01.2014, 15:37     Обработка исключительных ситуаций!
Ответ Создать тему
Опции темы

Текущее время: 12:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru