hozer

[OOP]VitasLab3

Oct 15th, 2014
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <cctype>
  3. #include <math.h>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. struct Angle
  9. {
  10.     int h, m;
  11.  
  12.     void init()
  13.     {
  14.         h = m = 0;
  15.     }
  16.  
  17.     void input()
  18.     {
  19.         cout << "Input h m: ";
  20.         cin >> h >> m;
  21.     }
  22.  
  23.     //перевід у строку
  24.     char *toPChar()
  25.     {
  26.         char *str = new char[69];
  27.         //дофігачуєм у строку потрошки даних
  28.         strcpy(str, "h = ");
  29.         strcat(str, itos(h));
  30.         strcat(str, " m = ");
  31.         strcat(str, itos(m));
  32.         return str;
  33.     }
  34.     //авторська функція для переводу числа у строку
  35.     //по суті, додаєм остачі від ділення на 10 з кінця строки
  36.     char *itos(int n)
  37.     {
  38.         int len = 4, i;
  39.         char *s = new char[len+1];
  40.         for (i = 1; i < len+1; i++)
  41.         {
  42.             if (n != 0){
  43.                 s[len - i] = n % 10 + 48;
  44.                 n /= 10;
  45.             }
  46.             else s[len - i] = ' ';
  47.         }
  48.  
  49.         s[len] = '\0';
  50.  
  51.         return s;
  52.     }
  53.  
  54.     void output()
  55.     {
  56.         cout << toPChar() << endl;
  57.     }
  58.  
  59. };
  60.  
  61. class TAngle
  62. {
  63.     Angle a;
  64.  
  65. public:
  66.     void init()
  67.     {
  68.         a.init();
  69.     }
  70.  
  71.     void input()
  72.     {
  73.         a.input();
  74.     }
  75.  
  76.     char *toPChar()
  77.     {
  78.         return a.toPChar();
  79.     }
  80.  
  81.     void output()
  82.     {
  83.         a.output();
  84.     }
  85.  
  86.     void setStruct(int h, int m)
  87.     {
  88.         a.h = h;
  89.         a.m = m;
  90.     }
  91.  
  92.     Angle getStruct()
  93.     {
  94.         return a;
  95.     }
  96.     //переведення в радіани,
  97.     float rad()
  98.     {
  99.         return a.h*3.14 / 180 + a.m*3.14 / 180 * 60;
  100.     }
  101.    
  102.     //приведення до діапазону 0 - 360,
  103.     //в інеті найшов
  104.     void normalize()
  105.     {
  106.         if (a.m < 0)
  107.         {
  108.             a.h--;
  109.             a.m += 60;
  110.         }
  111.         if (a.h>0) a.h = a.h % 360;
  112.         else a.h = a.h % 360 + 360;
  113.     }
  114.  
  115.     //збільшення та зменшення кута на задану величину,
  116.     void increaseAngle(int h, int m)
  117.     {
  118.         a.h += h;
  119.         a.m += m;
  120.     }
  121.  
  122.     void decreaseAngle(int h, int m)
  123.     {
  124.         a.h -= h;
  125.         a.m -= m;
  126.     }
  127.  
  128.  
  129.     //отримання синусу,
  130.     float getSin()
  131.     {
  132.         return sin(rad());
  133.     }
  134.     //порівняння кутів
  135.     //да тоже з інету, але там все понятно
  136.     int angleCmp(TAngle a2)
  137.     {
  138.         int m1 = a.m + a.h * 60;
  139.         int m2 = a2.a.m + a2.a.h * 60;
  140.         if (m1<m2) return -1;
  141.         else if (m1>m2) return 1;
  142.         else return 0;
  143.     }
  144. };
  145.  
  146. //все так само як для функцій у класі, але це функції для структури
  147. float rad(Angle ang)
  148. {
  149.     return ang.h*3.14 / 180 + ang.m*3.14 / 180 * 60;
  150. }
  151.  
  152. void normalize(Angle &ang)
  153. {
  154.         if (ang.m < 0)
  155.         {
  156.             ang.h--;
  157.             ang.m += 60;
  158.         }
  159.         if (ang.h>0) ang.h = ang.h % 360;
  160.         else ang.h = ang.h % 360 + 360;
  161. }
  162.  
  163. void increaseAngle(Angle &ang, int h, int m)
  164. {
  165.     ang.h += h;
  166.     ang.m += m;
  167. }
  168.  
  169. void decreaseAngle(Angle &ang, int h, int m)
  170. {
  171.     ang.h -= h;
  172.     ang.m -= m;
  173. }
  174.  
  175. float getSin(Angle ang)
  176. {
  177.     return sin(rad(ang));
  178. }
  179.  
  180. int angleCmp(Angle a1, Angle a2)
  181. {
  182.     int m1 = a1.m + a1.h * 60;
  183.     int m2 = a2.m + a2.h * 60;
  184.     if (m1<m2) return -1;
  185.     else if (m1>m2) return 1;
  186.     else return 0;
  187. }
  188.  
  189.  
  190. int main()
  191. {
  192.     //приклади сам пиши, заодно розберешся
  193.     Angle a;
  194.     a.input();
  195.     a.output();
  196.     cin.ignore();
  197.     cin.get();
  198. }
  199.  
  200. /* Визначити тип TAngle для роботи з кутами на площині, які задаються величиною в градусах та хвилинах.
  201. Обов’язково повинно бути реалізовано:
  202.  
  203. переведення в радіани,
  204. приведення до діапазону 0-360,
  205. збільшення та зменшення кута на задану величину,
  206. отримання синусу,
  207. порівняння кутів.*/
Advertisement
Add Comment
Please, Sign In to add comment