| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 938 人关注过本帖
标题:初学者做的求解方程组,有奇怪的问题
只看楼主 加入收藏
观星
Rank: 2
等 级:论坛游民
帖 子:77
专家分:45
注 册:2008-5-1
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:8 
初学者做的求解方程组,有奇怪的问题
#include<iostream>
using namespace std;
class fangcheng
{
       public:int default_x=0;
//这句为什么不对啊,放在开头用 define就好使呢

        double xishu[default_x][default_x+1];
    fangcheng()
    {
        cin>>default_x;
        for(int i=0;i<default_x;i++)
        {
            cout<<"请输入第 "<<(i+1)<<" 个方程的系数:"<<endl;
            for(int j=0;j<default_x+1;j++)
                cin>>xishu[i][j];
        }
    }
    void jiaohuan(int x,int y)
    {
        double r;
        for(int i=0;i<default_x+1;i++)
        {
            r=xishu[x][i];
            xishu[x][i]=xishu[y][i];
            xishu[y][i]=r;
        }
    }
    void output()
    {
         int i;
         cout<<endl<<"方程组:"<<endl;
        for(i=0;i<default_x;i++)
        {
            cout<<endl<<"第 "<<(i+1)<<" 个方程:";
            for(int j=0;j<default_x+1;j++)
                cout<<xishu[i][j]<<" ";
        }
        cout<<endl;
    }
    bool bianhuaxia(int x)
    {
        int r,i;
    //    cout<<"变化 第"<<x<<" 列"<<endl;
        if(x<=default_x)
        {
            for(i=x-1;i<default_x;i++)
            {
     //                         cout<<"i="<<i<<endl;
                if(!(xishu[i][x-1]>-1e-6&&xishu[i][x-1]<1e-6))
                {
     //               cout<<"xishu["<<i<<"]["<<(x-1)<<"] = "<<xishu[i][x-1]<<endl;
                    if((i>x-1)&&(i<default_x))
                    {
     //                   cout<<"交换 "<<x-1<<","<<i<<endl;
                        jiaohuan(x-1,i);
                    }
                    return true;
                }
            }
            return false;
        }
        else
        {
            cout<<"\nError: bianhuaxia :x-->"<<x<<endl;
            return false;
        }
    }
    void add(int x1,double n,int x2)
    {
        for(int i=0;i<default_x+1;i++)
        {
            xishu[x2][i]+=xishu[x1][i]*n;
        }
    }
    void mul(int x,double n)
    {
        for(int i=0;i<default_x+1;i++)
        {
            xishu[x][i]*=n;
        }
    }
    bool movexia()
    {
        for(int i=0;i<default_x;i++)
        {
            if(bianhuaxia(i+1))
            {
                for(int j=i+1;j<default_x;j++)
                {
                        add(i,(-1)*xishu[j][i]/xishu[i][i],j);
                }
            }
            else
            {
                cout<<"无解"<<endl;
                return false;
            }
        }
        return true;
    }
    void moveshang()
    {
        if(movexia())
        {
            for(int i=default_x-1;i>=0;i--)
            {
                if(xishu[i][i]!=1)
                    mul(i,1/xishu[i][i]);
                for(int j=i-1;j>=0;j--)
                {
                    add(i,(-1)*xishu[j][i]/xishu[i][i],j);
                }
            }
        }
    }
};
int main()
{
    cout<<"请输入方程组阶数:"<<endl;
    int x;
    cin>>x;
    if(x>0)
    {
    fangcheng a;
    a.output();
    a.moveshang();
    a.output();
    }
    else
    {
        cout<<"方程组个数少于一个"<<endl;
    }
    cout<<endl<<endl<<"输入BYE关闭程序"<<endl;
    string s;
    cin>>s;
    while(s!="BYE")
    {
         cin>>s;
    }
         return 1;
}
搜索更多相关主题的帖子: 求解 方程 
2010-03-21 19:38
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
收藏
得分:4 
因为在类里面不能对变量进行初始化!

[ 本帖最后由 qlc00 于 2010-3-21 20:50 编辑 ]

Anything is possible!
2010-03-21 20:13
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1484
专家分:9058
注 册:2010-3-16
收藏
得分:4 
在构造里初始化。
2010-03-22 00:40
月光321
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:124
注 册:2010-3-22
收藏
得分:4 
在构造中不能初始化
2010-03-22 17:10
观星
Rank: 2
等 级:论坛游民
帖 子:77
专家分:45
注 册:2008-5-1
收藏
得分:0 
可是去掉了初始化还是不好使啊?这是为什么呢?
以下是引用qlc00在2010-3-21 20:13:52的发言:

因为在类里面不能对变量进行初始化!
2010-03-24 08:00
观星
Rank: 2
等 级:论坛游民
帖 子:77
专家分:45
注 册:2008-5-1
收藏
得分:0 
这样就是好使的

#include<iostream>
using namespace std;
#define default_x 3
class fangcheng
{
  //    public:int default_x;
//这句为什么不对啊,放在开头用 define就好使呢
    private:
        double xishu[default_x][default_x+1];
    public: fangcheng()
    {
    }
    void setxishu()
    {
        for(int i=0;i<default_x;i++)
        {
            cout<<"请输入第 "<<(i+1)<<" 个方程的系数:"<<endl;
            for(int j=0;j<default_x+1;j++)
                cin>>xishu[i][j];
        }
    }
    void jiaohuan(int x,int y)
    {
        double r;
        for(int i=0;i<default_x+1;i++)
        {
            r=xishu[x][i];
            xishu[x][i]=xishu[y][i];
            xishu[y][i]=r;
        }
    }
    void output()
    {
         int i;
         cout<<endl<<"方程组:"<<endl;
        for(i=0;i<default_x;i++)
        {
            cout<<endl<<"第 "<<(i+1)<<" 个方程:";
            for(int j=0;j<default_x+1;j++)
                cout<<xishu[i][j]<<" ";
        }
        cout<<endl;
    }
    bool bianhuaxia(int x)
    {
        int i;
    //    cout<<"变化 第"<<x<<" 列"<<endl;
        if(x<=default_x)
        {
            for(i=x-1;i<default_x;i++)
            {
     //                         cout<<"i="<<i<<endl;
                if(!(xishu[i][x-1]>-1e-6&&xishu[i][x-1]<1e-6))
                {
     //               cout<<"xishu["<<i<<"]["<<(x-1)<<"] = "<<xishu[i][x-1]<<endl;
                    if((i>x-1)&&(i<default_x))
                    {
     //                   cout<<"交换 "<<x-1<<","<<i<<endl;
                        jiaohuan(x-1,i);
                    }
                    return true;
                }
            }
            return false;
        }
        else
        {
            cout<<"\nError: bianhuaxia :x-->"<<x<<endl;
            return false;
        }
    }
    void add(int x1,double n,int x2)
    {
        for(int i=0;i<default_x+1;i++)
        {
            xishu[x2][i]+=xishu[x1][i]*n;
        }
    }
    void mul(int x,double n)
    {
        for(int i=0;i<default_x+1;i++)
        {
            xishu[x][i]*=n;
        }
    }
    bool movexia()
    {
        for(int i=0;i<default_x;i++)
        {
            if(bianhuaxia(i+1))
            {
                for(int j=i+1;j<default_x;j++)
                {
                        add(i,(-1)*xishu[j][i]/xishu[i][i],j);
                }
            }
            else
            {
                cout<<"无解"<<endl;
                return false;
            }
        }
        return true;
    }
    void moveshang()
    {
        if(movexia())
        {
            for(int i=default_x-1;i>=0;i--)
            {
                if(xishu[i][i]!=1)
                    mul(i,1/xishu[i][i]);
                for(int j=i-1;j>=0;j--)
                {
                    add(i,(-1)*xishu[j][i]/xishu[i][i],j);
                }
            }
        }
    }
};
int main()
{
    cout<<"10元1次方程组:"<<endl;
    cout<<"a b c d e f g h i j = k"<<endl;
    string s;
    fangcheng a;
    do
    {
    a.setxishu();
    a.output();
    a.moveshang();
    a.output();
    cout<<endl<<endl<<"输入BYE关闭程序"<<endl;
    cin>>s;
    }while(s!="BYE");
    return 0;
}

怎么改default_x成 变量的形式呢?
2010-03-26 14:49
james230932
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:162
专家分:629
注 册:2008-1-20
收藏
得分:4 
你定义的是变量吧。。又不是外部接口。能放在public里面初始化么?放在private吧。然后在构造函数里初始化试试..

老天给了我十根纤纤玉指,我却用它们来挖鼻屎。
2010-03-26 15:48
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
收藏
得分:4 
是这样的,你应该把你的程序中出现问题的地方和问题种类写出来。不要把一大堆代码给人看,
方便别人就是方便自己嘛!
2010-03-27 20:06
观星
Rank: 2
等 级:论坛游民
帖 子:77
专家分:45
注 册:2008-5-1
收藏
得分:0 
问题的地方我表明了,就是红色的那句,把 default_x 变量 改成 #define 定义的常量就好使,这个我也不知道怎么分类?
2010-03-29 08:42
快速回复:初学者做的求解方程组,有奇怪的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049647 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved