confiscate
Registered
Здравейте ,
Преди няколко дена пуснах тема във форума за намиране на максимум на функция по правилото на златното сечение с дадена блок схема на алгоритъма , но уви никой не ми помогна. Затова аз седнах и по дадената блок схема успях да си управия кода до някаква степен ,но пак имам проблем . Ето кода на цялата програма:
Така написана програмата работи , но не смята правилно ... Написвайки обаче три различни цикъла за q1=q2 ; q2>q1; q2<q1; ,като три различни програми , всичко се изчислява точно както трябва да бъде , тъй като го проверих на ръка. Ето кодовете и за трите отделни цикъла:
http://dox.bg/files/dw?a=a028efd776
Може ли да ми кажете къде бъркам и защо в цялостна програма не смята правилно или по -скоро не приема q1>q2 и q1<q2 , а само q1=q2.
Благодаря предварително !!!
Поздрави
Преди няколко дена пуснах тема във форума за намиране на максимум на функция по правилото на златното сечение с дадена блок схема на алгоритъма , но уви никой не ми помогна. Затова аз седнах и по дадената блок схема успях да си управия кода до някаква степен ,но пак имам проблем . Ето кода на цялата програма:
Код:
#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.
Благодаря предварително !!!
Поздрави