收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 程序错在哪啦??大侠们 我快疯了 帮帮我吧~~

wymesmile 2010-12-23 02:28:07
大侠们 求求你们啦 帮帮我吧
我刚学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;
}
...全文
39 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wymesmile 2010-12-23
  • 打赏
  • 举报
回复
谢谢你,我找了都一天多了,我是新人,所以对于vc并不是太熟悉,不过谢谢你的建议 还有 请问 刚才用vs2010 运行的时候 说 vector subscript out of range 是不是说越界了??[Quote=引用 2 楼 visualeleven 的回复:]

这种东西,你Debug下调试一下应该很容易发现问题所在的
[/Quote]
Eleven 2010-12-23
  • 打赏
  • 举报
回复
这种东西,你Debug下调试一下应该很容易发现问题所在的
Eleven 2010-12-23
  • 打赏
  • 举报
回复
你自己修改一下输入的方式
比如改成这样,输入的值小于-1表示结束
while(cin>>seq)
{
if(seq < -1)
break;
ori_seq.push_back(seq);
}

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧