Найти угол между стрелками часов - 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
Я попробовал что-то написать:
#include <stdio.h>
#include <math.h>
 
int main(void) {
    double h, m, angle;
    if ( scanf("%lf %lf", &h, &m) > 0 ) {
        if (h >= 12)
            h -= 12;
        angle = fabs(30*(h + m/60) - 6*m);
        if (angle > 180)
            angle = 360 - angle;
        if (5*(h + m/60) > m)
            angle *= -1;
        printf("%.10f", angle);
    }
    return 0;
}
Однако программа проходит все тесты, кроме одного Где ошибка?

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

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

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

  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
Похожие ответы