View difference between Paste ID: apVZX15J and nPemv6qt
SHOW: | | - or go back to the newest paste.
1
// .a.out 23:25 dms q as demo input
2
3-
 Time();
3+
#include <boost/regex.hpp>
4-
 int hours = 0;
4+
#include <cstring>
5-
 int minutes = 0;
5+
#include <iostream>
6
using namespace std;
7
8
class Time {
9
  public:
10
11
 	Time();
12
13
	bool Parse(string time) {
14
			   hours = 0;
15
			   minutes = 0;	
16
               boost::regex xRegEx1("^([0-2][0-9])([0-5][0-9])(\\s[AP]M)");
17
               boost::smatch xResults;
18
               if (!boost::regex_match(time, xResults, xRegEx1)) {
19
		           hours = strtol(xResults[1].str().c_str(), NULL, 10);
20
		           minutes = strtol(xResults[2].str().c_str(), NULL, 10);
21
				   if (strcmp(xResults[3].str().c_str(), "PM")==0)  hours = hours + 12;
22
		           return true;
23
               } else return false;
24
	}
25
26
	int GetHours () {
27
		return hours;		// нет декларации в этой области видимости - ?
28
	}	
29
30
	int GetMinutes() {
31
		return hours;		// нет декларации в этой области видимости - ?
32
	}	
33
	
34
	private:
35
	 int hours;
36
	 int minutes;
37
};
38
39
40
class AnalogClock {
41
   public:
42
      AnalogClock(Time* t) {	// передаем указатель на экземпляр класса время
43
         time = t;
44
      }
45
46
      float GetAngle() {
47
		 angle = 0;
48
         int hours = time->GetHours();
49
		 if (hours>12) hours = hours - 12;
50
		 int minutes = time->GetMinutes();
51
		 if (minutes==0) angle = abs(hours*30-minutes*6);
52
		 else angle = abs((hours+1/minutes)*30-minutes*6); 
53
		 if (angle>180) angle=abs(180-angle);
54
		 return angle;
55
		}
56
57
	private:
58
		float angle;
59
};
60
61
62
class QuartzClock {
63
   public:
64
      QuartzClock(Time* t) {
65
         time = t;
66
		 float angle = 0;
67
      }
68
69
      float GetAngle() {
70
         int hours = time->GetHours();
71
		if (hours>12) hours = hours - 12;
72
		 int minutes = time->GetMinutes();
73
		 angle = abs(hours*30-minutes*6); if (angle>180) angle=abs(180-angle);
74
		return angle;
75
		}
76
};
77
78
79
class Angle {
80
   public:
81
      Angle(const char* param3) {
82
	  if ((strcmp(param3,"q")!=0)  Angle(QuartzClock *c);
83
	  if ((strcmp(param3,"a")!=0)  Angle(AnalogClock *c);
84
	  clock = c;
85
	  float angle = clock->GetAngle();
86
	  string angle1;
87
      }
88
89
	char ConvertedAngle(const char* tformat) {
90
        if ((strcmp(tformat,"deg")!=0) {
91
			angle1=FloatToStr(angle); 
92
			return angle1;
93
			}
94
		if ((strcmp(tformat,"rad")!=0) {
95
			angle=angle*(M_PI)/180; 
96
			angle1=FloatToStr(angle); 
97
			return angle1;
98
			}
99
		if ((strcmp(tformat,"dms")!=0) {
100
			int hrs = int(angle+0.5);
101
			int minst = (angle-floor(angle))*60;
102
			int mins = int(minst+0.5);
103
			int secst = (minst-floor(minst))*60;
104
			int secs = int(secst+0.5);
105
			string an;
106
			sprintf (an, "%s.%s'%s", hrs, mins, secs);			
107
			return an;
108
		}
109
	}
110
};	
111
112
113
114
int main(int argc, char *argv[])
115
{
116
Time t;	
117
Angle a(&argv[3]);
118
t.Parse(argv[1]);
119
cout<<"Time is "<<t.GetHours()<<" hours and "<<t.GetMinutes();<<" minutes.\n";
120
cout<<"Angle is: "<<a.ConvertedAngle(argv[2]);<<"\n";
121
}