【C問題】現在時刻から経過した時間を求めるプログラム

※本サイトはアフィリエイト広告を利用しています。
アイキャッチIT技術
この記事は約4分で読めます。
スポンサーリンク
うおな
うおな

C言語を用いて、プログラミングを練習するための課題を考えました。

また、私が出題しようとしている対象の方々は、変数、条件分岐、繰り返し文を一通り終えた段階です。

配列やポインタなどは、まだ学習していないです。

それを念頭に、その段階で解決できる課題、その段階で作成したサンプルプログラムを作成しました。

問題文

ユーザに現在時刻を、〇〇時××分の形で入力させる。(時は、0~23表記、分は0~59表記)
その後、ユーザに適当な分数(ふんすう)を入力させ、入力させた分数が現在時刻から経過した時、何時何分になっているかを求めるプログラムを作成せよ。
日付をまたいだ際には、その旨が分かるように表示する。
ユーザに入力を求める際、あり得ない時間が入力された場合は、エラーメッセージと共に、再度入力を求める。

【表示例】

現在時刻:○○時××分 から、××分後は、○○時××分です。

※計算の結果、日付をまたいだ場合は、
現在時刻:○○時××分 から、××分後は、翌日の○○時××分です。
と表示させる。

【追記】今回の問題では、計算結果が2日後以降になる場合は、考慮しません。

サンプルプログラム

あくまでこれは、回答の一例です。

条件分岐や経過後の時間を求めるロジックは、人それぞれ様々になるかと思います。

#include <stdio.h>

int main(void)
{
	int hour, minutes, time, after_hour, after_minutes, save_hour, save_minutes;
	int tommorow = 0;

	do {
		printf("現在が何時か入力してください:");		//ユーザに現在時刻の入力を求め、
		scanf("%d", &hour);
                                     //時刻の判定を行なう

		printf("現在が何分か入力してください:");
		scanf("%d", &minutes);

		if (hour < 0 || hour >= 24 || minutes < 0 || minutes >= 59) {
			puts("現在時刻を間違っていませんか?");
			puts("もう一度確認してみてください。");
		}

	} while (hour < 0 || hour >= 24 || minutes < 0 || minutes >= 59);

	save_hour = hour;			//現在時刻を後の表示で使用するために、変数に格納する
	save_minutes = minutes;

	do {
		printf("現在時刻から、何分後の時間を知りたいですか?:");    //ユーザに経過する分数の入力を
		scanf("%d", &time);
                                         //求め、時刻の判定を行なう

		if (time < 0) {
			puts("過去は振り返らないようにしましょう。");
		}
	} while (time < 0);

	after_hour = time / 60;		//経過時間数を求める
	after_minutes = time % 60;		//経過分数を求める

	minutes = minutes + after_minutes;		//経過分数と、現在時刻の分数を合算する

	if (minutes >= 60) {
		minutes -= 60;		//経過分数と現在時刻の分数の合計が、1時間を過ぎていた場合の処理
		hour += 1;
	}

	hour = hour + after_hour;		//経過時間数と、現在時刻の時間数を合算する

	if (hour >= 24) {
		hour -= 24;	   //経過時間数と現在時刻の時間数の合計が、24時を上回っていた際の処理
		tommorow = 1;
	}

	printf("現在時刻:%d時%d分から、%d分後は、", save_hour, save_minutes, time);

	if (tommorow == 1) {
		printf("翌日の");
	}
	printf("%d時%d分です。\n", hour, minutes);

	return 0;


}
タイトルとURLをコピーしました