Advertisement
serikov

Untitled

Jun 23rd, 2013
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. // .a.out 23:25 dms q as demo input
  2.  
  3. #include <boost/regex.hpp>
  4. #include <cstring>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. class Time {
  9.   public:
  10.  
  11.     Time(string 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* atime) {
  43.       t = *atime;
  44.       }
  45.  
  46.       float GetAngle() {
  47.          angle = 0;
  48.          int hours = t.GetHours();
  49.          if (hours>12) hours = hours - 12;
  50.          int minutes = t.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.         Time t;
  60. };
  61.  
  62.  
  63. class QuartzClock {
  64.    public:
  65.       QuartzClock(Time* qtime) {
  66.       t = *qtime;
  67.     }
  68.  
  69.       float GetAngle() {
  70.         angle = 0;
  71.         int hours = t.GetHours();
  72.         if (hours>12) hours = hours - 12;
  73.         int minutes = t.GetMinutes();
  74.         angle = abs(hours*30-minutes*6); if (angle>180) angle=abs(180-angle);
  75.         return angle;
  76.         }
  77.  
  78.     private:
  79.         float angle;
  80.         Time t;
  81. };
  82.  
  83.  
  84. string convert_angle(float angle, const char* tformat) {
  85.         string angle1;
  86.         if (strcmp(tformat,"deg")!=0) {
  87.             angle1=FloatToStr(angle);
  88.             return angle1;
  89.             }
  90.         if ((strcmp(tformat,"rad")!=0) {
  91.             angle=angle*(M_PI)/180;
  92.             angle1=FloatToStr(angle);
  93.             return angle1;
  94.             }
  95.         if ((strcmp(tformat,"dms")!=0) {
  96.             int hrs = int(angle+0.5);
  97.             int minst = (angle-floor(angle))*60;
  98.             int mins = int(minst+0.5);
  99.             int secst = (minst-floor(minst))*60;
  100.             int secs = int(secst+0.5);
  101.             string an;
  102.             sprintf (an, "%s.%s'%s", hrs, mins, secs);         
  103.             return an;
  104.         }
  105.     }
  106.  
  107.  
  108. int main(int argc, char *argv[])
  109. {
  110. Time t(argv[1]);
  111. if ((strcmp(argv[3],"q")!=0)  {
  112.     QuartzClock c(&t);
  113.     }
  114. if ((strcmp(argv[3],"a")!=0)  {
  115.     AnalogClock c(&t);
  116.     }
  117. float angle = c.GetAngle()
  118. string angle1 = convert_angle(angle, argv[2]);
  119. cout<<"Time is "<<t.GetHours()<<" hours and "<<t.GetMinutes();<<" minutes.\n";
  120. cout<<"Natural angle is: "<<angle<<"\n";
  121. cout<<"Converted angle is: "<<angle1<<"\n";
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement