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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2015, 14:34   #1
Fazer77777
Пользователь
 
Регистрация: 30.06.2012
Сообщений: 11
По умолчанию C++ - Метод деления отрезка пополам (работа с массивами)

Здравствуйте!

Задача такая:
Дан поленом y(x) = 2{x}^{3} + 3{x}^{2} - 6x + 6. Нахожу его его производную y(x) = 6{x}^{2} + 6x - 6 (вручную).
1. Далее нужно подставить концы отрезка [a;b], a = 6, b = - 6 в производную на место x и посчитать.
Затем с некоторым шагом i = 1 находить производную пока не выйдет за пределы отрезка (за b), т.е. x = a+i. Я думаю сохранять все точки в 1-й массив.
2. Находим 2 ближайшие друг к другу точки с разным знаком, то нужно запомнить их - это концы нового отрезка [c;d]. Тут я думаю извлечь из массива эти нужные точки и сохранить во 2-ой массив, но как это сделать не знаю. Не знаю как пробежаться по всем элементам массива и вытащить нужные значения (точки).
3. С новым отрезком повторить шаг 1 и 2 пока все точки не будут менять знак, все будут одинакового знака, значит найден минимальный нужный отрезок.
4. Воспользоваться методом деления отрезка пополам.
Найти производную на концах полученного отрезка, например получился 3-й по счёту, [e;f].
5. Найти среднюю точку xcp = (e+f)/2. Находим производную в этой точке y'(xcp) и если y'(xcp)>0, то рассматриваем отрезок [e; xcp]. Если y'(xcp)<0, то рассматриваем отрезок [xcp; f].
6. С новым отрезком повторить шаг 4 и 5 пока отрезок не уменьшиться (пока производная на концах отрезка в шаге 4 имеет разные знаки).

Пытаюсь так:

Код:
#include "stdafx.h"
#include <iostream>
#include <math.h>

using namespace std;

int main() {

int yDif2, s=2, b = 102, mas1[16], mas2[16], c, d;
double yDif1, a=-6;
	for (int i = 2; i < 10; i++) { //границы индексов здесь интуитивно поставил, 
//т.е. первые же i=0,1 приводили к yDif1>b, 
//b - здесь не значение отрезка, а значение производной yDif1 в b.
       yDif1 = 6*pow((a+i), s) + 6*(a+i) - 6;

       if (yDif1>b) { //чтобы производная не превышала значение производной в b
       i=10;
       }
mas1[i] = yDif1; // Сохраняю все точки в 1 массив, 
//далее не знаю как пробежаться по нему и сохранить во 2-й массив нужные значения (точки) и т.д.

cout <<"yDif1 = "<< yDif1 <<endl; 
cout << "Value of element is mas1 = " << mas1[i] << endl;
}

system ("pause");
	return 0;
}

Помогите с задачкой
Fazer77777 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дописать программу для нахождения корня ур-ния методом деления отрезка пополам Lost_Neko Паскаль, Turbo Pascal, PascalABC.NET 1 19.03.2012 16:29
метод деления отрезка пополам relyativus Помощь студентам 1 09.12.2011 21:16
Метод деления отрезка пополам Витяака Помощь студентам 2 23.12.2010 11:42
Метод деления отрезка пополам Delphi lordve Помощь студентам 0 06.12.2009 23:57
Вычисление корня уравнения методом деления отрезка пополам Absent Помощь студентам 12 25.11.2007 17:54