Вопрос задан 07.09.2020 в 11:28. Предмет Информатика. Спрашивает Дархановна Дания.

Задача 7. SNTP Для того чтобы компьютеры поддерживали актуальное время, они могут обращатьсяк

серверам точного времени SNTP (Simple Network Time Protocol). К сожалению, компьютерне может просто получить время у сервера, потому что информация по сети передаётся немгновенно: пока сообщение с текущим временем дойдёт до компьютера, оно потеряет своюактуальность. Протокол взаимодействия клиента (компьютера, запрашивающего точноевремя) и сервера (компьютера, выдающего точное время) выглядит следующим образом:1) Клиент отправляет запрос на сервер и запоминает время отправления A(по клиентскому времени).2) Сервер получает запрос в момент времени B (по точному серверному времени)и отправляет клиенту сообщение, содержащее время B.3) Клиент получает ответ на свой запрос в момент времени C (по клиентскому времени)и запоминает его. Теперь клиент, из предположения, что сетевые задержки припередаче сообщений от клиента серверу и от сервера клиенту одинаковы, можетопределить и установить себе точное время, используя известные значения A, B, C.Вам предстоит реализовать алгоритм, с точностью до секунды определяющий точноевремя для установки на клиенте по известным A, B и C. При необходимости округлитерезультат до целого числа секунд по правилам арифметики (в меньшую сторону, еслидробная часть числа меньше ½, иначе в большую сторону).Возможно, что, пока клиент ожидал ответа, по клиентскому времени успели наступитьновые сутки, однако известно, что между отправкой клиентом запроса и получением ответаот сервера прошло менее 24 часов.Программа получает на вход три временные метки A, B, C. Каждая временная меткасостоит из трёх целых чисел: количества часов, количества минут, количества секунд. То естьпервые три строки входных данных содержат числа Ah, Am, As – часы, минуты, секундымомента A по клиентскому времени. Следующие три строки содержат числа Bh, Bm, Bs – часы,минуты, секунды момента B по времени сервера. Следующие три строки содержат числа Сh,Сm, Сs – часы, минуты, секунды момента С по времени клиента. Программа должна вывести три целых числа: часы, минуты, секунды вычисленноготочного времени, которое должен установить себе клиент.Пример входных и выходных данныхВвод15101894515140Вывод:18105ПРИМЕЧАНИЕКлиент отправил запрос в 15:01:00 по своим часам, сервеР получил запрос в 18:09:45 по своим часам. Клиент получиЛ ответ в 15:01:40, в этот момент точное время будет 18:10:05.Система оцениванияРешение, правильно работающее только для случаев, когда все три входных времении ответ на задачу принадлежат одним суткам, будет оцениваться в 6 баллов.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи нужно учесть разницу во времени между клиентом и сервером, а также учесть возможность перехода на новый день. Давайте разберемся с алгоритмом:

1. Вычислим разницу во времени между клиентом и сервером: delta = (B - A), где A и B представляют собой метки времени клиента и сервера.

2. Поскольку между отправкой запроса клиентом и получением ответа прошло менее 24 часов, учтем возможность перехода на новый день. Если C < A (момент времени ответа клиенту меньше момента отправки запроса), то добавим 24 часа к delta.

3. Теперь добавим полученную разницу delta к метке времени C, чтобы получить точное время на клиенте: result = C + delta.

4. Округлим результат до целого числа секунд в меньшую или большую сторону, в зависимости от дробной части.

Вот пример кода на Python:

```python def calculate_client_time(Ah, Am, As, Bh, Bm, Bs, Ch, Cm, Cs): # Вычисление разницы во времени между сервером и клиентом delta = (Bh - Ah) * 3600 + (Bm - Am) * 60 + (Bs - As) # Учет возможного перехода на новый день if Ch < Ah or (Ch == Ah and Cm < Am) or (Ch == Ah and Cm == Am and Cs < As): delta += 24 * 3600 # Вычисление точного времени на клиенте result_seconds = (Ch * 3600 + Cm * 60 + Cs) + delta # Округление до целого числа секунд rounded_result_seconds = round(result_seconds) # Преобразование секунд в часы, минуты и секунды result_hours = rounded_result_seconds // 3600 result_minutes = (rounded_result_seconds % 3600) // 60 result_seconds = rounded_result_seconds % 60 print(result_hours, result_minutes, result_seconds)

# Пример использования calculate_client_time(15, 1, 0, 18, 9, 45, 15, 1, 40) ```

В этом примере входные данные представляют собой момент отправки запроса клиентом (15:01:00), момент получения запроса сервером (18:09:45) и момент получения ответа клиентом (15:01:40). Вывод будет представлять точное время, которое клиент должен установить себе (18:10:05).

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос