Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で2つの時刻の差を計算するプログラム

本記事では、開始時刻と終了時刻を「時・分・秒」の形式で入力し、両者の差を計算するC言語のプログラムを解説します。

時刻の差を求めるロジック

開始時刻と終了時刻の差を求める際の基本的な考え方は以下の通りです。秒や分の引き算で桁が不足する場合は、上位の単位から1を借りて60を加えることで、各単位ごとに正しく差を計算できます。

while (stop.sec > start.sec){
   --start.min;
   start.sec += 60;
}
diff->sec = start.sec - stop.sec;
while (stop.min > start.min) {
   --start.hrs;
   start.min += 60;
}
diff->min = start.min - stop.min;
diff->hrs = start.hrs - stop.hrs;

サンプルプログラム

以下は、構造体とポインタを使用して、開始時刻と終了時刻の差を求める完全なC言語プログラムです。

#include <stdio.h>
struct time {
   int sec;
   int min;
   int hrs;
};
void diff_between_time(struct time t1,
struct time t2,
struct time *diff);
int main(){
   struct time start_time, stop_time, diff;
   printf("Enter start time. \n");
   printf("Enter hours, minutes and seconds: ");
   scanf("%d %d %d", &start_time.hrs,
   &start_time.min,
   &start_time.sec);
   printf("Enter the stop time. \n");
   printf("Enter hours, minutes and seconds: ");
   scanf("%d %d %d", &stop_time.hrs,
   &stop_time.min,
   &stop_time.sec);
   // Difference between start and stop time
   diff_between_time(start_time, stop_time, &diff);
   printf("\ntime Diff: %d:%d:%d - ", start_time.hrs,
   start_time.min,
   start_time.sec);
   printf("%d:%d:%d ", stop_time.hrs,
   stop_time.min,
   stop_time.sec);
   printf("= %d:%d:%d\n", diff.hrs,
   diff.min,
   diff.sec);
   return 0;
}
// Computes difference between time periods
void diff_between_time(struct time start,
struct time stop,
struct time *diff){
   while (stop.sec > start.sec) {
      --start.min;
      start.sec += 60;
   }
   diff->sec = start.sec - stop.sec;
   while (stop.min > start.min) {
      --start.hrs;
      start.min += 60;
   }
   diff->min = start.min - stop.min;
   diff->hrs = start.hrs - stop.hrs;
}

実行結果

上記のプログラムをコンパイルして実行すると、以下のような出力が得られます。

Enter start time.
Enter hours, minutes and seconds: 12 45 57
Enter the stop time.
Enter hours, minutes and seconds: 20 35 20
time Diff: 12:45:57 - 20:35:20 = -8:10:37

補足:結果が負になるケースについて

このプログラムでは、開始時刻よりも終了時刻の方が後の場合、差は負の値として表示されます。上記の例では「-8:10:37」と出力されていますが、これは実際の経過時間である「7時間49分23秒」に相当します。正の経過時間として表示したい場合は、関数呼び出し時に開始時刻と終了時刻を入れ替えて渡すか、計算後に絶対値を取るようにプログラムを修正してください。

  1. C++で2つの同心円の間の面積を計算する方法を解説

    同心円とは?同心円とは、2つの円が共通の中心を共有しながら、半径の長さが異なる(r1 と r2、ただし r2 > r1)形状のことです。円の中に別の円が含まれているイメージで、2つの同心円の間の領域は「環(アニュラス)」と呼ばれます。以下は同心円の図です。問題半径の長さが異なる2つの同心円(r1 と r2、ただし r2 > r1)が与えられたとします。課題は、青色で強調表示された2つの円の間の面積を求めることです。2つの円の間の面積を計算するには、大きい円の面積から小さい円の面積を差し引きます。大きい円の半径を r2、小さい円の半径を r1 とすると、求める面積は次のようになります。入出力例入

  2. Excelで2つの数値の差の割合(増減率)を計算する方法

    2つの数値の差をパーセンテージで把握したいときに役立つのが「パーセント変化(増減率)」の計算です。Microsoft Excelは、こうした計算を簡単に行える強力なツールです。この記事では、Excelで2つの数値の差の割合を求める方法をわかりやすく解説します。 Excelで2つの数値の増減率を計算する手順 パーセント変化は、時間の経過とともに測定されるあらゆる数量に応用できる概念です。一定期間における変化の度合いを表すシンプルな数学的手法であり、基本の数式さえ覚えれば、誰でも簡単に計算できます。 手順1:値を入力する パーセント変化は、次の式で定義されます。 変化率 =(新しい値 − 元の値)