Задача: Часовая стрелка образует угол [latex]\varphi[/latex] с лучом, проходящим через центр и через точку, соответствующую [latex]12[/latex] часам на циферблате, [latex] 0 < \varphi \leq 2\pi[/latex]. Определить значение угла для минутной стрелки, а также количество часов и полных минут.
Тесты
[latex]\varphi[/latex] | Часы | Минуты | [latex]\alpha[/latex] | Комментарий |
30 | 1 | 0.00 | 0.00 | Пройден |
360 | 12 | 0.00 | 0.00 | Пройден |
1 | 0 | 2.00 | 12.00 | Пройден |
149.9 | 4 | 59.8 | 358.80 | Пройден |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <iostream> #include<stdio.h> #include <math.h> using namespace std; int main() { double h; //Счетчик часов double m; //Счетчик минут double cm; //Угол между минутной стрелкой и лучом(Альфа) double ch; //Угол между часовой стрелкой и лучом(Фи) cin >> ch; //Вводим угол Фи cm = fmod(ch,30); //Узнаем остаток от деления угла Фи на 30 градусов //Кол-во часов - результат деления угла Фи на 30 градусов без остатка h = (ch - cm) / 30; // Вычитаем кол-во минут и делим на 30 градусов m = cm * 2 ; cm *= 12; printf("Угол Альфа: %2.2f градусов \n", cm ); printf("Время: %2.0f часов, %2.2f минут", h, m); return 0; } |
В условии задачи сказано, что [latex] 0 < \varphi \leq 2\pi[/latex], значит вводимое значение угла [latex]\varphi[/latex] — не может быть отрицательным и быть больше 360 градусов. Угол [latex]\alpha[/latex] — угол между минутной стрелкой и лучом. Один час — 30 градусов, что бы узнать количество часов нам следует поделить введенный угол [latex]\varphi[/latex] на 30 градусов. Но перед этим важно узнать остаток от этого деления, если такой имеется. Если остаток равен 0, значит минутная стрелка показывает 0 минут и можно смело вывести значения часов ( поделив [latex]\varphi[/latex] на 30), минут и угла [latex]\alpha[/latex]( 0 ). Если остаток все же не равен 0, нужно отнять его от [latex]\varphi[/latex] и разделить на 30 градусов. Так-как в одном часе 60 минут, а остаток не может быть больше 30 градусов, умножаем его на 2 и получаем количество минут. Подобную операцию проводим над углом [latex]\alpha[/latex], но в этот раз умножаем на 12. Выводим значения часов, минут и угла [latex]\alpha[/latex].
Код для Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.util.*; import java.lang.*; import java.io.*; class Depo { public static void main (String[] args) throws java.lang.Exception { double h, m, cm, ch; Scanner in = new Scanner(System.in); ch = in.nextDouble(); cm = ch % 30; h =(ch - cm) / 30; m = cm * 2; cm *= 12; System.out.printf("Угол Альфа: %2.2f градусов %n", cm); System.out.printf("Время: %2.0f часов %2.2f минут", h, m); } } |
А зачем нам нужно проверять условие cm == 0?
В чем проблема с применением всегда операторов:
Правда программа становится вдруг линейной.
Еще есть интересная особенность: в условии задачи угол задается в радианах. С другой стороны, задавать угол в градусах удобнее для этой задачи.
Код исправлен. Я действительно зря его усложнил. На счет углов, в градусах действительно задавать удобнее. Мне изменить код под радианы? Программа же справилась с задачей.
Засчитано, 10 баллов.
Засчитана Java-версия!