2013/12/26

慣性モーメントの計算してみた

 昨日作ったプログラムを手計算ZERO目指してあれこれ継ぎ足して下の表を片手に計算をやらせてみました。
 計算結果があってるかどうかは気にしないとして() ,いつもなら一部品計算して1時間の休憩をしてをやって最終的に「明日になったら頑張る」って投げ出していたところですが10分位でやりたい部分すべての計算を終わらせることができました!!計算があってればですけどね。
 まだおおまかな設計すら途中ですが・・・とりあえず頑張ります。
 絶対どこか計算間違えてる気がする。
 #include<stdio.h>
float chouhoukei(void);
float nagaibou(void);
float enban(void);
float enchuu(void);
float entou(void);
float kyuu(void);
float kyuukaku(void);
float sonota(void);
float situryou(void);
float a,b,l,r,m,j,d[3],ro[4]={2.7/1000000,7.9/1000000,1.19/1000000} ,v,tt;
int i,p,u;
void main(void)
{
int n,s;
float t,e,k,t0=0;
printf("任意の軸(機力の教科書p251の図参照)まわりの慣性モーメントJ[kgcm^2]\n");
i=1,u=0;
while(u!=5){
printf("部材を番号で選んでください\n0.アルミ,1.ステンレス,2.アクリル,3.その他(密度既知)\n4.その他(質量既知),5.終了\n");
scanf("%d",&u);
if(u!=5){
if(u==3){
printf("密度[kg/m^3]を入力してください\n");
scanf("%f",&ro[3]);
ro[3]=ro[3]/1000000000;
}
printf("部品%dの形を番号で選んでください.\n1.長方形板,2.長い棒,3.薄い円盤,4.円柱,5.円筒形\n6.球,7.球殻,8その他(慣性モーメント既知)\n",i);
scanf("%d",&n);
if(u==4){
printf("質量[g]を入力してください\n");
scanf("%f",&m);
m=m/1000;
}
if(n==8){
t=sonota();
}
if(n!=8){
printf("重心の回転軸からの距離[mm]を入力してください\n");
scanf("%f",&e);
if(n==1){
k=chouhoukei();
t=k+e*e*m;
printf("\n部品%dの質量=%f[kg]\n",i,m);
printf("部品%dのJ=%f[kgcm^2]\n\n",i,t/100);
}

if(n==2){
k=nagaibou();
t=k+e*e*m;
printf("\n部品%dの質量=%f[kg]\n",i,m);
printf("部品%dのJ=%f[kgcm^2]\n\n",i,t/100);
}

if(n==3){
k=enban();
t=k+e*e*m;
printf("\n部品%dの質量=%f[kg]\n",i,m);
printf("部品%dのJ=%f[kgcm^2]\n\n",i,t/100);
}

if(n==4){
k=enchuu();
t=k+e*e*m;
printf("\n部品%dの質量=%f[kg]\n",i,m);
printf("部品%dのJ=%f[kgcm^2]\n\n",i,t/100);
}

if(n==5){
k=entou();
t=k+e*e*m;
printf("\n部品%dの質量=%f[kg]\n",i,m);
printf("部品%dのJ=%f[kgcm^2]\n\n",i,t/100);
}

if(n==6){
k=kyuu();
t=k+e*e*m;
printf("\n部品%dの質量=%f[kg]\n",i,m);
printf("部品%dのJ=%f[kgcm^2]\n\n",i,t/100);
}

if(n==7){
k=kyuukaku();
t=k+e*e*m;
printf("\n部品%dの質量=%f[kg]\n",i,m);
printf("部品%dのJ=%f[kgcm^2]\n\n",i,t/100);
}
}
t0+=t/100;
i++;
}
}
printf("\n全体の慣性モーメント\nJ=%f[kgcm^2]",t0);
}

float chouhoukei(void){
printf("回転軸を選んでください\n0.x  1.y  2.z\n");
scanf("%d",&p);
printf("横の長さ[mm]を入力してください\n");
scanf("%f",&b);
printf("縦の長さ[mm]を入力してくだいさい\n");
scanf("%f",&a);
if(u!=4){
printf("厚さ[mm]を入力してください\n");
scanf("%f",&tt);
v=a*b*tt;
m=situryou();
}
d[0]=a*a*m/12;
d[1]=b*b*m/12;
d[2]=((a*a+b*b)*m)/12;
j=d[p];
return j;
}

float nagaibou(void){
printf("長さ[mm]を入力してください\n");
scanf("%f",&l);
if(u!=4){
printf("直径[mm]を入力してください\n");
scanf("%f",&tt);
v=(3.14*tt*tt/4)*l;
m=situryou();
}
j=m*l*l/12;
return j;
}

float enban(void){
printf("回転軸を選んでください\n0.x  1.y  2.z\n");
scanf("%d",&p);
printf("半径[mm]を入力してください\n");
scanf("%f",&r);
if(u!=4){
printf("厚さ[mm]を入力してください\n");
scanf("%f",&tt);
v=3.14*r*r*tt;
m=situryou();
}
d[0]=r*r*m/4;
d[1]=r*r*m/4;
d[2]=r*r*m/2;
j=d[p];
return j;
}

float enchuu(void){
printf("回転軸を選んでください\n0.x  1.y  2.z\n");
scanf("%d",&p);
printf("半径[mm]を入力してください\n");
scanf("%f",&r);
printf("長さ[mm]を入力してくだいさい\n");
scanf("%f",&l);
if(u!=4){
v=3.14*r*r*l;
m=situryou();
}
d[0]=(r*r/2+l*l/12)*m;
d[1]=(r*r/2+l*l/12)*m;
d[2]=r*r*m/2;
j=d[p];
return j;
}

float entou(void){
printf("回転軸を選んでください\n0.x  1.y  2.z\n");
scanf("%d",&p);
printf("半径[mm]を入力してください\n");
scanf("%f",&r);
if(u!=4){
printf("筒の厚さ[mm]を入力してください\n");
scanf("%f",&tt);
v=3.14*r*r*l-3.14*(r-tt)*(r-tt)*l;
m=situryou();
}
d[0]=(r*r/2+l*l/12)*m;
d[1]=(r*r/2+l*l/12)*m;
d[2]=r*r*m;
j=d[p];
return j;
}

float kyuu(void){
printf("半径[mm]を入力してください\n");
scanf("%f",&r);
if(u!=4){
v=4*3.14*r*r*r/3;
m=situryou();
}
j=2*m*r*r/5;
return j;
}

float kyuukaku(void){
printf("半径[mm]を入力してください\n");
scanf("%f",&r);
if(u!=4){
printf("核の厚さ[mm]を入力してください\n");
scanf("%f",&tt);
v=4*3.14*r*r*r/3-4*3.14*(r-tt)*(r-tt)*(r-tt)/3;
m=situryou();
}
j=2*r*r*m/3;
return j;
}

float sonota(void){
printf("\n部品%dの慣性モーメント[kgmm^2]を入力してください\n\n",i);
scanf("%f",&j);
return j;
}

float situryou(void){
if(u<=3){
m=ro[u]*v;
}
return m;
}



0 件のコメント:

コメントを投稿