24小时热门版块排行榜    

查看: 1456  |  回复: 8
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

zyj8119

木虫 (著名写手)

[交流] 【求助】为什么我编译了一个书本上的无错误的C++程序,却有这么多的错误?

CODE:
#include
#include
#include
using namespace std;
class bint
{
private:
        int n;
        double **a,*b,*x,eps;
        double **p,*r,*e;
public:
        bint(int nn)
        {
                int i;
                n=nn;
                a=new double*[n];
                for(i=0;i                 p=new double*[n];
                for(i=0;i                 r=new double[n];
                e=new double[n];
                b=new double[n];
                x=new double[n];
        }
        void input();
        void a_bint();
        void gauss();
        void output();
        bint()
        {
                int i;
                for(i=0;i                 delete[] a;
                for(i=0;i                 delete[] p;
                delete[] r,e,b,x;
        }
};

void bint::input()
{
        int i,j;
        char str1[20];
        cout<<"\n输入文件名:";
        cin>>str1;
        ifstream fin(str1);
        if(!fin)
        {cout<<"\n不能打开这个文件"<         for(i=0;i                 for(j=0;j>a[i][j];
                for(i=0;i>b[i];
                fin.close();
}

void bint::a_bint()
{
        int i,j,k;
        double q,qq;
        i=100;
        for(k=0;k<=n-1;k++)
                for(j=0;j<=n-1;j++)p[k][j]=a[k][j];
                for(k=0;k<=n-1;k++)r[k]=b[k];
                gauss();
                for(k=0;k                 q=1.0+eps;
                while(q>=eps)
                {
                        if(i==0)return;
                        i=i-1;
                        for(k=0;k                         {
                                e[k]=0.0;
                                for(j=0;j                                         e[k]=e[k]+a[k][j]*x[j];
                        }
                        for(k=0;k<=n-1;k++)r[k]=b[k]-e[k];
                                for(k=0;k<=n-1;k++)
                                        for(j=0;j<=n-1;j++)p[k][j]=a[k][j];
                                        gauss();
                                        q=0.0;
                                        for(k=0;k<=n-1;k++)
                                        {
                                                qq=fabs(r[k])/(1.0+fabs(x[k]+r[k]));
                                                if(qq>q)q=qq;
                                        }
                                        for(k=0;k<=n-1;k++)x[k]=x[k]+r[k];
                }
}
void bint::gauss()
{
        int *js,l,k,i,j,is;
        double d,t;
        js=new int[n];
        l=1;
        for(k=0;k<=n-2;k++)
        {
                d=0.0;
                for(i=k;i<=n-1;i++)
                        for(j=k;j<=n-1;j++)
                        {
                                t=fabs(p[i][j]);
                                if(t>d){d=t;js[k]=j;is=i;}
                        }
                        if(d+1.0==1.0)l=0;
                        else
                        {if(js[k]!=k)
                        for(i=0;i<=n-1;i++)
                        {
                                t=p[i][k];
                                p[i][k]=p[i][js[k]];
                                p[i][js[k]]=t;
                        }
                        if(is!=k)
                        {
                                for(j=k;j<=n-1;j++)
                                {
                                        t=p[k][j];
                                        p[k][j]=p[is][j];
                                        p[is][j]=t;
                                }
                                    t=r[k];r[k]=r[is];r[is]=t;
                        }
                }
                        if(l==0)
                        {
                                delete[] js;
                                cout<<"\n系数矩阵奇异!无解."<                                 return;
                        }
                        d=p[k][k];
                        for(j=k+1;j<=n-1;j++)
                                p[k][j]=p[k][j]/d;
                        r[k]=r[k]/d;
                        for(i=k+1;i<=n-1;i++)
                                p[i][j]=p[i][j]-p[i][k]*p[k][j];
                        r[i]=r[i]-p[i][k]*r[k];
        }
}
            d=p[n-1][n-1];
            if(fabs(d)+1.0==1.0)
                        {
                delete[] js;
                                cout<<"\n系数矩阵奇异!无解."<                             return;
                        }
            r[n-1]=r[n-1]/d;
            for(i=n-2;i>=0;i--)
                        {
                t=0.0;
                for(j=i+1;j<=n-1;j++)
                       t=t+p[i][j]*r[j];
                  r[i]=r[i]-t;
                        }
            js[n-1]=n-1;
          for(k=n-1;k>=0;k--)
          if(js[k]!=k)
                  {
               t=r[k];r[k]=r[js[k]];r[js[k]]=t;
                  }
       delete[] js;
    }

void bint::output()
{
        int i;
        char str2[20];
        cout<<"\n输出文件名:";
        cin>>str2;
        ofstream fout(str2);
        if(!fout)
        {cout<<"\n不能打开这个文件"<         fout<         for(i=0;i         {
                fout<                         cout<         }
        fout<         fout.close();
}

void main()
{
        bint c(4);
        c.input();
        c.a_bint();
        c.output();
}

[ Last edited by zyj8119 on 2010-10-12 at 01:57 ]
回复此楼
好好学习,天天向上。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ajian04

禁虫 (正式写手)

zyj8119(金币+3):大括号的位置有要求吧? 2010-10-12 10:03:41
是你直接抄写的吗?遗漏了很多符号,还有可能是你的编译环境不对,好好看看书上介绍的运行环境吧
4楼2010-10-12 08:15:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ajian04

禁虫 (正式写手)


zyj8119(金币+2):可能我有些是中文情况下输入的。 2010-10-12 10:57:59
余泽成(金币+1):谢谢参与应助! 2010-10-12 17:44:04
引用回帖:
Originally posted by zyj8119 at 2010-10-12 10:01:17:

是直接抄写的,是不是大括号的位置也是有要求的?????

位置应该没有要求,只是不要在中文输入法状态下输入就行了
9楼2010-10-12 10:09:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zyj8119 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见