うおな
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;
}