Advertisement
serikov

yandex

Jun 23rd, 2013
369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 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() {
  12.       int hours = 0;
  13.       int minutes = 0;
  14.     }
  15.  
  16.     bool Parse(const char* time) {         
  17.                boost::regex xRegEx1("^([0-2][0-9])([0-5][0-9])(\\s[AP]M)");
  18.                boost::smatch xResults;
  19.                if (!boost::regex_match(time, xResults, xRegEx1)) {
  20.                    int hours = strtol(xResults[1].str().c_str(), NULL, 10);
  21.                    int minutes = strtol(xResults[2].str().c_str(), NULL, 10);
  22.                    if (!strcmp(xResults[3].str().c_str()), "PM")  hours = hours + 12;
  23.                    return true;
  24.                } else return false;
  25.     }
  26.  
  27.     int GetHours () {
  28.         return hours;
  29.     }  
  30.  
  31.     int GetMinutes() {
  32.         return hours;
  33.     }  
  34.  
  35. };
  36.  
  37.  
  38. class AnalogClock {
  39.    public:
  40.       AnalogClock(Time* t) {    // передаем указатель на экземпляр класса время
  41.          time = t;
  42.          float angle = 0;
  43.       }
  44.  
  45.       float GetAngle() {
  46.          int hours = time->GetHours();
  47.          if (hours>12) hours = hours - 12;
  48.          int minutes = time->GetMinutes();
  49.          if (minutes==0) angle = abs(hours*30-minutes*6);
  50.          else angle = abs((hours+1/minutes)*30-minutes*6);
  51.          if (angle>180) angle=abs(180-angle);
  52.          return angle;
  53.         }
  54. };
  55.  
  56.  
  57. class QuartzClock {
  58.    public:
  59.       QuartzClock(Time* t) {
  60.          time = t;
  61.          float angle = 0;
  62.       }
  63.  
  64.       float GetAngle() {
  65.          int hours = time->GetHours();
  66.         if (hours>12) hours = hours - 12;
  67.          int minutes = time->GetMinutes();
  68.          angle = abs(hours*30-minutes*6); if (angle>180) angle=abs(180-angle);
  69.         return angle;
  70.         }
  71. };
  72.  
  73.  
  74. class Angle {
  75.    public:
  76.       Angle(const char* param3) {
  77.       if ((strcmp(param3,"q")!=0)  Angle(QuartzClock *c);
  78.       if ((strcmp(param3,"a")!=0)  Angle(AnalogClock *c);
  79.       clock = c;
  80.       float angle = clock->GetAngle();
  81.       string angle1;
  82.       }
  83.  
  84.     char ConvertedAngle(const char* tformat) {
  85.         if ((strcmp(tformat,"deg")!=0) {
  86.             angle1=FloatToStr(angle);
  87.             return angle1;
  88.             }
  89.         if ((strcmp(tformat,"rad")!=0) {
  90.             angle=angle*(M_PI)/180;
  91.             angle1=FloatToStr(angle);
  92.             return angle1;
  93.             }
  94.         if ((strcmp(tformat,"dms")!=0) {
  95.             int hrs = int(angle+0.5);
  96.             int minst = (angle-floor(angle))*60;
  97.             int mins = int(minst+0.5);
  98.             int secst = (minst-floor(minst))*60;
  99.             int secs = int(secst+0.5);
  100.             string an;
  101.             sprintf (an, "%s.%s'%s", hrs, mins, secs);         
  102.             return an;
  103.         }
  104.     }
  105. }; 
  106.  
  107.  
  108.  
  109. int main(int argc, char *argv[])
  110. {
  111. Time t;
  112. Angle a(&argv[3]);
  113. t.Parse(argv[1]);
  114. cout<<"Time is "<<t.GetHours()<<" hours and "<<t.GetMinutes();<<" minutes.\n";
  115. cout<<"Angle is: "<<a.ConvertedAngle(argv[2]);<<"\n";
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement