Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2017, 17:56   #1
nightofpromises
Пользователь
 
Регистрация: 01.03.2017
Сообщений: 31
По умолчанию Метод половинного деления

Помогите мне! У меня не вычисляет корень вообще
Код:
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
double MethodPolDel(double *a, double *b, double *epsilon) // описание функции
{
    double *c = new double; // c - середина отрезка, выделение под памяти под переменную типа double
    int count = 0; // объявление счетчика
    while (abs(*a - *b) >= *epsilon); // до тех пор пока выполняется условие |a - b| >= epsilon
    {
        count++; // счетчик инкрементируется
        *c = (*a + *b) / 2; // расчет середины отрезка [a,b]
        // функция расчета новых границ отрезка с помощью указателей
        if ((5*pow(cos(*a),2) - (2 / (sqrt(*a))) * ((5*pow(cos(*c),2) - (2 / (sqrt(*c)) <= 0))))) // для a и c
        {
            *b = *c; // новый отрезок [a, c]
        }
        else
        {
            *a = *c; // новый отрезок [c, b]
        }
    }
    return *c;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"");
    int count = 0; // объявление счетчика
    cout << "Используя метод половинного деления, найти корень уравнения.\n" << endl;
 
    // выделение участков памяти под переменные с помощью указателей
    // [a,b] - отрезок поиска корня уравнения; epsilon - заданная точность
    double *a = new double;
    double *b = new double;
    double *epsilon = new double (0.000005);
 
    try
{
повтор:
    cout << "Левая граница отрезка, a = ";
    cin >> *a;
    cout << "Правая граница отрезка, b = ";
    cin >> *b;
    cout << "Точность расчетов = ";
    cin >> *epsilon;
    if(!(a > 0))
    {
    cout << "Ошибка при вводе!" << endl;
    cin.clear(); // Очистка потока
    cin.ignore(); // Игнорировние последнего введенного знака 
    goto повтор;
    }
}
    catch(...)
{
    cout << "Ошибка при вводе!" << endl;
}
    double x = MethodPolDel(a, b, epsilon); // вызов функции вычисления корня уравнения
    count++; // счетчик инкрементируется
    cout << "Корень уравнения x = " << x << endl;
    cout.precision(5);
    cout << "Количество итераций: " << count << endl;
    
    // освобождение выделенной памяти
    delete a;
    delete b;
    delete epsilon;
 
    system("pause");
    return 0;
}
Вот формула для задания: формула.gif
Надо найти корень уравнения (формула которого я написала) надо найти на отрезке [0,1;5,0] с точностью до точность.gif.
Вот тестовые расчеты для программы (лист "Практическая 11"). Я правильно ввела функцию в F(x) в соответствии с формулой, которую я написала выше?
Расчеты (Зейнешева Ж.Е).xlsx
nightofpromises вне форума Ответить с цитированием
Старый 16.06.2017, 18:07   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Проверяйте скобки они там не правильные
p51x на форуме Ответить с цитированием
Старый 16.06.2017, 18:09   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от nightofpromises Посмотреть сообщение
Код:
if((5*pow(cos(*a),2) - (2 / (sqrt(*a))) * ((5*pow(cos(*c),2) - (2 / (sqrt(*c)) <= 0))))) // для a и c
- да-да, вот здесь какой-то косяк, я тоже так подумал!:D Операция "<=" вообще здесь ни к месту или скобки неправильные.
Cuprum5 вне форума Ответить с цитированием
Старый 16.06.2017, 20:09   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Операция там к месту, по алгоритму проверяется изменился ли знак функции, но умножается там не то...
p51x на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод половинного деления Stella~ Помощь студентам 1 04.04.2015 20:29
Метод итерация и метод половинного деления Delphi gabach Помощь студентам 1 24.12.2014 07:43
метод половинного деления Poli-007 Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2011 00:14
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 05:23
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. Хомяк!!!!! Помощь студентам 4 08.07.2009 10:08