Лицензия Creative Commons
Содержимое блога доступно по лицензии Creative Commons Атрибуция — С сохранением условий
(Attribution-ShareAlike) 3.0 Unported
, если не указано иное.

пятница, 7 января 2011 г.

Вывод приветствия в зависимости от времени, введённого пользователем

Задача заключается в том, чтобы запросить у пользователя время в формате ЧЧ:ММ:СС и вывести приветствие на английском языке - "Good morning!", "Good evening!" etc.

Задача достаточно простая, для ввода данных используется функция scanf(), которая принимает время в заданном формате. Далее мы должны проверить часы (ЧЧ) на принадлежность определённому времени суток.


Основная идея заключается в том, чтобы сопоставить временные интервалы с приветствием:

  • Утро - с 6 часов до 12 - "Good moring!"
  • День - с 12 до 18 - "Good afternoon!"
  • Вечер - с 18 до 22 - "Good evening!"
  • Ночь - с 22 до 6 - "Good night!"

Попробую усовершенствовать задачу. Пусть программа не только приветствует нас, но и сообщает человеческим голосом по-английски текущее время. Например, "It's twenty to nine." Для этого создам новый тип:


typedef char TString[60];


Далее, создаю массив из 12 элементов типа TString, в которые сразу заношу части фраз, характеризующие положение минутной стрелки (т.е. текущую часть часа):


TString currenttime[12]={"o'clock",          // 0
                         "five past",        // 1
                         "ten past",         // 2
                         "quarter past",     // 3
                         "twenty past",      // 4
                         "twenty-five past", // 5
                         "half past",        // 6
                         "twenty-five to",   // 7
                         "twenty to",        // 8
                         "quarter to",       // 9
                         "ten to",           // 10
                         "five to"};         // 11

В отдельную функцию можно вынести операцию определения положения минутной стрелки на основе введённых пользователем минут (ММ).

Так же хорошей мыслью будет осуществить все проверки на корректность введённых данных до начала их обработки - до того, как мы будем определять часы и количество введённых минут.

Всё хорошо, но почему бы программе, раз уж я взялся её учить говорить на человеческом языке, не называть часы словами? Для этого мне потребуется ещё один массив, размером в 23 элемента (массивы нумеруются с нуля, поэтому 23, а не 24). Тип использую тот же, TString.

В моём варианте секунды не учитываются вообще. Но думаю, можно найти применение и им.

Пример работы программы:


Please enter a time:
> 21:40:55
Good evening!
It's twenty to twenty-two.


Исходник:
greetings.c

Комментариев нет:

Отправить комментарий