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

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

Войти
Регистрация
Восстановить пароль
 
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
#1

Исключения (Exceptions) - C++

02.06.2010, 00:37. Просмотров 415. Ответов 0
Метки нет (Все метки)

ПОмогите доделать прогу...хотя, честно говоря, она работает, но только вот если не будет одного "исключения" (http://www.cppreference.com/wiki/exception/start)

Задание:
Написать рекурсивную функцию для вычисления корня уравнения на некотором отрезке. Функция, реализуемая в задании, обязана выполнять проверку передаваемых параметров и генерировать исключение в случае ошибочных данных со спецификацией throw().Функция принимает в качестве параметров отрезок [xн , xк], на котором предположительно находится корень, коэффициенты уравнения а, b, с и точность eps.
Реализовать нужно с помощью метода "половинного деления отрезка" (и никаким другим)
про этот метод можно прочитать здесь
http://www.pm298.ru/pribl.php

сама функция вот: a-b*x=LOGc(x) (логарифм по основанию "с" от "х")

в приницпе я все так и сделал, но почему то у меня постоянно вылазиит вот это
"Взят отрезок, на котором метод неприменим" (f(x1,a,b,c)*(f(x2,a,b,c)>0)
но концы функции должны быть разных знаков, чтоб на этом отрезке был корень...как быть подскажите?))
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
#include <iostream>
#include <cmath>
using namespace std;
double f(double x, double a, double b, double c)
{
    //return log(x)/log(c)+b*x-a;
    return x-pow(c,a-b*x);
}
double root(double x1, double x2, double a, double b, double c, double eps)
{
    double xt=(x1+x2)/2;
    if(f(xt, a,b,c)>f(x1,a,b,c)) 
        x1=xt;
    else 
        x2=xt;
    if (abs(x2-x1)>eps)
        return root(x1,x2,a,b,c,eps);
    return xt;
}
int main()
{
    setlocale(0,"");
    cout<<"f(x,a,b,c) = ln(x)/ln(c) + b*x - a\n\n";
    double x1,x2,a,b,c,eps;
    try 
    {   
        cout<<"Введите коэффициенты уравнения a,b,c (через пробел) : "; 
        cin>>a>>b>>c;
        if (c<0 || c==1)
            throw("Неправильно заданы параметры");
        cout<<"Введите начало и конец отрезка [x1;x2](через пробел) : "; 
        cin>>x1>>x2;
        if (x1>x2 || x1<=0)
            throw("Неправильно задан промежуток");
        if (f(x1,a,b,c)*(f(x2,a,b,c)>0))
            throw("Взят отрезок, на котором метод неприменим");
        cout<<"Введите точность: "; 
        cin>>eps;
        if (eps<0)
            throw("Введена отрицательная точность");
        cout <<"Корень уравнения= "<<root(x1,x2,a,b,c,eps)<< endl;
    } 
    // обработка исключения
    catch( const char *s ) 
    {
        cout << s << endl; 
    }   
system ("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2010, 00:37     Исключения (Exceptions)
Посмотрите здесь:

C++ Throw exceptions
исключения C++
Исключения C++
исключения c++ C++
Исключения C++
Исключения С++ C++
Исключения C++
Исключения C++
Исключения C++
C++ исключения
exceptions (no matching function for call to .) C++
Как отлавливать exceptions от stl? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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