设计一个类,该类可以表示一个一元二次函数。在给定的区间内,能求该函数最大值最小值。已有数学思路,设y=ax^2+bx+c,情况分为a>0和a<0,进而分为-b/2a是否在给定区间内,请问思路是否正确?方向是否正确?需要怎样才能完成?
可以参考一下如下代码
下方代码可以兼容分数
如有问题,敬请提出
#include <bits/stdc++.h>
using namespace std;
int main(){
int aa,ab,ba,bb,ca,cb;
cout<<"请输入二次函数一般形式的三个系数的分子与分母(共六个整数)"<<endl;
cin>>aa>>ab>>ba>>bb>>ca>>cb;
int xla,xlb,xra,xrb;
cout<<"请输入定义域(分别输入左界和右界的分子与分母,共四个整数)"<<endl;
cin>>xla>>xlb>>xra>>xrb;
char answer;
cout<<"请输入l或s,l代表求最大值,s代表求最小值"<<endl;
cin>>answer;
//输入所需定值
int ta=-ab*ba;
int tb=2*aa*bb;
int la,lb,sa,sb,ya,yb;
//定义接下来所需要的变量
if(aa*ab<0){
if(xla*1.0/xlb<=ta*1.0/tb){
if(xra*1.0/xrb>=ta*1.0/tb){
la=ta;
lb=tb;
sa=((ta*1.0/tb-xla*1.0/xlb)>=(xra*1.0/xrb-ta*1.0/tb)?xla:xra);
sb=((ta*1.0/tb-xla*1.0/xlb)>=(xra*1.0/xrb-ta*1.0/tb)?xlb:xrb);
}
else if(xra*1.0/xrb<ta*1.0/tb){
la=xra;
lb=xrb;
sa=xla;
sb=xlb;
}
}
else if(xla*1.0/xlb>ta*1.0/tb){
la=xla;
lb=xlb;
sa=xra;
sb=xrb;
}
}
else if(aa*ab>0){
if(xla*1.0/xlb<=ta*1.0/tb){
if(xra*1.0/xrb>=ta*1.0/tb){
sa=ta;
sb=tb;
la=((ta*1.0/tb-xla*1.0/xlb)>=(xra*1.0/xrb-ta*1.0/tb)?xla:xra);
lb=((ta*1.0/tb-xla*1.0/xlb)>=(xra*1.0/xrb-ta*1.0/tb)?xlb:xrb);
}
else if(xra*1.0/xrb<ta*1.0/tb){
la=xla;
lb=xlb;
sa=xra;
sb=xrb;
}
}
else if(xla*1.0/xlb>ta*1.0/tb){
la=xra;
lb=xrb;
sa=xla;
sb=xlb;
}
}
//判断各种情况,得到x的分子与分母
if(answer=='l'){
ya=aa*bb*la*la*lb*cb+ab*lb*lb*ba*la*cb+ab*lb*lb*lb*bb*ca;
yb=ab*lb*lb*lb*bb*cb;
int ym=(ya>=yb?yb:ya);
if (ym>0){
for (int i=ym;i>=1;i--){
if (ya%i==0&&yb%i==0){
ya/=i;
yb/=i;
}
}
}
else if (ym<=0){
for (int i=ym;i<0;i++){
if (ya%i==0&&yb%i==0){
ya/=i;
yb/=i;
}
}
}
cout<<"最大值的最简分子分母分别为"<<ya<<"和"<<yb;
}
else if(answer=='s'){
ya=aa*bb*sa*sa*sb*cb+ab*sb*sb*ba*sa*cb+ab*sb*sb*sb*bb*ca;
yb=ab*sb*sb*sb*bb*cb;
int ym=(ya>=yb?yb:ya);
if (ym>0){
for (int i=ym;i>=1;i--){
if (ya%i==0&&yb%i==0){
ya/=i;
yb/=i;
}
}
}
else if (ym<=0){
for (int i=ym;i<0;i++){
if (ya%i==0&&yb%i==0){
ya/=i;
yb/=i;
}
}
}
cout<<"最小值的最简分子分母分别为"<<ya<<"和"<<yb;
}
//将x的分子与分母带入函数,求出y的分子与分母并化简,输出
return 0;
}