这个是我的程序段,红色的地方是出问题的地方
// 等出力Dlg.cpp : implementation file
//#include "stdafx.h"
#include "等出力.h"
#include "等出力Dlg.h"
#include <stdio.h>
#include <iostream>
#include <fstream.h>
#include <math.h>
const int N=10;
const int M=36;
const int T=12;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA // ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
double HV(double h)
{double V[N]={0,0.241,1.592,4.521,9.692,18.490,33.346,57.349,95.058,151.578};
double H[N]={50,60,70,80,90,100,110,120,130,140};
double b;
int i,p;
//计算死库容
b=0;
p=0;
for(i=1;i<N-2;i++)
{
if(h<=H[i]) break;
p++;
}
if(h<=H[1])
{if((p>0)&&p<(N-2)&&(h-H[p]<H[p+1]-h))
p--;
b+=(V[0]*(h-H[1])-V[1]*(h-H[0]))/(H[0]-H[1]);
}
else
{
if((p>0)&&p<(N-2)&&(h-H[p]<H[p+1]-h))
p--;
b=(h-H[p+1])/(H[p]-H[p+1])*(h-H[p+2])/(H[p]-H[p+2])*V[p];
b+=(h-H[p])/(H[p+1]-H[p])*(h-H[p+2])/(H[p+1]-H[p+2])*V[p+1];
b+=(h-H[p])/(H[p+2]-H[p])*(h-H[p+1])/(H[p+2]-H[p+1])*V[p+2];
}
return b;
}
double VH(double e)
{double V[N]={0,0.241,1.592,4.521,9.692,18.490,33.346,57.349,95.058,151.578};
double H[N]={50,60,70,80,90,100,110,120,130,140};
double we;
int i,d;
we=0;
d=0;
for(i=1;i<N-2;i++)
{
if(e<=V[i]) break;
d++;
}
//特殊点处理
if(e<=V[1])
{if ((d>0)&&d<(N-2)&&(e-V[d]<V[d+1]-e))
d--;
we+=(H[0]*(e-V[1])-H[1]*(e-V[0]))/(V[0]-V[1]);
}
else
//插值计算
{
if((d>0)&&d<(N-2)&&(e-V[d]<V[d+1]-e))
d--;
we=(e-V[d+1])/(V[d]-V[d+1])*(e-V[d+2])/(V[d]-V[d+2])*H[d];
we+=(e-V[d])/(V[d+1]-V[d])*(e-V[d+2])/(V[d+1]-V[d+2])*H[d+1];
we+=(e-V[d])/(V[d+2]-V[d])*(e-V[d+1])/(V[d+2]-V[d+1])*H[d+2];
}
return we;
}double QH(double m)
{double R[36]={48.5,49,49.5,50,50.5,51,51.5,52,52.5,53,53.5,54,54.5,
55,55.5,56,56.5,57,57.5,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74};
double F[36]={204,350,545,795,1120,1490,1900,2350,2820,3320,3360,4420,5040,5720,6450,7200,7950,9700,9470,10300,12000,
13700,15600,17500,19300,21200,23200,25200,27200,29300,31600,33800,36000,38300,40300,43400};
double k;
int p,i;
k=0;
p=0;
for(i=1;i<M-2;i++)
{
if(m<=F[i]) break;
p++;
}
//特殊点处理
if(m<=F[1])
{if((p>0)&&p<(M-2)&&(m-F[p]<F[p+1]-m))
p--;
k+=(R[0]*(m-F[1])-R[1]*(m-F[0]))/(F[0]-F[1]);
}
else//插值计算
{
if
((p>0)&&p<(M-2)&&(m-F[p]<F[p+1]-m))
p--;
k=(m-F[p+1])/(F[p]-F[p+1])*(m-F[p+2])/(F[p]-F[p+2])*R[p];
k+=(m-F[p])/(F[p+1]-F[p])*(m-F[p+2])/(F[p+1]-F[p+2])*R[p+1];
k+=(m-F[p])/(F[p+2]-F[p])*(m-F[p+1])/(F[p+2]-F[p+1])*R[p+2];
}
return k;
}
}void CMyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
static double VT[T],Q[T],A[T]={4,5,6,7,8,9,10,11,12,1,2},B[T]={30,31,30,31,31,30,31,30,31,31,28};
static int i,j;
static double Nt,s,a,n,x,k,s1,ssw,skr,zcsw,zckr,q,g1,g2; //b:死库容,c:正常库容,d:下游水位
//输入数据
UpdateData(true);
ssw=m_SSW;
zcsw=m_ZCSW;
n=m_JSCL;
q=m_JSQ;
g1=m_GS1;
g2=m_GS2;
UpdateData(false);
//求死库容、正常库容;
a=0.8;
skr=HV(ssw);
zckr=HV(zcsw); ifstream in1("E:\\水能计算\\资料\\数据.txt",ios::in);
for(i=0;i<T;i++)
in1>>Q[i]; {
for(i=0;i<12;i++)
if(g1==A[i])
s=i;}
{for(i=0;i<12;i++)
if(g2==A[i])
k=i;}
s1=k-s;
VT[0]=skr;for (j=0; ;j++)
for (i=0;i<12;i++)
{
VT[i+1]=VT[i]+(Q[i]-q)*B[i]*24*3600;
if(VT[i]>zckr) VT[i]=zckr;
}
vpj=(VT[i]+VT[i+1])/2;
Nt=a*q*(VH(vpj)-QH(q));
if((Nt-n)>=(n/100))
q=q+(Nt-n)/(a*(VH(vpj)-QH(q)));
else
break;
} UpdateData(true);
m_SKR=skr;
m_q1=q;
m_N1=Nt;
m_ZCKR=zckr;
n=m_JSCL;
UpdateData(false);
}
// 等出力Dlg.cpp : implementation file
//#include "stdafx.h"
#include "等出力.h"
#include "等出力Dlg.h"
#include <stdio.h>
#include <iostream>
#include <fstream.h>
#include <math.h>
const int N=10;
const int M=36;
const int T=12;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA // ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
double HV(double h)
{double V[N]={0,0.241,1.592,4.521,9.692,18.490,33.346,57.349,95.058,151.578};
double H[N]={50,60,70,80,90,100,110,120,130,140};
double b;
int i,p;
//计算死库容
b=0;
p=0;
for(i=1;i<N-2;i++)
{
if(h<=H[i]) break;
p++;
}
if(h<=H[1])
{if((p>0)&&p<(N-2)&&(h-H[p]<H[p+1]-h))
p--;
b+=(V[0]*(h-H[1])-V[1]*(h-H[0]))/(H[0]-H[1]);
}
else
{
if((p>0)&&p<(N-2)&&(h-H[p]<H[p+1]-h))
p--;
b=(h-H[p+1])/(H[p]-H[p+1])*(h-H[p+2])/(H[p]-H[p+2])*V[p];
b+=(h-H[p])/(H[p+1]-H[p])*(h-H[p+2])/(H[p+1]-H[p+2])*V[p+1];
b+=(h-H[p])/(H[p+2]-H[p])*(h-H[p+1])/(H[p+2]-H[p+1])*V[p+2];
}
return b;
}
double VH(double e)
{double V[N]={0,0.241,1.592,4.521,9.692,18.490,33.346,57.349,95.058,151.578};
double H[N]={50,60,70,80,90,100,110,120,130,140};
double we;
int i,d;
we=0;
d=0;
for(i=1;i<N-2;i++)
{
if(e<=V[i]) break;
d++;
}
//特殊点处理
if(e<=V[1])
{if ((d>0)&&d<(N-2)&&(e-V[d]<V[d+1]-e))
d--;
we+=(H[0]*(e-V[1])-H[1]*(e-V[0]))/(V[0]-V[1]);
}
else
//插值计算
{
if((d>0)&&d<(N-2)&&(e-V[d]<V[d+1]-e))
d--;
we=(e-V[d+1])/(V[d]-V[d+1])*(e-V[d+2])/(V[d]-V[d+2])*H[d];
we+=(e-V[d])/(V[d+1]-V[d])*(e-V[d+2])/(V[d+1]-V[d+2])*H[d+1];
we+=(e-V[d])/(V[d+2]-V[d])*(e-V[d+1])/(V[d+2]-V[d+1])*H[d+2];
}
return we;
}double QH(double m)
{double R[36]={48.5,49,49.5,50,50.5,51,51.5,52,52.5,53,53.5,54,54.5,
55,55.5,56,56.5,57,57.5,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74};
double F[36]={204,350,545,795,1120,1490,1900,2350,2820,3320,3360,4420,5040,5720,6450,7200,7950,9700,9470,10300,12000,
13700,15600,17500,19300,21200,23200,25200,27200,29300,31600,33800,36000,38300,40300,43400};
double k;
int p,i;
k=0;
p=0;
for(i=1;i<M-2;i++)
{
if(m<=F[i]) break;
p++;
}
//特殊点处理
if(m<=F[1])
{if((p>0)&&p<(M-2)&&(m-F[p]<F[p+1]-m))
p--;
k+=(R[0]*(m-F[1])-R[1]*(m-F[0]))/(F[0]-F[1]);
}
else//插值计算
{
if
((p>0)&&p<(M-2)&&(m-F[p]<F[p+1]-m))
p--;
k=(m-F[p+1])/(F[p]-F[p+1])*(m-F[p+2])/(F[p]-F[p+2])*R[p];
k+=(m-F[p])/(F[p+1]-F[p])*(m-F[p+2])/(F[p+1]-F[p+2])*R[p+1];
k+=(m-F[p])/(F[p+2]-F[p])*(m-F[p+1])/(F[p+2]-F[p+1])*R[p+2];
}
return k;
}
}void CMyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
static double VT[T],Q[T],A[T]={4,5,6,7,8,9,10,11,12,1,2},B[T]={30,31,30,31,31,30,31,30,31,31,28};
static int i,j;
static double Nt,s,a,n,x,k,s1,ssw,skr,zcsw,zckr,q,g1,g2; //b:死库容,c:正常库容,d:下游水位
//输入数据
UpdateData(true);
ssw=m_SSW;
zcsw=m_ZCSW;
n=m_JSCL;
q=m_JSQ;
g1=m_GS1;
g2=m_GS2;
UpdateData(false);
//求死库容、正常库容;
a=0.8;
skr=HV(ssw);
zckr=HV(zcsw); ifstream in1("E:\\水能计算\\资料\\数据.txt",ios::in);
for(i=0;i<T;i++)
in1>>Q[i]; {
for(i=0;i<12;i++)
if(g1==A[i])
s=i;}
{for(i=0;i<12;i++)
if(g2==A[i])
k=i;}
s1=k-s;
VT[0]=skr;for (j=0; ;j++)
for (i=0;i<12;i++)
{
VT[i+1]=VT[i]+(Q[i]-q)*B[i]*24*3600;
if(VT[i]>zckr) VT[i]=zckr;
}
vpj=(VT[i]+VT[i+1])/2;
Nt=a*q*(VH(vpj)-QH(q));
if((Nt-n)>=(n/100))
q=q+(Nt-n)/(a*(VH(vpj)-QH(q)));
else
break;
} UpdateData(true);
m_SKR=skr;
m_q1=q;
m_N1=Nt;
m_ZCKR=zckr;
n=m_JSCL;
UpdateData(false);
}
}
}//这个是多余的