⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beam_1.c

📁 这里是有关材料力学的工程分析软件,是学习工程力学的学生的一个不可少的工具,欢迎大家的进入
💻 C
字号:


#include "stdio.h"
#include "graphics.h"
#include "math.h"
static int type,n,nme,np,nqe,nsect;
static float l1,l,l2,h,e;
static float me[6][2],p[6][2],qe[6][5],sect[11][7];
static float m[201],q[201],st[402];
static float iz[201],w1[201],w2[201],y[201],dy[201];

main()
{int k,driver,mode,clr,sw;
 void input();
 void nod_frc();
 void nod_geom();
 void print_max();
 void nod_st();
 void nod_displ();
 void curve();
 char *str;
 input();
 printf("what do you comput ?\n");
 printf("1 ----- inter force\n");
 printf("2 ----- inter force and stresses\n") ;
 printf("3 ----- inter force and stresses and deformation\n");
 printf(" sw=?\t");
 scanf("%d",&sw);
 driver=DETECT;
 mode=0;
 initgraph(&driver,&mode,"");
 nod_frc();
 str="Q"; clr=10;
 curve(40,60,q,str,n,clr); print_max(40,60,q,str,n);
 str="M"; clr=10;
 curve(40,140,m,str,n,clr); print_max(40,140,m,str,n);
 if(sw>1)
   {nod_geom(); nod_st();
    str="st"; clr=10;
    curve(40,220,st,str,n,clr);
    str="st"; clr=5;
    curve(40,220,st+n+1,str,n,clr); print_max(40,220,st,str,2*n+1); }
 if(sw==3)
   {nod_displ();
    str="y";
    curve(40,300,y,str,n); print_max(40,300,y,str,n);
    str="dy";
    print_max(40,339,dy,str,n);}
 gotoxy(1,25);
}

void input()
{int k;
 printf("\n\tinput data please !\n\n ");
 printf("type\tL1\tL\tL2\tE\n");
 scanf("%d%f%f%f%f",&type,&l1,&l,&l2,&e);
 printf("\nnsect\tn\n");
 scanf("%d%d",&nsect,&n);
 printf("\n\t\t\t     1\tD\td\t0\n");
 printf("sect\tx1\tx2   shape=or2\th\tb\t0\n");
 printf("\t\t\t   or3\tIz\tW1\tW2\n\n");
 for(k=1;k<=nsect;k++)
    {printf("%d\t",k);
     scanf("%f%f%f%f%f%f",&sect[k][1],&sect[k][2],&sect[k][3],
	    &sect[k][4],&sect[k][5],&sect[k][6]);
    }
 printf("nme\tnp\tnqe\n");
 scanf("%d%d%d",&nme,&np,&nqe);
 h=(l1+l+l2)/n;
 if(nme>0)
   {printf("NO.\tme\tx\n");
    for(k=1;k<=nme;k++)
       {printf("%d\t",k);
	scanf("%f%f",&me[k][1],&me[k][2]); }
   }
 if(np>0)
   {printf("NO.\tp\tx\n");
    for(k=1;k<=np;k++)
       {printf("%d\t",k);
	scanf("%f%f",&p[k][1],&p[k][2]);  }
   }
 if(nqe>0)
   {printf("NO.\tq1\tq2\tx1\tx2\n");
    for(k=1;k<=nqe;k++)
       {printf("%d\t",k);
	scanf("%f%f%f%f",&qe[k][1],&qe[k][2],&qe[k][3],&qe[k][4]);}
   }

}

void  frc1(x,p_qx,p_mx)
float x,*p_qx,*p_mx;
{int k;
 float a,b,ma;
 *p_qx=0;*p_mx=0;
 for(k=1;k<=nme;k++)
    {if(type==1)
       {ma=me[k][1];*p_mx=*p_mx+ma;}
     else
       {a=me[k][1]/l;b=-a;
	if(x>l1)
	  {*p_qx=*p_qx+a;*p_mx=*p_mx+a*(x-l1);}
	if(x>l1+l)
	  {*p_qx=*p_qx+b;*p_mx=*p_mx+b*(x-l1-l);}
       }
     if(x>me[k][2]) *p_mx=*p_mx-me[k][1];
    }
}

void frc2(x,p_qx,p_mx)
float x,*p_qx,*p_mx;
{int k;
 float a,b,ma;
 *p_qx=0;*p_mx=0;
 for(k=1;k<=np;k++)
    {if(type==1)
	{a=-p[k][1];ma=p[k][1]*p[k][2];
	 *p_qx=*p_qx+a;*p_mx=*p_mx+ma+a*x;}
     else
       {b=-p[k][1]*(p[k][2]-l1)/l;a=-b-p[k][1];
	if(x>l1)
	  {*p_qx=*p_qx+a;*p_mx=*p_mx+a*(x-l1);}
	if(x>l1+l)
	  {*p_qx=*p_qx+b;*p_mx=*p_mx+b*(x-l1-l);}
       }
     if(x>p[k][2])
       {*p_qx=*p_qx+p[k][1]; *p_mx=*p_mx+p[k][1]*(x-p[k][2]); }
    }
}

void frc3(x,p_qx,p_mx)
float x,*p_qx,*p_mx;
{int k;
 float a,b,ma,dx,xx,dq,r1,r2;
 *p_qx=0;*p_mx=0;
 for(k=1;k<=nqe;k++)
    {dq=qe[k][2]-qe[k][1];dx=qe[k][4]-qe[k][3];
     r1=qe[k][1]*dx; r2=dq*dx/2;
     if(type==1)
       {a=-r1-r2; ma=r1*(qe[k][3]+qe[k][4])/2+r2*(qe[k][3]+2*dx/3);
	 *p_qx=*p_qx+a;*p_mx=*p_mx+ma+a*x;}
     else
       {b=-(r1*(qe[k][3]+dx/2-l1)+r2*(qe[k][3]+2*dx/3-l1))/l;
	a=-b-r1-r2;
	if(x>l1)
	  {*p_qx=*p_qx+a;*p_mx=*p_mx+a*(x-l1);}
	if(x>l1+l)
	  {*p_qx=*p_qx+b;*p_mx=*p_mx+b*(x-l1-l);}
       }
     if(x>qe[k][3])
       {xx=x-qe[k][3];r1=qe[k][1]*xx;r2=.5*dq*xx*xx/dx;
	*p_qx=*p_qx+r1+r2;*p_mx=*p_mx+(.5*r1+r2/3)*xx;  }
     if(x>qe[k][4])
       {xx=x-qe[k][4];r1=qe[k][2]*xx;r2=.5*dq*xx*xx/dx;
	*p_qx=*p_qx-r1-r2;*p_mx=*p_mx-(.5*r1+r2/3)*xx; }
    }
}


void nod_frc()
 {int i;
  float x,qx,mx;
  for(i=0;i<=n;i++)
     {x=i*h;q[i]=0;m[i]=0;
      if(nme>0)
	{frc1(x,&qx,&mx);q[i]=q[i]+qx;m[i]=m[i]+mx;}
      if(np>0)
	{frc2(x,&qx,&mx);q[i]=q[i]+qx;m[i]=m[i]+mx;}
      if(nqe>0)
	{frc3(x,&qx,&mx);q[i]=q[i]+qx;m[i]=m[i]+mx;}
     }
 }


void nod_geom()
{int i;
 float x;
 void geom();
 for(i=0;i<=n;i++)
    {x=i*h;geom(x,iz+i,w1+i,w2+i);}
}

void nod_st()
{int i;
 for(i=0;i<=n;i++)
    {st[i]=-m[i]/w1[i]; st[n+i+1]=m[i]/w2[i]; }
}
void nod_displ()
{int i,ia,ib;
 float c,ya,yb,rot;
 c=h*h/e;
 y[0]=0;y[1]=.5*c*m[0]/iz[0];
 for(i=1;i<=n-1;i++)
    y[i+1]=c*m[i]/iz[i]+2*y[i]-y[i-1];
 if(type==2)
   {ia=floor(l1/h);ib=floor((l1+l)/h);
    ya=y[ia]+(y[ia+1]-y[ia])/h*(l1-ia*h);
    yb=y[ib]+(y[ib+1]-y[ib])/h*(l1+l-ib*h); rot=(yb-ya)/l;
    for(i=0;i<=n;i++)
       {y[i]=y[i]-ya-rot*(i*h-l1); }
   }
 c=.5/h;dy[0]=c*(-3*y[0]+4*y[1]-y[2]);
 for(i=1;i<=n-1;i++) dy[i]=c*(y[i+1]-y[i-1]);
 dy[n]=c*(y[n-2]-4*y[n-1]+3*y[n]);
}

void print_max(x0,y0,f,p_str,m)
int x0,y0,m;
float f[];
char *p_str;
{int i,x,y,i1,i2;
 float fmax,fmin,*p;
 p=f;
 fmax=*p;fmin=*p;i1=0;i2=0;
 for(i=1,p=p+1;i<=m;i++,p++)
   { if (*p>fmax) {fmax=*p;i1=i;}
     if (*p<fmin) {fmin=*p;i2=i;}
   }
 if (i1>n) i1=i1-n-1;
 if (i2>n) i2=i2-n-1;
 x=floor((x0+270)/8);y=floor(y0/17);
 gotoxy(x,y);printf("(%s)max=%11.4e",p_str,fmax);
 gotoxy(x+25,y);printf("x=%11.4e",i1*h);
 y=y+1;
 gotoxy(x,y);printf("(%s)min=%11.4e",p_str,fmin);
 gotoxy(x+25,y);printf("x=%11.4e",i2*h);
}

void curve(x0,y0,f,p_str,m,_clr)
int x0,y0,m,_clr;
float f[];
char *p_str;
{int i,x,y;
 float k1,k2,fmax,*p;
 fmax=0;
 for(i=0,p=f;i<=m;i++,p++)
    if(fabs(*p)>fmax) fmax=fabs(*p);
 k1=200/(l1+l+l2);
 if(!(fmax==0))
   k2=20/fmax;
 else
   k2=1;
 setcolor(14);
 line(x0,y0,x0+220,y0); outtextxy(x0+228,y0,"x");
 line(x0,y0+28,x0,y0-28); outtextxy(x0-16,y0-28,p_str);
 p=f;y=y0-floor(*p*k2);
 moveto(x0,y);  setcolor(_clr);
 for(i=1,p=p+1;i<=n;i++,p++)
    {x=x0+floor(i*h*k1);y=y0-floor(*p*k2);lineto(x,y);}
 setcolor(14);
}


void geom(x,p_ix,p_wx1,p_wx2)
float x,*p_ix,*p_wx1,*p_wx2;
{int k;
 float d1,d2,hx,bx;
 for(k=1;k<=nsect;k++)
    if(x>=sect[k][1] && x< sect[k][2])
      {if (sect[k][3]==1)
	  {d1=sect[k][4]; d2=sect[k][5];
	   *p_ix=3.1416*(pow(d1,4)-pow(d2,4))/64;
	   *p_wx1=*p_ix/d1*2;
	   *p_wx2=*p_wx1;
	  }
       else
	  if (sect[k][3]==2)
	     {hx=sect[k][4]; bx=sect[k][5];
	      *p_wx1=bx*hx*hx/6;
	      *p_wx2=*p_wx1 ;
	      *p_ix=*p_wx1*hx/2;
	     }
	   else
	     {*p_ix=sect[k][4];
	      *p_wx1=sect[k][5];
	      *p_wx2=sect[k][6];
	     }
       break;
      }
 if (fabs(x-l1-l-l2)<.5*h)
    if (sect[nsect][3]==1)
	 {d1=sect[nsect][4]; d2=sect[nsect][5];
	  *p_ix=3.1416*(pow(d1,4)-pow(d2,4))/64;
	  *p_wx1=*p_ix/d1*2;
	  *p_wx2=*p_wx1;
	  }
     else
	  if (sect[nsect][3]==2)
	     {hx=sect[nsect][4]; bx=sect[nsect][5];
	      *p_wx1=bx*hx*hx/6;
	      *p_wx2=*p_wx1;
	      *p_ix=*p_wx1*hx/2;
	     }
	   else
	     { *p_ix=sect[nsect][4];
	       *p_wx1=sect[nsect][5];
	       *p_wx2=sect[nsect][6];
	     }

}








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -