Найти угол между стрелками часов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Условие:
Ограничение времени: 1 с Ограничение памяти: 1 M На стандартном потоке ввода задается время (в двадцатичетырехчасовом формате) в виде двух целых чисел: часов и минут. Часовая стрелка перемещается по циферблату непрерывно, то есть в 14:00 она находится ровно на делении 2, а в 14:30 находится посередине между делениями 2 и 3. Определите и напечатайте на стандартный поток вывода угол (в градусах) от часовой стрелки до минутной. Угол должен быть в интервале [-180;180), положительным направлением вращения часовой стрелки считается направление по часовой стрелке. Для вывода ответа используйте спецификацию преобразования %.10f. Ваш ответ будет сравниваться с правильным ответом как числа с плавающей точкой с точностью 1e-5. Примеры Входные данные Результат работы 14 0 | -60.0000000000 14 30 | 105.0000000000 Язык: gcc - GNU C 4.9.1
Я попробовал что-то написать:
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(void) {
  4. double h, m, angle;
  5. if ( scanf("%lf %lf", &h, &m) > 0 ) {
  6. if (h >= 12)
  7. h -= 12;
  8. angle = fabs(30*(h + m/60) - 6*m);
  9. if (angle > 180)
  10. angle = 360 - angle;
  11. if (5*(h + m/60) > m)
  12. angle *= -1;
  13. printf("%.10f", angle);
  14. }
  15. return 0;
  16. }
Однако программа проходит все тесты, кроме одного Где ошибка?

Решение задачи: «Найти угол между стрелками часов»

textual
Листинг программы
  1. int main(void)
  2. {
  3.     double h, m, angle;
  4.     if ( scanf("%lf %lf", &h, &m) > 0 )
  5.     {
  6.         if(h>=12) h-=12;
  7.         angle = 6*m - 30*(h + m/60);
  8.         if (angle >  180) angle-=360;
  9.         if (angle < -180) angle+=360;
  10.         printf("%.10f", angle);
  11.     }
  12.     return 0;
  13. }

Объяснение кода листинга программы

  1. Ввод значений времени в переменные h и m с помощью функции scanf.
  2. Если ввод корректен, то выполняется блок кода.
  3. Переменная h приводится к диапазону от 0 до 11 (12 часов вычитаются из значения).
  4. Вычисляется значение переменной angle как 6 умножить на значение переменной m, делённое на 60, и вычитается 30, умноженное на сумму значения переменной h и m делённое на 60.
  5. Если значение переменной angle больше 180, то оно вычитается из 360.
  6. Если значение переменной angle меньше -180, то оно прибавляется к 360.
  7. Выводится значение переменной angle с точностью до 10 знаков после запятой.
  8. Если ввод некорректен, то программа завершается и возвращается 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы