前回は、clock関数による処理時間の計測法をご紹介した。
この方法では、プログラム開始からの経過時間がclock_t型で表現できる値を超えてしまうと正しく計測できない。
今回は、time関数によって、得られる暦時刻を用いて処理時間を計測する方法をご紹介しよう。
0~99の整数を3つ加算する暗算に要する時間をtime_t型と同じ精度で計測するプログラムである。
なお、本プログラムは、
Windows 11 Home(23H2)上で、Visual Studio Code(1.93.1)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で コンパイルしている。
//暗算トレーニング(0~99の整数を3つ加算するのに要する時間を計測)
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a,b,c;
int x;
clock_t start,end; //開始時間、終了時間
srand(time(NULL)); //乱数の種を設定
a = rand() % 100; //0~99の乱数を生成
b = rand() % 100; //0~99の乱数を生成
c = rand() % 100; //0~99の乱数を生成
printf("%d + %d + %dはいくつですか:",a,b,c);
start = time(NULL); //計測開始
while (1)
{
scanf("%d",&x);
if(x == a + b + c)
break;
printf("違います!\n再入力してください。\n");
}
end = time(NULL); //計測終了
printf("%f.1秒かかりました。\n",difftime(end,start));
if(difftime(end,start) > 35.0)
printf("時間がかかりすぎです。\n");
else if (difftime(end,start) > 20.0)
printf("まあまあです。\n");
else
printf("早いです。\n");
return 0;
}
実行結果
55 + 86 + 7はいくつですか:148
13.000000.1秒かかりました。
早いです。
difftime関数は、2つの暦時刻の差を求める関数である。
(参考)新・明解C言語 中級編 柴田 望洋(著)
コメント