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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2015, 01:27   #1
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию Метод дихотомии( половинного деления) C++

Здравствуйте, хотел обратиться за помощью. Нужно найти корень функции методом дихотомии. Функцию можно использовать любую( в моем случае cos(x) ), интервалы и епсилон задаются пользователем. Я как бы написал программу, но есть некоторые нюансы:
1) что бы она искала корни правильно.
2) что бы, если на интервале есть 2 корня выдавало оба.

Не понимаю что не так...
Писал в Microsoft Visual Studio 2013
Код:
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <conio.h>
#include <math.h>
using namespace std;
double f(double  x)
{
	return cos(x) ; // Возвращаемая функция.
}
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");

	int exit = 0; // Переменная для выхода из цикла
	double a, b, c = 0, e; //Интервал (a, b), средняя точка, епсилон

	
	do
	{
		cout << " Введите пределы\n";
		cout << "Start a=";
		cin >> a;
		cout << "End b=";
		cin >> b;
		cout << "Введите погрешность e=";
		cin >> e; // вводим нужную точность вычислений
		
		if (a > b) // Если пользователь перепутал пределы интервала   меняем их местами
		{
			c = a;
			a = b;
			b = c;
		}
		if (f(a)*f(b) > 0)  // если знаки функции на краях отрезка одинаковые, то здесь нет корня
			cout << " Корней нет";							
		else
		{
			while ((fabs(b - a)) > e ) // пока не достигнем необходимой точности, будет продолжать вычислять
			{
				if (f(a)*f(c) < 0) // Если меньше 0 движемся влево
					b = c;
				else // Иначе - движемся вправо 
					a = c;
				c = (a + b) / 2;
			}
			cout << "\n" << "c=" << c << endl; // вывод вычисленного корня
		}
		cout << "\n Выход?";
		cin >> exit;
	} 
	while (exit != 1); // пока пользователь не ввел exit = 1
	system("pause");
	return 0;
}
Evdar вне форума Ответить с цитированием
Старый 08.12.2015, 09:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что бы она искала корни правильно.
В смысле "правильно". А сейчас что не так?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.12.2015, 15:40   #3
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию

Ну например когда ввожу интервал от 0 до 5 то выдает Корней нет, на интервалах (0;4) и ( 0, 6 ) все нормально...не пойму почему так...
Evdar вне форума Ответить с цитированием
Старый 08.12.2015, 16:19   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
не пойму почему так...
Вот вы и познали всю прелесть начальных условий и их слишком широкую постановку.
Возьмите калькулятор и посчитайте cos(0) и cos(5)
p51x вне форума Ответить с цитированием
Старый 08.12.2015, 18:06   #5
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию

Я понял, спасибо за подсказку.
А как то это обойти можно, или в этом методе это невозможно?
Evdar вне форума Ответить с цитированием
Старый 08.11.2019, 10:22   #6
7heWh1t3
Новичок
Джуниор
 
Регистрация: 10.10.2019
Сообщений: 2
По умолчанию

Скиньте stdafx.h пожалуйста)
7heWh1t3 вне форума Ответить с цитированием
Старый 08.11.2019, 10:43   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Он пустой скорее всего у автора судя по наличию других инклюдов.
То есть он просто создал проект с галочкой про precompiled header, но не понял что это и зачем.
https://en.wikipedia.org/wiki/Precompiled_header
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод итерация и метод половинного деления Delphi gabach Помощь студентам 1 24.12.2014 07:43
Паскаль. Уточнение корней методом половинного деления (дихотомии) nanoDesu Помощь студентам 0 15.12.2011 14:27
Метод деления пополам (дихотомии) Килямов Сергей Помощь студентам 3 01.11.2011 18:13
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 05:23
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. Хомяк!!!!! Помощь студентам 4 08.07.2009 10:08