Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
vovakubba
0 / 0 / 1
Регистрация: 27.05.2014
Сообщений: 3
1

Угол между стрелками часов С++ (не повтор)

27.05.2014, 21:59. Просмотров 1221. Ответов 1
Метки нет (Все метки)

Нужно написать консольную программу вычисления угла между
стрелками часов (на С++). Программа принимает на вход момент време-ни, формат, в котором нужно вывести результат, и тип часов. Выводит
посчитанный угол на стандартный выход. В argv[1] передаётся время,
которое может быть указано в 12-часовом (HH:MM AM/PM, где HH мо-жет принимать значения от 0 до 11) или 24-часовом (HH:MM) формате.
В argv[2] передаётся один из трёх форматов вывода угла: радианы (rad),
градусы (deg) или градусы, минуты и секунды (dms). В argv[3] пере-дается тип часов: механические, у которых положение часовой стрелки
зависит от положения минутной и кварцевые, у которых положение ча-совой стрелки не зависит от положения минутной.
Примеры входных данных:
вход: "03:00"deg mech; выход: 90
вход: "15:00"rad mech; выход: 1.5708
вход: "09:00 PM"dms quar; выход: 90.00’00”
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 21:59
Ответы с готовыми решениями:

Определить меньший угол между часовой и минутной стрелками на циферблате часов
Доброго времени суток. Прошу помочь с решением. C++ только начал изучать, поэтому решение здесь...

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

Даны три целых числа: h, m, s. Определите угол (в градусах) между часовой стрелкой на циферблате часов в момент времени
Даны три целых числа: h, m, s. Определите угол (в градусах) между часовой стрелкой на циферблате...

С начала суток часовая стрелка на круглом циферблате повернулась на угол n градусов; определите показания часов
С начала суток часовая стрелка на круглом циферблате повернулась на угол n градусов. Определите...

Найти угол между стрелками часов
Условие: Я попробовал что-то написать: #include <stdio.h> #include <math.h> int...

1
vovakubba
0 / 0 / 1
Регистрация: 27.05.2014
Сообщений: 3
30.05.2014, 00:59  [ТС] 2
Лучший ответ Сообщение было отмечено vovakubba как решение

Решение

Пока вот набросал такой код. Может кто поможет улучшить анализатор вводимой строки, так как сейчас он строго зависит от последовательности введенных символов.
C++
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<string.h>
main()
{
clrscr();
char info[20];
unsigned HH,MM;
double angle;
typedef enum {deg, rad, dms} angle_types;
typedef enum {mech,quar} clock_types;
angle_types AngleType;
clock_types ClockType;
cout<<"Input correct information. Example: '09:00 AM' deg mech"<<endl;
cin.getline(info,20);
HH=10*(info[1]-'0')+info[2]-'0';
MM=10*(info[4]-'0')+info[5]-'0';
if (info[7]!='A' || info[7]!='P')
{
if (info[9]=='e') AngleType=deg;
if (info[9]=='a') AngleType=rad;
if (info[9]=='m') AngleType=dms;
if (info[12]=='m') ClockType=mech;
if (info[12]=='q') ClockType=quar;
 
if (ClockType==mech) angle=abs(30*(HH%12)-5.5*MM); else
    if (ClockType==quar) angle=abs(30*(HH%12)-6*MM);
if (angle>180) angle=360-angle;
if (AngleType==deg) cout<<angle; else
if (AngleType==rad) cout<<(3.14/180)*angle;
}
if (info[11]=='e') cout<<"-----------------";
else if (info[7]=='A' || info[7]=='P')
{
if (info[12]=='e') AngleType=deg;
if (info[12]=='a') AngleType=rad;
if (info[12]=='m') AngleType=dms;
if (info[15]=='m') ClockType=mech;
if (info[15]=='q') ClockType=quar;
 
if (ClockType==mech) angle=abs(30*(HH%12)-5.5*MM);
else
if (ClockType==quar) angle=abs(30*(HH%12)-6*MM);
 
if (angle>180) angle=360-angle;
 
if (AngleType==deg) cout<<angle;
else if (AngleType==rad) cout<<(3.14/180)*angle;
 
int min=(int)((angle-(int)angle)*3600)/60;
int sec=(int)((angle-(int)angle)*3600)%60;
 
if (AngleType==dms) cout<<(int)angle<<"."<<min<<"'"
<<sec<<"''"<<endl;
}
getch();
}
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2014, 00:59

Вычислить угол между стрелками часов
Несколько задачек. Для себя. Помогите плз! Хочу понять. 1) На плоскости задана прямоугольная...

Вычислить угол между часовой и минутной стрелками часов по заданному времени
Напишите, пожалуйста, на Java метод, который будет вычислять угол между часовой и минутной...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.