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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2018, 02:56   #1
eka2
Новичок
Джуниор
 
Регистрация: 29.05.2018
Сообщений: 2
По умолчанию Работа с массивами С++

Помогите разобраться как решать задачу, пожалуйста
Есть отрезок [а;b]
1)Вычисляю его середину и ставлю туда точку xk,
2)Получаю два отрезка [a,xk][xk,b]
3)Надо выбрать наибольший отрезок или самый правый, если все равны == [a,xk]
4)Вычисляю середину этого отрезка и ставлю точку xk+1
5)Теперь три отрезка [a,xk+1][xk+1,xk][xk,b], так же нужно выбрать из трёх наибольший ==[xk,b]
6) и в середину поставить точку точку xk+2
7)Теперь три отрезка [a,xk+1][xk+1,xk][xk,xk+2][xk+2,b], так же нужно выбрать из трёх наибольший или самый правый, если все равны == [a,xk+1]
8)В середину точку xk+3
И так пока отрезок >epsilon
или какое-то конкретное количество точек (не суть)
Мой цикл (код ниже)не проверяет длины всех отрезков, а только двух,которые я делю пополам.
Помогите, пожалуйста
Код:
 int a = lX;//левый конец отрезка
        int b = rX;//правый конец отрезка
        double xk;
        int  n = 10; //кол-во точек
        QVector<double> x1(n), y1(n); //Массивы координат точек
        for (int k = 1; k < n; k++) {
        xk = (a + b) / 2;
        x1[k] = xk; y1[k] = A*sin(B*xk) + G*cos(D*xk);
        ui->widget->addGraph();
        ui->widget->graph(1)->setData(x1, y1);
 
        ui->widget->graph(1)->setPen(QPen(Qt::black));//задаем цвет точки
        ui->widget->graph(1)->setLineStyle(QCPGraph::lsNone);//убираем линии
                                                             //формируем вид точек
        ui->widget->graph(1)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 4));
 
        ui->widget->replot();//рисуем
        for (int i = 0; i < 10; i++) {
            R[i] = b - a;
                    }
        if (R[i + 1] >=R[i]) {
            a = xk;
        }
        else    b = xk;
}
eka2 вне форума Ответить с цитированием
Старый 29.05.2018, 08:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Так у вас иф вне цикла.
p51x вне форума Ответить с цитированием
Старый 29.05.2018, 12:22   #3
eka2
Новичок
Джуниор
 
Регистрация: 29.05.2018
Сообщений: 2
По умолчанию

так скопировалось просто. Проблема не в этом. Проблема в том,что я написала цикл, который не проверяет длины всех отрезков, а только двух,которые я делю пополам. И как сделать, что бы проверялись все отрезки, я не знаю
eka2 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами в C++ Мики6277 Помощь студентам 3 22.10.2014 13:58
Работа с массивами Катерина Рыжая Помощь студентам 5 22.04.2013 08:35
работа с массивами (С±+) ponka22 Помощь студентам 0 12.04.2013 15:09
Работа с массивами Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 6 24.09.2012 19:04
Работа с массивами Hakman Общие вопросы C/C++ 1 19.02.2008 15:11