C++で2つの時刻(時間・分・秒)の差を計算するプログラムの書き方
時間・分・秒の形式で与えられた2つの時刻(期間)があり、その差を求めたいという場面はよくあります。本記事では、C++を使って2つの時刻の差を正しく計算する方法を、サンプルコードとともにわかりやすく解説します。
例えば、次のような計算を行います。
時刻1 = 8:6:2 時刻2 = 3:9:3 時刻の差 = 4:56:59
一見単純な引き算に見えますが、秒や分がマイナスにならないよう「桁借り」の処理が必要になる点がポイントです。
C++プログラムの全体コード
2つの時刻の差を計算するプログラムは以下の通りです。
サンプルコード
#include <iostream>
using namespace std;
int main() {
int hour1, minute1, second1;
int hour2, minute2, second2;
int diff_hour, diff_minute, diff_second;
cout << "Enter time period 1" << endl;
cout << "Enter hours, minutes and seconds respectively: "<< endl;
cin >> hour1 >> minute1 >> second1;
cout << "Enter time period 2" << endl;
cout << "Enter hours, minutes and seconds respectively: "<< endl;
cin >> hour2 >> minute2 >> second2;
if(second2 > second1) {
minute1--;
second1 += 60;
}
diff_second = second1 - second2;
if(minute2 > minute1) {
hour1--;
minute1 += 60;
}
diff_minute = minute1 - minute2;
diff_hour = hour1 - hour2;
cout <<"Time Difference is "<< diff_hour <<":"<< diff_minute <<":"<<diff_second;
return 0;
}実行結果
上記のプログラムを実行すると、次のような出力が得られます。
Enter time period 1 Enter hours, minutes and seconds respectively: 7 6 2 Enter time period 2 Enter hours, minutes and seconds respectively: 5 4 3 Time Difference is 2:1:59
この例では、7時間6分2秒から5時間4分3秒を引いた結果として、「2時間1分59秒」が表示されています。
プログラムの解説
1. 時刻の入力を受け付ける
まず、ユーザーから2つの時刻をそれぞれ「時間・分・秒」の形式で入力してもらいます。該当するコードは以下の部分です。
cout << "Enter time period 1" << endl; cout << "Enter hours, minutes and seconds respectively: "<< endl; cin >> hour1 >> minute1 >> second1; cout << "Enter time period 2" << endl; cout << "Enter hours, minutes and seconds respectively: "<< endl; cin >> hour2 >> minute2 >> second2;
cinを使うことで、スペース区切りで入力された3つの値をそれぞれhour、minute、secondの変数に格納できます。
2. 差を計算する(桁借りの処理)
次に、2つの時刻の差を計算します。ここがこのプログラムの核心部分です。引く側の秒や分の方が大きい場合、そのまま引き算すると負の値になってしまうため、上位の単位から1つ借りて60を加える処理を行います。
if(second2 > second1) {
minute1--;
second1 += 60;
}
diff_second = second1 - second2;
if(minute2 > minute1) {
hour1--;
minute1 += 60;
}
diff_minute = minute1 - minute2;
diff_hour = hour1 - hour2;処理の流れは以下の通りです。
- 秒の計算: 引く側の秒(second2)が大きい場合は、分から1借りて秒に60を加えてから差を求めます。
- 分の計算: 同様に、引く側の分(minute2)が大きい場合は、時間から1借りて分に60を加えてから差を求めます。
- 時間の計算: 最後に時間同士の差をそのまま計算します。
これは、私たちが筆算で時刻の引き算を行う際の「繰り下がり」と同じ考え方です。
3. 結果を出力する
最後に、計算した差を「時間:分:秒」の形式で画面に表示します。
cout <<"Time Difference is "<< diff_hour <<":"<< diff_minute <<":"<<diff_second;
まとめ
このように、時刻の差を計算する際は、秒→分→時間の順に桁借りを考慮しながら引き算を行うのがポイントです。今回紹介した手法は、タイマーやストップウォッチ、勤怠管理など、時間を扱うさまざまなプログラムの基礎となる考え方なので、ぜひ理解しておきましょう。
-
C++で2つの同心円の間の面積を計算する方法を解説
同心円とは?同心円とは、2つの円が共通の中心を共有しながら、半径の長さが異なる(r1 と r2、ただし r2 > r1)形状のことです。円の中に別の円が含まれているイメージで、2つの同心円の間の領域は「環(アニュラス)」と呼ばれます。以下は同心円の図です。問題半径の長さが異なる2つの同心円(r1 と r2、ただし r2 > r1)が与えられたとします。課題は、青色で強調表示された2つの円の間の面積を求めることです。2つの円の間の面積を計算するには、大きい円の面積から小さい円の面積を差し引きます。大きい円の半径を r2、小さい円の半径を r1 とすると、求める面積は次のようになります。入出力例入
-
【初心者向け】Pythonで2つのリストの差分(違い)を抽出する方法を解説
この記事では、2つのリストが与えられたときに、その差分(違い)を表示するPythonプログラムを紹介します。Pythonにはset()メソッドが用意されており、ここではこのメソッドを活用します。 セット(集合)とは、重複する要素を持たない順序なしのコレクションです。セットオブジェクトは、和集合・積集合・差集合・対称差といった数学的な操作もサポートしているため、リスト同士の比較に非常に便利です。 実行例 入力: A = [10, 15, 20, 25, 30, 35, 40] B = [25, 40, 35] 出力: [10, 20, 30, 15] 考え方 求めたい差分リストは、次のよう