Спешна помощ за задача на C++

confiscate

Registered
Здравейте ,
Преди няколко дена пуснах тема във форума за намиране на максимум на функция по правилото на златното сечение с дадена блок схема на алгоритъма , но уви никой не ми помогна. Затова аз седнах и по дадената блок схема успях да си управия кода до някаква степен ,но пак имам проблем . Ето кода на цялата програма:
Код:
#include <iostream.h>
#include <math.h>
int main ()
{
    double a,b,d;
    float dmin;
    double x1,x2,xm,q1,q2,qm;
    const double z1=0.38;
    const double z2=0.62;
    cout<<"a= ";
    cin>>a;
    cout<<"b= ";
    cin>>b;
    cout<<"dmin = ";
    cin>>dmin;
    x1=a+z1*(b-a);
    x2=a+z2*(b-a);
    q1=100-(x1-5)*(x1-5);
    q2=100-(x2-5)*(x2-5);
    if (q1=q2) {
    do {
    if (q1=q2) {
    d=x2-x1;}
    if(d>dmin) {
    a=x1;
    b=x2;
    x1=a+z1*(b-a);
    x2=a+z2*(b-a);
    q1=100-(x1-5)*(x1-5);
    q2=100-(x2-5)*(x2-5);}
    if(d<dmin) {
    d=d/2;
    xm=x1+d;
    qm=100-(xm-5)*(xm-5);
    cout<<"d= "<<d<<endl;
    cout<<"xm= "<<xm<<endl;
    cout<<"qm= "<<qm<<endl;}
    }while (d>dmin);}
  
    if (q2>q1) {
    do {
    if (q2>q1) {
    d=z2*(b-a);}
    if(d>dmin) {
    a=x1;
    x1=x2;
    q1=q2;
    x2=a+z2*(b-a);
    q2=100-(x2-5)*(x2-5);}
    if(d<dmin) {
    xm=x2;
    qm=q2;
    cout<<x1<<endl;
    cout<<"xm= "<<xm<<endl;
    cout<<"qm= "<<qm<<endl;}
    }while (d>dmin);}
  
    if (q2<q1) {
    do {
    if (q2<q1) {
    d=z2*(b-a);}
    if(d>dmin) {
    b=x2;
    x2=x1;
    q2=q1;
    x1=a+z1*(b-a);
    q1=100-(x1-5)*(x1-5);}
    if(d<dmin) {
    xm=x1;
    qm=q1;
    cout<<"xm= "<<xm<<endl;
    cout<<"qm= "<<qm<<endl;}
    }while (d>dmin);}
    getchar();
    getchar();
    return 0;
}

Така написана програмата работи , но не смята правилно ... Написвайки обаче три различни цикъла за q1=q2 ; q2>q1; q2<q1; ,като три различни програми , всичко се изчислява точно както трябва да бъде , тъй като го проверих на ръка. Ето кодовете и за трите отделни цикъла:
http://dox.bg/files/dw?a=a028efd776

Може ли да ми кажете къде бъркам и защо в цялостна програма не смята правилно или по -скоро не приема q1>q2 и q1<q2 , а само q1=q2.

Благодаря предварително !!!
Поздрави
 

confiscate

Registered
Блок схемата е правена от някакъв професор , автор на учебник по оптимизация. Иначе се оправих , много благодаря на relax4o :)
 

Горе