Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cctype>
- #include <math.h>
- #include <string.h>
- using namespace std;
- struct Angle
- {
- int h, m;
- void init()
- {
- h = m = 0;
- }
- void input()
- {
- cout << "Input h m: ";
- cin >> h >> m;
- }
- //перевід у строку
- char *toPChar()
- {
- char *str = new char[69];
- //дофігачуєм у строку потрошки даних
- strcpy(str, "h = ");
- strcat(str, itos(h));
- strcat(str, " m = ");
- strcat(str, itos(m));
- return str;
- }
- //авторська функція для переводу числа у строку
- //по суті, додаєм остачі від ділення на 10 з кінця строки
- char *itos(int n)
- {
- int len = 4, i;
- char *s = new char[len+1];
- for (i = 1; i < len+1; i++)
- {
- if (n != 0){
- s[len - i] = n % 10 + 48;
- n /= 10;
- }
- else s[len - i] = ' ';
- }
- s[len] = '\0';
- return s;
- }
- void output()
- {
- cout << toPChar() << endl;
- }
- };
- class TAngle
- {
- Angle a;
- public:
- void init()
- {
- a.init();
- }
- void input()
- {
- a.input();
- }
- char *toPChar()
- {
- return a.toPChar();
- }
- void output()
- {
- a.output();
- }
- void setStruct(int h, int m)
- {
- a.h = h;
- a.m = m;
- }
- Angle getStruct()
- {
- return a;
- }
- //переведення в радіани,
- float rad()
- {
- return a.h*3.14 / 180 + a.m*3.14 / 180 * 60;
- }
- //приведення до діапазону 0 - 360,
- //в інеті найшов
- void normalize()
- {
- if (a.m < 0)
- {
- a.h--;
- a.m += 60;
- }
- if (a.h>0) a.h = a.h % 360;
- else a.h = a.h % 360 + 360;
- }
- //збільшення та зменшення кута на задану величину,
- void increaseAngle(int h, int m)
- {
- a.h += h;
- a.m += m;
- }
- void decreaseAngle(int h, int m)
- {
- a.h -= h;
- a.m -= m;
- }
- //отримання синусу,
- float getSin()
- {
- return sin(rad());
- }
- //порівняння кутів
- //да тоже з інету, але там все понятно
- int angleCmp(TAngle a2)
- {
- int m1 = a.m + a.h * 60;
- int m2 = a2.a.m + a2.a.h * 60;
- if (m1<m2) return -1;
- else if (m1>m2) return 1;
- else return 0;
- }
- };
- //все так само як для функцій у класі, але це функції для структури
- float rad(Angle ang)
- {
- return ang.h*3.14 / 180 + ang.m*3.14 / 180 * 60;
- }
- void normalize(Angle &ang)
- {
- if (ang.m < 0)
- {
- ang.h--;
- ang.m += 60;
- }
- if (ang.h>0) ang.h = ang.h % 360;
- else ang.h = ang.h % 360 + 360;
- }
- void increaseAngle(Angle &ang, int h, int m)
- {
- ang.h += h;
- ang.m += m;
- }
- void decreaseAngle(Angle &ang, int h, int m)
- {
- ang.h -= h;
- ang.m -= m;
- }
- float getSin(Angle ang)
- {
- return sin(rad(ang));
- }
- int angleCmp(Angle a1, Angle a2)
- {
- int m1 = a1.m + a1.h * 60;
- int m2 = a2.m + a2.h * 60;
- if (m1<m2) return -1;
- else if (m1>m2) return 1;
- else return 0;
- }
- int main()
- {
- //приклади сам пиши, заодно розберешся
- Angle a;
- a.input();
- a.output();
- cin.ignore();
- cin.get();
- }
- /* Визначити тип TAngle для роботи з кутами на площині, які задаються величиною в градусах та хвилинах.
- Обов’язково повинно бути реалізовано:
- переведення в радіани,
- приведення до діапазону 0-360,
- збільшення та зменшення кута на задану величину,
- отримання синусу,
- порівняння кутів.*/
Advertisement
Add Comment
Please, Sign In to add comment