vb派对吧 关注:81贴子:4,987
  • 6回复贴,共1

求高手帮我把VC的程序代码转变成VB的,只有两百来行,很简单的程序!

收藏回复

麻烦发到我的邮箱cqwangyucheng@126.com   谢谢了!!
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define N 20    //最大允许超静定次数
float A[N][N+1], qw;
int flag,n;          //全局过渡变量
float max(int k);
float dietxixj(float xi,float xj,float EI)                  //计算系数
{    
     if(xi<=xj)                                     //分情况用叠加法求挠曲线方程
     {
          return ((-1)*xi*xi*(3*xj-xi)/6/EI);
     }
     else
     {    
         return ((-1)*xj*xj*(3*xi-xj)/6/EI);
     }
}
void exchange(int r,int k)                    //交换r行和k行的系数
{
    int i;                                    
    for(i=1;i<=n+1;i++)
        A[0][i]=A[r][i];
    for(i=1;i<=n+1;i++)
        A[r][i]=A[k][i];
    for(i=1;i<=n+1;i++)
        A[k][i]=A[0][i];
}
          
float max(int k)            //比校系数大小的函数
{
    int i;
    float temp=0;
    for(i=k;i<=n;i++)
       if(fabs(A[i][k])>temp)
       {
             temp=(float)(fabs(A[i][k]));         //找到列中不为0的一行
             flag=i;                                 //用全局变量flag 得到所在行数
       }
    return temp;    
}
         
void main ()
{
    float y[N];            //用以存放方程的解



1楼2011-06-11 10:54回复
        float   L;            //悬臂梁的长度
        float EI;            //抗弯刚度
        float   a;            //力的作用位置
        float   F;            //力的大小
        int k,i,j,n,qm,qn;//用以操作的过渡量
      
        float x[N];
         cout<<"\t************************************************************\n";
         cout<<"\t************************************************************\n";
         cout<<"\t******                                                 ******\n";
         cout<<"\t******   欢迎使用本程序求解一端固定梁的N次超静定问题    ******\n";
         cout<<"\t******                                                 ******\n";
         cout<<"\t************************************************************\n";
         cout<<"\t************************************************************\n";
         cout<<endl;
         cout<<endl;
         cout<<"~~~~~~~~~~~~~~~~尊敬的用户:本程序的默认的最大超静定次数为25次~~~~~~~~~~~~~~~~~~"<<endl<<
               "~~~~~~~~~~~~~~~~~~~若超过25次,有需要请自行修改源代码的N值~~~~~~~~~~~~~~~~~~~~~~"<<endl<<endl;
       
       
       
         cout<<"\t请输入悬臂梁的长度L:";
         cin>>L;
         while(cin.fail()||L<0||L==0)
         {
             cin.clear();
             cin.ignore();
             cout<<endl;
             cout<<"\t输入格式或范围有误,请从新输入:";             //输入格式错误,从新输入
             cin>>L;   
         }
         cout<<endl;
    


    2楼2011-06-11 10:54
    回复
           cout<<"\t请输入抗弯刚度EI(单位/N*m^2 ):";
           cin>>EI;
           while(cin.fail()||EI<0||EI==0)
           {
               cin.clear();
               cin.ignore();
               cout<<endl;
               cout<<"\t输入格式或范围有误,请从新输入:";             //输入格式错误,从新输入
               cin>>EI;
           }
           cout<<endl;
           cout<<"\t请输入力的大小F(单位为牛):";
           cin>>F;
           while(cin.fail())
           {
               cin.clear();
               cin.ignore();
               cout<<endl;
               cout<<"\t输入格式或范围有误,请从新输入:";             //输入格式错误,从新输入
               cin>>F;
           }
           cout<<endl;
           cout<<"\t请输入力F的作用位置a(单位为m):";
           cin>>a;
           while(cin.fail()||a<0||a==0||a>L)
           {
               cin.clear();
               cin.ignore();
               cout<<endl;
               cout<<"\t输入格式或范围有误,请从新输入:";             //输入格式错误,从新输入
               cin>>a;
           }
           cout<<endl;
           cout<<"\t请输入所求悬臂梁的超静定次数n:";
           cin>>n;
           while(cin.fail()||n<0||n>20)
           {
               cin.clear();
               cin.ignore();
               cout<<endl;
               cout<<"\t输入格式或范围有误,请从新输入:";             //输入格式错误,从新输入
               cin>>n;
           }
           cout<<endl;
           cout<<"\t<请分别输入n次超静定点的位置坐标(单位m,注意要大于力F的位置坐"<<endl;
      


      3楼2011-06-11 10:54
      回复
             cout<<"\t标a,小于等于梁的长度L)>";
             cout<<endl;
             cout<<endl;
             for( i=1 ; i<=n; i++)
             {      
                 cout<<"\t请输入第"<<i<<"个超静定点的位置坐标:";
                 cin>>x[i];
                 while(cin.fail()||x[i]<a||x[i]==a||x[i]>L)
                 {
                      cin.clear();
                     cin.ignore();
                     cout<<endl;
                     cout<<"\t输入格式有误,请从新输入:";             //输入格式错误,从新输入
                     cin>>x[i];
                 }
                 cout<<endl;
             }
            float A[N][N+1];                                         //用以存放线性方程组系数 完成操作
           
             {
             for(qm=1;qm<=n;qm++)
             {
                  for(qn=1;qn<=n;qn++)
                  {
                     A[qm][qn]=dietxixj(x[qm],x[qn],EI);             //算行列式系数 并放入A[N][N+1] 前n行n列
                    
                 }
             }
             for(qm=1;qm<=n;qm++)
             {
                 A[qm][n+1]=(-1)*F*a*a*(3*x[qm]-a)/6/EI;             //第n+1列的系数
                          
             }
             }
             for(k=1;k<=n-1;k++)                         //将现象方程组矩阵对角化                     
        


        4楼2011-06-11 10:54
        回复
               {
                   qw=max(k);                      //找到一个k列中不等于0 的行
              
                   if(flag!=k)
                        exchange(flag,k);              //交换前述已知行与k行系数
                   for(i=k+1;i<=n;i++)                     //列主消元法
                       for(j=k+1;j<=n+1;j++)
                            A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
               }
              y[n]=A[n][n+1]/A[n][n];                      //解出Xn 并作为倒推方程解得启动项
              for( k=n-1;k>=1;k--)                         //根据列主消元法解的形式 完成所有的解
              {
                float zx=0;
                for(j=k+1;j<=n;j++)
                {
                  zx=zx+A[k][j]*y[j];
                }
                y[k]=(A[k][n+1]-zx)/A[k][k];
              }
              for(i=1;i<=n;i++)
              {
                cout<<endl;
                cout<<"\tx"<<i<<"="<<y[i];
              }
               cout<<endl;
               cout<<"\n"<<"==============================欢迎您下次再次使用==============================="<<endl;
               cout<<endl;
               char t;                                         //判断是否退出
               cout<<"\t是否退出程序(y是/n否)";
               cin>>t;
               while(t!='y'&&t!='n')
               {
                   cout<<"\t输入有误,请重新输入:";
                   cin>>t;
               }
               if(t=='n')
               {
                   system("cls");
                   main();
               }
          }
             
             
          


          5楼2011-06-11 10:54
          回复
            同志,你进错吧了,这儿似乎不是编程吧


            6楼2011-07-29 18:24
            回复
              估计只有Sb才会帮你翻译


              7楼2011-08-03 10:47
              回复