大侠们 求求你们啦 帮帮我吧
我刚学C++好多东西都不懂,这个地方已经调了n天了,还是找不到错误在哪~ 谁能帮我指出来啊~~
现在 比如输入 1.1 1.2 1.3 1.4 1.5 这五个数的时候 VD应该很小才对 但是VD却很大 不知道为啥啊~~~
PS 在输入数之后 按下回车 在按“ ^Z^Z ” 接着再按两下回车 就会运行了
这是运行结果 ,VD好大啊 但是我就是找不到错在哪里~
#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
vector<float>* newseq( vector<float> seq,int index_left);
vector<int>* findpip(vector<float> seq,int index_left,int index_right);
float seq_max( vector<float> seq,int index_left);
float seq_min( vector<float> seq,int index_left);
int main()
{
float seq;
vector<float> ori_seq;
cout<<"请输入一个序列:";
while(cin>>seq)
{
ori_seq.push_back(seq);
}
vector<float> *p_newseq=newseq(ori_seq,0);//用来指向新序列的指针
vector<float> newseq=(*p_newseq);
//输出新序列
for(vector<float>::iterator iter=newseq.begin();iter!=newseq.end();iter++ )
{
cout<<(*iter)<<" ";
}
cout<<endl;
vector<int> *p_ZB=findpip(newseq,0,newseq.size());//定一个指向ZB的指针
vector<float> findeachpip; //以ZB中的每两个相邻值为下标 将 newseq 分段,再每段求pip
for(int i=0;i<(*p_ZB).size()-1;i++ )
{
for(int j=(*p_ZB)[i];j<=(*p_ZB)[i+1];j++)
{
findeachpip.push_back(newseq[j]);
findpip(findeachpip,(*p_ZB)[i],(*p_ZB)[i+1]);
}
}
return 0;
}
//求最大值的函数
float seq_max( vector<float> seq,int index_left)
{
float tmp_max=seq[index_left];
for(int i=index_left+1;i<index_left+seq.size();i++)
{
if (seq[i]>tmp_max)
{
tmp_max=seq[i];
}
}
cout<<"最大值为:"<<tmp_max<<endl;
return tmp_max;
}
//求最小值的函数
float seq_min(vector<float> seq,int index_left)
{
float tmp_min=seq[index_left];
for(int i=index_left+1;i<index_left+seq.size();i++)
{
if(seq[i]<tmp_min)
{
tmp_min=seq[i];
}
}
cout<<"最小值为:"<<tmp_min<<endl;
return tmp_min;
}
//将序列归一化。
vector<float>* newseq( vector<float> seq,int index_left)
{
float max_seq=seq_max(seq, index_left);
float min_seq=seq_min(seq, index_left);
cout<<"新序列为:"<<endl;
vector <float> *new_seq=new vector<float>;
for(int i=index_left;i<index_left+seq.size();i++)
{
(*new_seq).push_back((seq[i]-min_seq)/(max_seq-min_seq));
}
return new_seq;
}
//求序列的pip
vector<int>* findpip(vector<float> seq,int index_left,int index_right)
{
float r=0.5;//定义一个阈值
vector<int> *ZB=new vector<int>;
cout<<"各个点的vd值为:"<<endl;
float vd;
for(int i=index_left+1;i<index_right-1;i++)
{
vd=(seq[i]-((seq[index_right]-seq[index_left])*i+index_right*seq[index_left]-index_left*seq[index_right])/(index_right-index_left));
if(vd<0)
{
vd=-vd;
}
if(vd>r)
{
(*ZB).push_back(i);
}
cout<<vd<<" ";
}
cout<<endl;
return ZB;
}