帮小弟我看看小弟我的程序为什么只循环了2次就不循环了(c++)
帮我看看我的程序为什么只循环了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;
}
非常感谢!!
------解决方案--------------------
我编写了一个小程序,用于输出一个正弦函数(输入信号)的局部最大值和局部最小值(就是为了求信号的包络),数组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[])//求包络
------解决方案--------------------