Advertisement
serikov

Untitled

Jun 23rd, 2013
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.  
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement