读书人

帮小弟我看看小弟我的程序为什么只循环

发布时间: 2012-02-22 19:36:56 作者: rapoo

帮我看看我的程序为什么只循环了2次就不循环了(c++)
我编写了一个小程序,用于输出一个正弦函数(输入信号)的局部最大值和局部最小值(就是为了求信号的包络),数组a是存放输入信号的X坐标值,数组b是存放输入信号的y值,数组c用于存放局部最大值的x坐标,数组d用于存放局部最大值的y坐标,数组e用于存放局部最小值的x坐标,数组f用于存放局部最大值的y坐标,最后用txt的形式把a b c d e f以txt形式输出,结果发现a和b输出的数据都是正确的,而c d e f。txt中的数据发现只循环了2次就不循环了(本应该循环1000次),请问各位高手为什么,真麻烦你们了,非常感谢,紧急。

程序如下:

// singalprogram1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string>
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
#define pi 3.1415926

void findpeak (float[],float[]);
extern int maxnum;
extern int minnum;

int _tmain(int argc, _TCHAR* argv[])
{
float a[2000];
float b[2000];
int i=0;
ofstream outx("x.txt");
if(!outx)
{
cout<<"file error!";
return 0;
}
ofstream outy("y.txt");
if(!outy)
{
cout<<"file error!";
return 0;
}
ofstream outa("a.txt");
if(!outa)
{
cout<<"file error!";
return 0;
}
ofstream outb("b.txt");
if(!outb)
{
cout<<"file error!";
return 0;
}

float x = 0;
float y = 0;

for ( ; x<2 ; x+=0.001)
{
y = sin(2*pi*x);
outx<<x<<" ";
outy<<y<<" ";
a[i]=x;
b[i]=y;
i++;
}
cout<<"finish\n";
outx.close();
outy.close();
for(i=0;i<1999;i++)
{
outa<<a[i]<<" ";//用于检验数组是否成功传输
}
for(i=0;i<1999;i++)
{
outb<<b[i]<<" ";
}
//float x[4]={0,0.5,1,1.5};
//float y = 0;
//for (int i=0;i<4;++i)
//{
//cout<<sin(x[i]*pi)<<endl;
//}

findpeak (a,b);
return 0;

}
void findpeak (float a[],float b[])//求包络
{
float c[1000]={0};float d[1000]={0};float e[1000]={0};float f[1000]={0};
int i=0;int j=1;int k=1;
c[0]=a[0];//端点值
d[0]=b[0];
e[0]=a[0];
f[0]=b[0];
int maxnum=0;
int minnum=0;
for(i=0;i<1998;i++)
{
if(b[i+1]>b[i]&&b[i+1]>b[i+2])
{
c[j]=a[i+1];
d[j]=b[i+1];
j++;
}
maxnum=j;
if(b[i+1]<b[i]&&b[i+1]<b[i+2])
{
e[k]=a[i+1];
f[k]=b[i+1];
k++;
}
minnum=k;
}

c[maxnum]=a[2000];//端点值
d[maxnum]=b[2000];
e[minnum]=a[2000];
f[minnum]=b[2000];


ofstream outc("c.txt");
if(!outc)
{
cout<<"file error!";

}

for(i=0;i<999;i++)
{
outc<<c[i]<<" ";//用于检验数组是否成功传输
}

ofstream outd("d.txt");
if(!outd)
{
cout<<"file error!";

}

for(i=0;i<999;i++)
{
outd<<d[i]<<" ";//用于检验数组是否成功传输
}
ofstream oute("e.txt");
if(!oute)
{
cout<<"file error!";

}

for(i=0;i<999;i++)
{
oute<<e[i]<<" ";//用于检验数组是否成功传输
}
ofstream outf("f.txt");
if(!outf)
{
cout<<"file error!";

}

for(i=0;i<999;i++)
{
outf<<f[i]<<" ";//用于检验数组是否成功传输
}
cout<<maxnum;
cout<<minnum;
}



非常感谢!!

[解决办法]

C/C++ code
void findpeak (float a[],float b[])//求包络
------解决方案--------------------


可以生成数据啊!
c.txt
0 0.25 1.25 1.74476e-039 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[解决办法]

探讨
引用:
C/C++ code

void findpeak (float a[],float b[])//求包络


maxnum和minnum是多少?2么?
你单步一下,看看传进去的a和b都对不对~,样本取10个左右就行,参数没错那就是if判断不对
你在c[maxnum]=a[2000];//端点值 前面把i打出来看看多少....


maxn……

[解决办法]
不是只运行了两次,是sin这个函数在0~4pi中有两个极大值,分别在0.5pi和2.5pi的时候
按照
if(b[i+1]>b[i]&&b[i+1]>b[i+2])
这个条件,只有c[0],c[1],c[2]
有值,其他都是没定义的
[解决办法]
帮顶一下啊
[解决办法]
没有赋值,是一个乱码
[解决办法]
帮顶一下啊

读书人网 >C++

热点推荐