Току-що зададох този въпрос от C програмирането на KN King: Модерен подход. Не е домашно, просто се уча от книгата...
Следната таблица показва ежедневните полети от един град до друг:
Час на заминаване - Час на пристигане
8:00 - 10:16 сутринта
9: 43 ч. - 11:52 ч.
11:19 ч. - 13:31 ч.
12:47 ч. - 15:00 ч.
14:00 ч. - 16:08 ч.
15:45 ч. - 17:55 ч.
7: 00:00 - 21:20
21:45 - 23:58Напишете програма, която иска от потребителя да въведе време (изразено в часове и минути, използвайки 24-часов часовник). След това програмата показва часовете на заминаване и пристигане за полета, чийто час на заминаване е най-близък до въведения от потребителя:
Въведете 24-часово време: 13:15
Най-близкото време на заминаване е 12:47 ч., пристигане в 15:00 ч.Съвет: Преобразувайте въведеното във време, изразено в минути от полунощ, и го сравнете с часовете на заминаване, също изразено в минути от полунощ. Например 13:15 е 13 x 60 + 15 = 795 минути от полунощ, което е по-близо до 12:47 (767 минути от полунощ), отколкото до което и да е друго време на заминаване.
Досега разгледахме само основни изрази за сравнение и инструкциите if и switch, така че отговорът ми трябва да се основава на тях очевидно и нищо прекалено фантастично. Моят код, който измислих, е по-долу, чудя се дали някой би искал да го погледне и да види дали съм на прав път, изглежда работи, но изглежда, че има много код за такова малко нещо. Може би беше само за да ни научи на включената логика. Не съм поставил целия код, останалото е едно и също нещо отново и отново, докато сравнява стойностите. Нямам опит в програмирането, така че, моля, бъдете нежни!
Благодаря за отделеното време, Андрю
#include <stdio.h>
int main (int argc, const char * argv[]) {
// Flight departure times since midnight
// 8am, 9:45am, 11:19am, 12:47pm
// 2pm, 3:45pm, 7pm, 7:45pm
int a = 480, b = 585, c = 679, d = 767,
e = 840, f = 945, g = 1140, h = 1185;
// Flight arrival times for respective departure times.
int a1 = 616, b1 = 712, c1 = 811, d1 = 900,
e1 = 968, f1 = 1075, g1 = 1280, h1 = 1438;
int hours, minutes, time, t, u;
// Get the users time
printf("Enter a 24 hour time (hh:mm): \n");
scanf("%d:%d", &hours, &minutes);
time = hours * 60 + minutes;
printf("Closest departure time is ");
if (time <= a)
printf("8:00am");
else
if (time > a && time <= b) {
t = time - a;
u = b - time;
if (t < u) {
printf("%.2d:%.2d", a / 60, a % 60);
if (a / 60 == 0)
printf("am");
else if (a / 60 < 12)
printf("am");
else if (a / 60 == 12)
printf("pm");
else
printf("pm");
printf(", arriving at %d:%.2d", a1 / 60, a1 % 60);
if (a1 / 60 == 0)
printf("am");
else if (a1 / 60 < 12)
printf("am");
else if (a1 / 60 == 12)
printf("pm");
else
printf("pm");
}
else {
printf("%.2d:%.2d", b / 60, b % 60);
if (b / 60 == 0)
printf("am");
else if (b / 60 < 12)
printf("am");
else if (b / 60 == 12)
printf("pm");
else
printf("pm");
printf(", arriving at %d:%.2d", b1 / 60, b1 % 60);
if (b1 / 60 == 0)
printf("am");
else if (b1 / 60 < 12)
printf("am");
else if (b1 / 60 == 12)
printf("pm");
else
printf("pm");
}
}
Промени според съвета, който получих: (Благодаря на xamypah и Gabe) ...
int hours, minutes, time, t, u, x, y;
// Get the users time
printf("Enter a 24 hour time (hh:mm): \n");
scanf("%d:%d", &hours, &minutes);
time = hours * 60 + minutes;
printf("Closest departure time is ");
if (time <= a)
printf("8:00am");
else
if (time > a && time <= b) {
t = time - a;
u = b - time;
if (t <= u) {
x = a;
y = a1;
}
else {
x = b;
y = b1;
}
След това в края на програмата след няколко от горните:
printf("%.2d:%.2d", x / 60, x % 60);
if (x / 60 < 12)
printf("am");
else
printf("pm");
printf(", arriving at %d:%.2d", y / 60, y % 60);
if (y / 60 < 12)
printf("am");
else
printf("pm");
Всъщност трябваше да направя някои промени в тази крайна декларация за печат, или в противен случай той показваше часовете в 24-часов формат с am и pm след:
if (x / 60 < 12)
printf("%d:%.2d am", x / 60, x % 60);
else
printf("%d:%.2d pm", (x / 60) - 12, x % 60);
printf(", arriving at ");
if (y / 60 < 12)
printf("%d:%.2d am", y / 60, y % 60);
else
printf("%d:%.2d pm", (y / 60) - 12, y % 60);