回 帖 发 新 帖 刷新版面

主题:文本文档为何只记录一个数据?

#include"iostream.h"
#include<fstream>
using namespace std;
class One_Improved_Euler_ways            //声明类:用于一阶微分方程的改进的欧拉算法
{
private:
    float h;
    int n;
    float YP,YC,x,y;
    float first_order_derivative(float x,float y)      //声明一个一阶微分方程
    {
         float f;
         f=y-2*x/y;                      //针对不同的导数关系修改这里即可以!
         return f;
    }
public:
    void result()
    {
        cout<<"请输入初值x"<<endl;
        cin>>x;
        cout<<"请输入初值y"<<endl;
        cin>>y;
        cout<<"请输入步长h"<<endl;
        cin>>h;
        cout<<"请输入步数n"<<endl;
        cin>>n;
        int i=0;
        while(i<=n)
        {
            i=i++;
            YP=y+h*first_order_derivative(x,y);
            x=x+h;
            YC=y+h*first_order_derivative(x,YP)    ;
            y=(YP+YC)/(float)2;
            cout<<"y="<<y<<endl;
            ofstream outobj("data.txt");
            outobj<<y<<endl;
            outobj.close();
        }
    }
};                                                        //类的结束不能忘记分号!
class One_Runge_Kutta_ways                  //声明类:用于一阶微分方程的龙格-库塔算法
{
private:
    float h;
    int n;
    float K1,K2,K3,K4,x,y;
    float first_order_derivative(float x,float y)         //声明一个一阶微分方程
    {
         float f;
         f=y-2*x/y;                      //针对不同的导数关系修改这里即可以!
         return f;
    }
public:
    void result()
    {
        cout<<"请输入初值x"<<endl;
        cin>>x;
        cout<<"请输入初值y"<<endl;
        cin>>y;
        cout<<"请输入步长h"<<endl;
        cin>>h;
        cout<<"请输入步数n"<<endl;
        cin>>n;
        int i=0;
        while(i<=n)
        {
            i=i++;
            K1=first_order_derivative(x,y);
            K2=first_order_derivative(x+h/2,y+h*K1/2);
            K3=first_order_derivative(x+h/2,y+h*K2/2);
            x=x+h;
            K4=first_order_derivative(x,y+h*K3);
            y=y+h/6*(K1+2*K2+2*K3+K4);
            cout<<"y="<<y<<endl;
            ofstream outobj("data.txt");
            outobj<<y<<endl;
            outobj.close();
        }
    }
};                                           
                                                          //类的结束不能忘记分号!

int main()
{
    One_Improved_Euler_ways equation1;
    One_Runge_Kutta_ways equation2;
    equation1.result();
    equation2.result();
    return 0;
}
上面是我的C++代码,其中我打开了一个文本文档记录数据,从代码中看出我把每次的Y值记录在了data.txt中,但是当我打开data.txt,只有一个Y值!请问是怎么回事啊?

回复列表 (共4个回复)

沙发

自己回答,哈哈
#include"iostream.h"
#include<fstream>
using namespace std;
class One_Improved_Euler_ways                          //声明类:用于一阶微分方程的改进的欧拉算法
{
private:
    float h;
    int n;
    float YP,YC,x,y;
    float first_order_derivative(float x,float y)        //声明一个一阶微分方程
    {
         float f;
         f=y-2*x/y;                                      //针对不同的导数关系修改这里即可以!
         return f;
    }
public:
    void result()
    {
        float y[100],x[100];                                       //计算99步骤
        cout<<"请输入初值x"<<endl;
        cin>>x[0];
        cout<<"请输入初值y"<<endl;
        cin>>y[0];
        cout<<"请输入步长h"<<endl;
        cin>>h;
        int i=0,j=0;
        ofstream outobj1("Xdata.txt");
        ofstream outobj2("Ydata.txt");
        while(i<99||j<99)
        {
            YP=y[i]+h*first_order_derivative(x[j],y[i]);
            x[++j]=x[j]+h;
            YC=y[i]+h*first_order_derivative(x[j],YP)    ;
            y[++i]=(YP+YC)/(float)2;
            cout<<"y["<<i<<"]="<<y[i]<<endl;
            outobj1<<x[j]<<endl;
            outobj2<<y[i]<<endl;
        }
            outobj1.close();
            outobj2.close();
    }
};                                                        //类的结束不能忘记分号!
class One_Runge_Kutta_ways                               //声明类:用于一阶微分方程的龙格-库塔算法
{
private:
    float h;
    int n;
    float K1,K2,K3,K4,x,y;
    float first_order_derivative(float x,float y)         //声明一个一阶微分方程
    {
         float f;
         f=y-2*x/y;                                       //针对不同的导数关系修改这里即可以!
         return f;
    }
public:
    void result()
    { 
        float y[100],x[100];                                  //计算99次
        cout<<"请输入初值x"<<endl;
        cin>>x[0];
        cout<<"请输入初值y"<<endl;
        cin>>y[0];
        cout<<"请输入步长h"<<endl;
        cin>>h;
        int i=0,j=0;
        ofstream outobj1("Xtest.txt");
        ofstream outobj2("Ytest.txt");
        while(i<99||j<99)
        {
        
            K1=first_order_derivative(x[j],y[i]);
            K2=first_order_derivative(x[j]+h/2,y[i]+h*K1/2);
            K3=first_order_derivative(x[j]+h/2,y[i]+h*K2/2);
            x[++j]=x[j]+h;
            K4=first_order_derivative(x[j],y[i]+h*K3);
            y[++i]=y[i]+h/6*(K1+2*K2+2*K3+K4);
            cout<<"y["<<i<<"]="<<y[i]<<endl;
            outobj1<<x[j]<<endl;
            outobj2<<y[i]<<endl;
            }
        outobj1.close();
        outobj2.close();
    }
};                                           
                                                          //类的结束不能忘记分号!

int main()
{
    One_Improved_Euler_ways equation1;
    One_Runge_Kutta_ways equation2;
    equation1.result();
    equation2.result();
    return 0;
}

板凳

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系摩客元亨 QQ908889846
2010年,中国网民突破了4亿,
网络游戏玩家超过了3亿,
互联网即将进入全民网游的时代

3 楼

这是一个互助的模式。
不推广人也有钱赚的。分A B两个网。
不推广的人在A网。推广的人 在B网。
B网推广的人帮助A网。
A网拿6000元出局。
B网就多了。
C易特元亨QQ919169870
奖励制度 
C易特更多资料C易特元亨QQ919169870
http://blog.sina.com.cn/cyite6
C易特奖励制度
http://blog.sina.com.cn/s/blog_6b2561440100l5r8.html

4 楼

寻找中国的最优秀的网商领袖精英 淘宝商盟元亨 qq: 908889846 
当今世界正经历着全球经济一体化的大潮,中国本土企业也因此面临着前所未有的机遇与挑战。
在这场洗礼中,哪些互联网平台有能力成为世界级的电子商务平台?网商精英要怎样做,才能最终成长为世界级网商精英领袖?
淘宝商盟平台震撼登场,携手淘宝30万商家联盟购物商城。
平台刚刚启动,互联网的网商精英请咨询qq: 908889846 
占领市场第一先机,合力打造网商系统!
淘宝商盟官网   www.taobaosm.com
 http://blog.sina.com.cn/tbsm8
淘宝商盟奖励制度

我来回复

您尚未登录,请登录后再回复。点此登录或注册