C言語に関する質問
初期位置を1mとして、ある物体の自由落下をシミュレートするプログラムを
「高さ=1-1/2×重力加速度×経過時間の二乗」
という考え方を
「初期位置を1m,落下速度を「重力加速度×1ループにかかる時間」とし,
高さを,「1ループ前の高さ」+「落下速度×1ループにかかる時間」」という考え方に変更して計算するようなプログラムにしたいのですが、どのように変えれば分かりません。(というか意味が分からないです)
何か公式などのヒントやソースコードより、どの部分をこのように変えれば良いという指摘があれば分かりやすく教えてください。
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#include <conio.h>
#pragma comment(lib, "winmm.lib")
int main(void)
{
int command;//キーボード入力の文字判別用変数
int quit_flag = 1;//プログラム終了フラグ 0で停止
int c_flag = 0;//カウント状態取得用フラグ 1:カウント中,0:停止中
int h,m,s,ms;//左から,時間,分,秒,ミリ秒
double y=1;
DWORD start;
printf("使い方:小文字の's'でカウントスタート.カウント中,小文字の's'で停止.次の's'でまた0からスタート\n");
printf("使い方:どんな状態でも小文字の'r'でカウントリセットして停止\n");
printf("使い方:qでプログラム終了\n\n");
h=m=s=ms=0;
while(quit_flag != 0)//quit_flagが0以外ならループ
{
while(!_kbhit())//何かキーが押されるまでループ
{
if(c_flag != 0)//c_flagが0以外であればカウント中ということ.
{
h=m=s=ms = timeGetTime() - start;
y=1-(1.0/2.0)*(9.8/1000000)*ms*ms;
printf("t=%d[ms],y=%f[m]\r",ms,y);
//printf("t=%02d:%02d:%02d:%03d,y=%f[m]\r",h/3600000,(m/60000)%60,(s/1000)%60,ms%1000,y);
}
//printf("%02d:%02d:%02d:%03d\r",h/3600000,(m/60000)%60,(s/1000)%60,ms%1000);
if(c_flag==0){
printf("t=%d[ms],y=%f[m]\r",ms,y);
//printf("t=%02d:%02d:%02d:%03d,y=%f[m]\r",h/3600000,(m/60000)%60,(s/1000)%60,ms%1000,y);
}
}
command=_getch();//ループを抜けるために押されたキーの内容をcommandに代入.
if(command=='s' && c_flag == 0)
{
printf("\n計測開始\n");
c_flag = 1;
start = timeGetTime() ;
h=m=s=ms=0;
/*
if(y==0){
printf("\n終了\n");
quit_flag = 0;
}
*/
}
else if(command=='s')
{
printf("\n計測中止\n");
c_flag = 0;
}
else if(command=='r')
{
printf("\nカウンタリセット,停止\n");
c_flag = 0;
h=m=s=ms=0;
}
else if(command=='q')
{
printf("\n終了\n");
quit_flag = 0;
}
}
return 0;
}
お礼
お返事が遅くなって大変申し訳ありません。 大変参考になりました。 ありがとうございます。 今後もしまた不明な点がありましたらまた よろしくお願いします。