#include <stdio.h>
int main(void){
double
rhofilm = 950000,
tfilm = 0.00000022,
wfilm = 1,
lfilm = 1,
rhohe = 178.6,
rhoair = 1293,
v = 0,
g = 9.86,
mdrone = 32,
mhe,
mfilm,
m,
mair,
fb,
fhe,
vbag,
the;
int i;
for(i=0;i<=2;i++){
wfilm += 0.1;
lfilm += 0.1;
while(1){
mhe = rhohe*v;
mfilm = rhofilm*tfilm*wfilm*lfilm;
m = mhe + 2*mfilm + mdrone*4;
mair = rhoair*v;
fb = rhoair*v*g;
fhe = fb - m*g;
if(fhe >= 0){
break;
}else{
v = v+0.001;
}
}
printf("v = %fm^3\n",v);
while(1){
vbag = the*wfilm*lfilm;
if(vbag >= v){
break;
}else{
the = the + 0.001;
}
}
printf("the = %fcm\n",the*100);
}
return 0;
}
結果が
v = 0.116000m^3
the = 9.600000cm
v = 0.116000m^3
the = 9.600000cm
v = 0.116000m^3
the = 9.600000cm
になってしまいます
結果の予想は
v = 0.116000m^3
the = 9.600000cm
v = 0.116000m^3
the = 8.100000cm
v = 0.116000m^3
the = 6.900000cm
です。
つまり、wfilmとlfilmの値をfor文で更新しているにも関わらず,while文の中身に反映されていないということです。
本当はfor文の部分も無限ループで書いて,
#include <stdio.h>
int main(void){
double
rhofilm = 950000,
tfilm = 0.00000022,
wfilm = 1,
lfilm = 1,
rhohe = 178.6,
rhoair = 1293,
v = 0,
g = 9.86,
mdrone = 32,
mhe,
mfilm,
m,
mair,
fb,
fhe,
vbag,
the;
int i;
while(1){
while(1){
mhe = rhohe*v;
mfilm = rhofilm*tfilm*wfilm*lfilm;
m = mhe + 2*mfilm + mdrone*4;
mair = rhoair*v;
fb = rhoair*v*g;
fhe = fb - m*g;
if(fhe >= 0){
break;
}else{
v = v+0.001;
}
}
printf("v = %fm^3\n",v);
while(1){
vbag = the*wfilm*lfilm;
if(vbag >= v){
break;
}else{
the = the + 0.001;
}
}
printf("the = %fcm\n",the*100);
if(the*100 <= 4){
break;
}else{
wfilm += 0.1;
lfilm +=0.1;
}
}
return 0;
}
おそらくこれも,加算が子のwhile文に反映されていないからだと思います.
どこを直したらよいのか,ご教授ください.