Перейти к содержимому

ООП ЛБ1-18б

5. «Правильная числовая дробь»

В задании на 16 есть модуль для сокращения дроби

  1. «Комплексное число»
  2. «Время».
  3. «Дата»
  4. «Денежная сумма»
  5. «Сочетание»
  6. «Размещение»
  7. «Двучлен»
  8. «Трехчлен»
  9. «Точка в двумерном пространстве»
  10. «Вектор в двумерном пространстве»
  11. «Вектор в трехмерном пространстве»
  12. «Отрезок в двумерном пространстве»
  13. «Окружность в двумерном пространстве».
  14. «Сектор круга»
  15. «Кольцо в двумерном пространстве»
  16. «Прямоугольник в двумерном пространстве»
  17. «Треугольник в двумерном пространстве»
  18. «Треугольник в двумерном пространстве»
  19. «Матрица 2×2 вещественных чисел»
  20. «Матрица 3×3 вещественных чисел»
  21. «Счетчик»
  22. «Диапазон на числовой прямой»
  23. «Геометрическая прогрессия»
  24. «Арифметическая прогрессия»

6. «Комплексное число»

#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
using namespace std;
class ComplexNum
{
private:
    double re;
    double im;
public:
    // Конструктор по умолчанию
    ComplexNum()
    {
        re = 0;
        im = 0;
    }
    // Параметрический конструктор
    ComplexNum(double re = 0, double im = 0) {
        this->re = re;
        this->im = im;
    }
    // Конструктор копирования
    ComplexNum(const ComplexNum& other) {
        this->re = other.re;
        this->im = other.im;
    }
    // Конструктор перемещения
    ComplexNum(ComplexNum&& other) noexcept {
        this->re = other.re;
        this->im = other.im;
    }

    // Функция вывода на экран
    void Print()
    {
        if (re == 0) {
            if (im == 0)
                cout << 0;
            else
                cout << im << "*i";
        }
        else {
            cout << re;
            if (im > 0) cout << "+" << im << "*i";
            if (im < 0) cout << im << "*i";
        }
        cout << endl;
    }
    // Функция ввода с экрана
    void Scan()
    {
        double re, im;
        cout << "Введите действительную часть: ";
        cin >> re;
        cout << "Введите мнимую часть: ";
        cin >> im;
        this->re = re;
        this->im = im;
    }
    // Сложение
    ComplexNum Add(ComplexNum other) {
        double re = this->re + other.re;
        double im = this->im + other.im;
        return ComplexNum(re, im);
    }
    // Вычитание
    ComplexNum Diff(ComplexNum other) {
        double re = this->re - other.re;
        double im = this->im - other.im;
        return ComplexNum(re, im);
    }
    // Умножение
    ComplexNum Mul(ComplexNum other) {
        double re = this->re * other.re - this->im * other.im;
        double im = this->re * other.im + this->im * other.re;
        return ComplexNum(re, im);
    }

    // Сложение с числом
    ComplexNum Add(double other) {
        double re = this->re + other;
        double im = this->im;
        return ComplexNum(re, im);
    }
    // Вычитание числа
    ComplexNum Diff(int other) {
        double re = this->re - other;
        double im = this->im;
        return ComplexNum(re, im);
    }
    // Умножение на число
    ComplexNum Mul(double other) {
        double re = this->re * other;
        double im = this->im * other;
        return ComplexNum(re, im);
    }

    // Сравнение на равенство
    bool isEqual(ComplexNum other) {
        return this->re == other.re && this->im == other.im;
    }
    // Сравнение на неравенство
    bool isNotEqual(ComplexNum other) {
        return this->re != other.re || this->im != other.im;
    }
    // Модуль
    double mod() {
        return sqrt(pow(re, 2) + pow(im, 2));
    }
    // Аргумент
    double arg() {
        if (re == 0 && im > 0) return M_PI / 2;
        if (re == 0 && im < 0) return -M_PI / 2;
        if (re > 0) return atan(im / re);
        if (re < 0 && im >= 0) return M_PI + atan(im / re);
        if (re < 0 && im < 0) return -M_PI + atan(im / re);
    }
};

7. «Время»

#include <iostream>
using namespace std;
class Time {
private:
    int hour, minute, second;
public:
    // Конструктор по умолчанию
    Time() {
        hour = 0;
        minute = 0;
        second = 0;
    }
    // Конструктор с параметрами
    Time(int hour, int minute, int second) {
        if (hour > 24 or minute > 60 or second > 60) abort();
        else
        {
            this->hour = hour;
            this->minute = minute;
            this->second = second;
        }
    }
    // Конструктор копирования
    Time(const Time& time)
    {
        hour = time.hour;
        minute = time.minute;
        second = time.second;
    }
    // Конструктор который берет в качестве параметра массив
    Time(int arr[]) {
        hour = arr[0];
        minute = arr[1];
        second = arr[3];
    }

    // Функция нахождение разности двух моментов времени в секундах
    Time Sub(Time& b) {
        Time SubA;
        int sub;
        if (InSecond() < b.InSecond()) sub = b.InSecond() - InSecond();
        else abort();
        hour = sub / 3600;
        minute = (sub - hour * 3600) / 60;
        second = sub - hour * 3600 - minute * 60;
        SubA.hour = hour;
        SubA.minute = minute;
        SubA.second = second;
        return SubA;
    }

    // Функция добавления одной секунды
    Time AddOneSec() {
        Time a;
        second++;
        if (second == 60)
        {
            second = 0;
            minute++;
        }
        if (minute == 60)
        {
            minute = 0;;
            hour++;
        }
        if (hour == 24) hour = 0;
        a.hour = hour;
        a.minute = minute;
        a.second = second;
        return a;
    }

    // Функции сетов
    void setHour(int hour) {
        if (hour < 24) this->hour = hour;
        else abort();
    }
    void setMinute(int minute) {
        if (minute < 60) this->minute = minute;
        else abort();
    }
    void setSecond(int second) {
        if (second < 60) this->second = second;
        else abort();
    }

    // Функции гетов
    int getHour() {
        return hour;
    }
    int getMinute() {
        return minute;
    }
    int getSecond() {
        return second;
    }

    // Функция пероводящая время в секунды
    int InSecond() {
        return hour * 3600 + minute * 60 + second;
    }

    // Функция ввода
    void Input() {
        int h, m, s;
        cout << "Введите время:" << endl;
        cout << endl;
        cout << "Час: ";
        cin >> h;
        setHour(h);
        cout << "Минута: ";
        cin >> m;
        setMinute(m);
        cout << "Секунда: ";
        cin >> s;
        setSecond(s);
    }

    // Функция вывода на экран
    void Print() {
        cout << "\n" << hour << " : " << minute << " : " << second << endl;
    }

    // Функция сравнение двух времен
    bool Equal(Time& n)
    {
        if (n.getHour() == hour and n.getMinute() == minute and n.getSecond() == second)
            return true;
        else return false;
    }
};

8. «Дата»

class Date
{
private:
	int day;
	int month;
	int year;
public:
	// Конструктор по умолчанию
	Date()
	{
		day = 1;
		month = 1;
		year = 0;
	}
	// Параметрический конструктор
	Date(int day, int month, int year) {
		this->day = day;
		this->month = month;
		this->year = year;
	}
	// Конструктор копирования
	Date(const Date& other) {
		this->day = other.day;
		this->month = other.month;
		this->year = other.year;
	}
	// Конструктор перемещения
	Date(Date&& other) noexcept {
		this->day = other.day;
		this->month = other.month;
		this->year = other.year;
	}

	// Функция вывода на экран
	void Print()
	{
		if (day < 10) cout << "0" << day << "."; else cout << day << ".";
		if (month < 10) cout << "0" << month << "."; else cout << month << ".";
		cout << year;
		if (year < 0) cout << " B.C.";
		cout << endl;
	}
	// Функция ввода с экрана
	void Scan()
	{
		int day, month, year;

	dayrepeat:
		cout << "Введите день: ";
		cin >> day;
		if (day <= 0) {
			cout << "День не может быть не положительным\n";
			goto dayrepeat;
		}

	monthrepeat:
		cout << "Введите месяц: ";
		cin >> month;
		if (month <= 0) {
			cout << "Месяц не может быть не положительным\n";
			goto monthrepeat;
		}

		cout << "Введите год: ";
		cin >> year;

		this->day = day;
		this->month = month;
		this->year = year;
	}

	// Сравнение на равенство
	bool isEqual(Date other) {
		return this->day == other.day && this->month == other.month && this->year == other.year;
	}
	// Сравнение на неравенство
	bool isNotEqual(Date other) {
		return this->day != other.day || this->month != other.month || this->year != other.year;
	}
	// Проверка на високосность
	bool isLeap() {
		return year % 400 == 0 || (year % 100 != 0 && year % 4 == 0);
	}
	// Добавление дня
	void addDay() {
		if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10) && day == 31) {
			day == 1;
			month += 1;
		}
		else {
			if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 30) {
				day == 1;
				month++;
			}
			else {
				if (month == 2 && ((this->isLeap() && day == 29) || (!this->isLeap() && day == 28))) {
					day == 1;
					month++;
				}
				else {
					if (day == 31 && month == 12) {
						day == 1;
						month == 1;
						year++;
					}
					else
					{
						day++;
					}
				}
			}
		}
	}

};

9. «Денежная сумма»

#include <iostream>
using namespace std;

class AmountOfMoney {
private:
    int sizeAmount;
    int currencyCode;
    float exchangeRateDollar;
public:
    // Конструктор по умолчанию 
    AmountOfMoney() {
        sizeAmount = 0;
        currencyCode = 0;
        exchangeRateDollar = 0;
    }
    // Конструктор с параметрами
    AmountOfMoney(int sizeAmount, int currencyCode, float exchangeRateDollar) {
        setSizeAmount(sizeAmount);
        setCurrencyCode(currencyCode);
        setExchangeRateDollar(exchangeRateDollar);

    }
    // Конструктор копирования
    AmountOfMoney(const AmountOfMoney& other) {
        this->sizeAmount = other.sizeAmount;
        this->currencyCode = other.currencyCode;
        this->exchangeRateDollar = other.exchangeRateDollar;
    }
    // Конструктор перемещения
    AmountOfMoney(const AmountOfMoney&& other) noexcept {
        this->sizeAmount = other.sizeAmount;
        this->currencyCode = other.currencyCode;
        this->exchangeRateDollar = other.exchangeRateDollar;
    }

    // Функции сетов
    void setSizeAmount(int sizeAmount) {
        if (sizeAmount > 0) this->sizeAmount = sizeAmount;
    }
    void setCurrencyCode(int currencyCode) {
        if (currencyCode > 0) this->currencyCode = currencyCode;
    }
    void setExchangeRateDollar(float exchangeRateDollar) {
        if (exchangeRateDollar > 0) this->exchangeRateDollar = exchangeRateDollar;
    }

    // Функции гетов
    int getSizeAmount() { return sizeAmount; }
    int getCurrencyCode() { return currencyCode; }
    float getExchangeRateDollar() { return exchangeRateDollar; }

    // Функция конвертации в долары
    float SizeAmountInDollar() { return sizeAmount * exchangeRateDollar; }

    // Функци ввывода
    void Print() {
        cout << "Размер суммы: " << sizeAmount << "\tКод: " << currencyCode << "\tКурс по отношению к доллару: " << exchangeRateDollar << endl;
    }
    // Функция ввода
    void Input() {
        int size, code;
        float exDollar;
        cout << "Введите размер суммы: ";
        cin >> size;
        setSizeAmount(size);
        cout << "Введите код валюты: ";
        cin >> code;
        setCurrencyCode(code);
        cout << "Введите курс валюты по отношению к долору: ";
        cin >> exDollar;
        setExchangeRateDollar(exDollar);

    }

    // Функция сравнения
    bool Equal(AmountOfMoney& other) {
        if (getSizeAmount() != other.sizeAmount) return false;
        else if (getCurrencyCode() != other.currencyCode) return false;
        else if (getExchangeRateDollar() != other.exchangeRateDollar) return false;
        else return true;
    }

    // Функция суммы
    AmountOfMoney Sum(AmountOfMoney& b) {
        AmountOfMoney SumInDollar;
        SumInDollar.setSizeAmount(SizeAmountInDollar() + b.SizeAmountInDollar());
        SumInDollar.setCurrencyCode(840);
        SumInDollar.setExchangeRateDollar(1);
        return SumInDollar;
    }

    // Функция отнимания 
    AmountOfMoney Sub(AmountOfMoney& b) {
        AmountOfMoney SubInDollar;
        float sub;
        if (SizeAmountInDollar() < b.SizeAmountInDollar()) sub = b.SizeAmountInDollar() - SizeAmountInDollar();
        else abort();
        SubInDollar.setSizeAmount(sub);
        SubInDollar.setCurrencyCode(840);
        SubInDollar.setExchangeRateDollar(1);
        return SubInDollar;
    }
};

10. «Сочетание»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;
class Combination
{
private:
	int n;
	int m;

	long long factorial(int n) {
		if (n == 1) return 1; else return n * factorial(n - 1);
	}
public:
	// Конструктор по умолчанию
	Combination()
	{
		n = 1;
		m = 1;
	}
	// Параметрический конструктор
	Combination(int n, int m) {
		this->n = n;
		this->m = m;
	}
	// Конструктор копирования
	Combination(const Combination& other) {
		this->n = other.n;
		this->m = other.m;
	}
	// Конструктор перемещения
	Combination(Combination&& other) noexcept {
		this->n = other.n;
		this->m = other.m;
	}

	// Функция вывода на экран
	void Print()
	{
		cout << "C из " << n << " по " << m << endl;
	}
	// Функция ввода с экрана
	void Scan()
	{
		int n, m;

	nrepeat:
		cout << "Введите количество предметов: ";
		cin >> n;
		if (n < 0) {
			cout << "Количество предметов не может быть меньше 0\n";
			goto nrepeat;
		}

	mrepeat:
		cout << "Введите количество выбранных предметов: ";
		cin >> m;
		if (m < 0) {
			cout << "Количество выбранных предметов не может быть меньше 0\n";
			goto mrepeat;
		}

		this->n = n;
		this->m = m;
	}

	// Сравнение на равенство
	bool isEqual(Combination other) {
		return this->n == other.n && this->m == other.m;
	}
	// Сравнение на неравенство
	bool isNotEqual(Combination other) {
		return this->n != other.n || this->m != other.m;
	}

	//Вычисление числа сочетаний
	long long combinations() {
		return factorial(n) / (factorial(n - m) * factorial(m));
	}
};

11. «Размещение»

#include <iostream>
#include <cmath>
using namespace std;

class Placement {
private:
    int n;
    int m;
public:
    Placement() {
        n = 0;
        m = 0;
    }
    Placement(int n, int m) {
        setN(n);
        setM(m);
    }
    Placement(Placement& other) {
        n = other.n;
        m = other.m;
    }
    Placement(Placement&& other) {
        n = other.n;
        m = other.m;
    }
    void setN(int n) { this->n = n; }
    void setM(int m) { this->m = m; }
    int getN() { return n; }
    int getM() { return m; }

    void Input() {
        int n, m;
        cout << "Введите количество элементов m: ";
        cin >> m;
        cout << "Введите количество перестановок n: ";
        cin >> n;
        if (m <= n) {
            setN(n);
            setM(m);
        }
        else abort();
    }

    void Print() {
        cout << "Размещение из n: "<< n << "объектов по m: " << m << endl;
    }

    bool isEqual(Placement& other) {
        if (n == other.n && m == other.m) return true;
        else return false;
    }
    int factorial(int number) {
        if (number <= 1) return 1;
        else return number * factorial(number - 1);
    }
    int PlacementA() { return factorial(n) / factorial(n - m); }

    int sub (Placement other) {
        if (PlacementA() > other.PlacementA())
            return PlacementA() - other.PlacementA();
        else abort();
    }
};

12. «Двучлен»

#include <iostream>
using namespace std;

class Binomial {
private:
    int x0;
    int x1;
public:
    Binomial() {
        x0 = 0;
        x1 = 0;
    }
    Binomial(int x1, int x0) {
        this->x1 = x1;
        this->x0 = x0;
    }
    Binomial(const Binomial& other) {
        this->x1 = other.x1;
        this->x0 = other.x0;
    }
    Binomial(const Binomial&& other) {
        this->x1 = other.x1;
        this->x0 = other.x0;
    }

    Binomial Sum(const Binomial& other) {
        Binomial add;
        add.x0 = this->x0 + other.x0;
        add.x1 = this->x1 + other.x1;
        return add;
    }
    Binomial Sub(const Binomial& other) {
        Binomial sub;
        sub.x0 = this->x0 - other.x0;
        sub.x1 = this->x1 - other.x1;
        return sub;
    }
    Binomial SumWithFloat(float number) {
        Binomial add;
        add.x0 += number;
        add.x1 = x1;
        return add;
    }
    Binomial MultipleWithFloat(float number) {
        Binomial multi;
        multi.x0 = x0 * number;
        multi.x1 = x1 * number;
        return multi;
    }
    int Calculating(int x) {
        return x1 * x + x0;
    }
    float BinomialSolutions() {
        return (float)-x0 / (float)x1;
    }
    bool Eqvil(const Binomial& other) {
        return this->x0 == other.x0 and this->x1 == other.x1;
    }

    void Input()
    {
        cout << "Введите коэффициент х при первом степени: ";
        cin >> x1;
        cout << "Введите коэффициент х при нолевой степени: ";
        cin >> x0;
    }
    void Print() {
        if (x0 > 0 and x1 != 0 and x1 != 1) cout << x1 << "x" << " + " << x0 << endl;
        else if (x0 < 0 and x0 != 0) cout << x1 << "x" << " - " << -x0 << endl;
        else if (x1 == 0) cout << x0 << endl;
        else if (x0 == 0) cout << x1 << "x" << endl;
        else if (x1 == 1) cout << "x" << " + " << x0 << endl;
        else abort();
    }

};

13. «Трехчлен»

#include <iostream>
using namespace std;

class Trinomial {
private:
    int term1, term2, term3;
public:
    Trinomial() {
        term1 = 0;
        term2 = 0;
        term3 = 0;
    }
    Trinomial(int term1, int term2, int term3) {
        this->term1 = term1;
        this->term2 = term2;
        this->term3 = term3;
    }
    Trinomial(Trinomial& other) {
        term1 = other.term1;
        term2 = other.term2;
        term3 = other.term3;
    }
    Trinomial(Trinomial&& other) {
        term1 = other.term1;
        term2 = other.term2;
        term3 = other.term3;
    }

    Trinomial Sum(Trinomial& b) {
        Trinomial result;
        result.term1 = term1 + b.term1;
        result.term2 = term2 + b.term2;
        result.term3 = term3 + b.term3;
        return result;
    }

    Trinomial Sub(Trinomial& b) {
        Trinomial result;
        result.term1 = term1 - b.term1;
        result.term2 = term2 - b.term2;
        result.term3 = term3 - b.term3;
        return result;
    }

    bool Equal(Trinomial& other) {
        if (term1 == other.term1 && term2 == other.term2 && term3 == other.term3) return true;
        else false;
    }

    Trinomial SumWithFloat(float n) {
        Trinomial result;
        result.term1 = term1;
        result.term2 = term2;
        result.term3 = term3 + n;
        return result;
    }

    Trinomial MultipleWithFloat(float n) {
        Trinomial result;
        result.term1 = term1 * n;
        result.term2 = term2 * n;
        result.term3 = term3 * n;
        return result;
    }

    int Calculating(int x) {
        int result;
        result = x * term1 * term1 + x * term2 + term3;
    }
    void Input() {
        cout << "Введите первый коэффициент";
        cin >> term1;
        cout << "Введите второй коэффициент";
        cin >> term2;
        cout << "Введите третий коэффициент";
        cin >> term3;
    }
    void Print() {
        if (term2 > 0 && term3 > 0 && term1 != 1 && term2 != 1) cout << term1 << "x^2 + " << term2 << "x + " << term3 << endl;
        else if (term2 < 0 && term3 > 0 && term1 != 1) cout << term1 << "x^2 - " << -term2 << "x + " << term3 << endl;
        else if (term3 < 0 && term2 > 0 && term2 != 1) cout << term1 << "x^2 + " << term2 << "x - " << -term3 << endl;
        else if (term2 < 0 && term3 < 0 && term1 != 1) cout << term1 << "x^2 - " << -term2 << "x - " << -term3 << endl;
        else if (term1 == 1 && term2 != 1) cout << "x^2 + " << term2 << "x + " << term3 << endl;
        else if (term2 == 1 && term1 != 1) cout << term1 << "x^2 + " << "x + " << term3 << endl;
        else if (term1 == 1 && term2 == 1) cout << "x^2 + " << "x + " << term3 << endl;
        else abort();
    }
};

14. «Точка в двумерном пространстве»

#include <iostream>
#include <cmath>
using namespace std;

class Point {
private:
    double x, y;
public:
    Point() {
        x = 0;
        y = 0;
    }
    Point(double x, double y) {
        this->x = x;
        this->y = y;
    }
    Point(Point& other) {
        this->x = other.x;
        this->y = other.y;
    }
    Point(Point&& other) {
        this->x = other.x;
        this->y = other.y;
    }
    void Input() {
        cout << "Enter point" << endl;
        cout << "Enter x: ";
        cin >> this->x;
        cout << "Enter y: ";
        cin >> this->y;
    }
    void Print() {
        cout << "x: " << x << "\ty: " << y << endl;
    }
    bool Eqvil(Point& other) {
        return this->x == other.x && this->y == other.y;
    }
    void InWhichSquare() {
        if (x > 0 && y > 0) cout << "The point is in the I coordinate square" << endl;
        else if (x < 0 && y > 0) cout << "The point is in the II coordinate square" << endl;
        else if (x < 0 && y < 0) cout << "The point is in the III coordinate square" << endl;
        else if (x > 0 && y < 0) cout << "The point is in the IV coordinate square" << endl;
        else cout << "The point is at the start of the coordinates" << endl;
    }
    double Distance(Point& b) {
        return sqrt(pow(b.x - x, 2) + pow(b.y - y, 2));
    }
};

15. «Вектор в двумерном пространстве»

#include <iostream>
using namespace std;

class Vector {
private:
    float v1, v2;
public:
    Vector() {
        v1 = 0;
        v2 = 0;
    }
    Vector(float v1, float v2) {
        this->v1 = v1;
        this->v2 = v2;
    }
    Vector(Vector& other) {
        this->v1 = other.v1;
        this->v2 = other.v2;
    }
    Vector(Vector&& other) {
        this->v1 = other.v1;
        this->v2 = other.v2;
    }
    void Input() {
        cout << "Enter a vector" << endl;
        cout << "Enter the coordinates of x: ";
        cin >> v1;
        cout << "Enter the coordinates of y: ";
        cin >> v2;
    }
    void Print() {
        cout << "x: " << v1 << "\ty: " << v2 << endl;
    }
    Vector Sum(Vector& other) {
        Vector sum;
        sum.v1 = this->v1 + other.v1;
        sum.v2 = this->v2 + other.v2;
        return sum;
    }
    Vector Sub(Vector& other) {
        Vector sub;
        sub.v1 = this->v1 - other.v1;
        sub.v2 = this->v2 - other.v2;
        return sub;
    }
    bool Eqvil(Vector& other) {
        return this->v1 == other.v1 && this->v2 == other.v2;
    }
    Vector MultiplyWithNumber(int number) {
        Vector multiply;
        multiply.v1 = this->v1 * number;
        multiply.v2 = this->v2 * number;
        return multiply;
    }

    float Module() {
        return sqrt(pow(v1, 2) + pow(v2, 2));
    }
    float ScalarProduct(Vector& other) {
        return this->v1 * other.v1 + this->v2 * other.v2;
    }
};

16. «Вектор в трехмерном пространстве»

#include <iostream>

using namespace std;
class Vector {
private:
    float v1, v2, v3;
public:
    Vector() {
        v1 = 0;
        v2 = 0;
        v3 = 0;
    }
    Vector(float v1, float v2) {
        this->v1 = v1;
        this->v2 = v2;
        this->v3 = v3;
    }
    Vector(Vector& other) {
        this->v1 = other.v1;
        this->v2 = other.v2;
        this->v3 = other.v3;

    }
    Vector(Vector&& other) {
        this->v1 = other.v1;
        this->v2 = other.v2;
        this->v3 = other.v3;
    }
    void Input() {
        cout << "Enter a vector" << endl;
        cout << "Enter the coordinates of x: ";
        cin >> v1;
        cout << "Enter the coordinates of y: ";
        cin >> v2;
        cout << "Enter the coordinates of z: ";
        cin >> v3;
    }
    void Print() {
        cout << "x: " << v1 << "\ty: " << v2 << "\tz: " << v3 << endl;
    }
    Vector Sum(Vector& other) {
        Vector sum;
        sum.v1 = this->v1 + other.v1;
        sum.v2 = this->v2 + other.v2;
        sum.v3 = this->v3 + other.v3;
        return sum;
    }
    Vector Sub(Vector& other) {
        Vector sub;
        sub.v1 = this->v1 - other.v1;
        sub.v2 = this->v2 - other.v2;
        sub.v3 = this->v3 - other.v3;
        return sub;
    }
    bool Eqvil(Vector& other) {
        return this->v1 == other.v1 && this->v2 == other.v2 && this->v3 == other.v3;
    }
    Vector MultiplyWithNumber(int number) {
        Vector multiply;
        multiply.v1 = this->v1 * number;
        multiply.v2 = this->v2 * number;
        multiply.v3 = this->v3 * number;
        return multiply;
    }

    float Module() {
        return sqrt(pow(v1, 2) + pow(v2, 2) + pow(v3, 2));
    }
    float ScalarProduct(Vector& other) {
        return this->v1 * other.v1 + this->v2 * other.v2 + this->v3 * other.v3;
    }
};

17. «Отрезок в двумерном пространстве»

#include <iostream>
using namespace std;

class Segment {
private:
    int Ax;
    int Ay;
    int Bx;
    int By;
public:
    Segment() {
        Ax = 0;
        Ay = 0;
        Bx = 0;
        By = 0;
    }
    Segment(int Ax, int Ay, int Bx, int By) {
        this->Ax = Ax;
        this->Ay = Ay;
        this->Bx = Bx;
        this->By = By;
    }
    Segment(Segment& other) {
        this->Ax = other.Ax;
        this->Ay = other.Ay;
        this->Bx = other.Bx;
        this->By = other.By;
    }
    Segment(Segment&& other) {
        this->Ax = other.Ax;
        this->Ay = other.Ay;
        this->Bx = other.Bx;
        this->By = other.By;
    }

    bool isEqvil(Segment& other) {
        return this->Ax == other.Ax && this->Ay == other.Ay && this->Bx && other.Bx && this->By == other.By;
    }
    bool isCrossover(Segment& other) {
        return other.Bx < Ax&& other.Ax > By && other.By < Ay&& other.Ay > By;
    }
    bool isParallel(Segment& other) {
        return Ay / other.Ay == By / other.By;
    }
    void Input() {
        cout << "Введите две точки А и В" << endl;
        cout << "Введите х для точки А: ";
        cin >> Ax;
        cout << "Введите y для точки А: ";
        cin >> Ay;
        cout << endl;
        cout << "Введите х для точки B: ";
        cin >> Bx;
        cout << "Введите y для точки B: ";
        cin >> By;
    }
    void Print() {
        cout << "A(" << Ax << ", " << Ay << ")" << endl;
        cout << "B(" << Bx << ", " << By << ")" << endl;

    }
};

18. «Окружность в двумерном пространстве»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class CircleInTwoDimensions
{
private:
	double x;
	double y;
	double r;
public:

	//конструктор по умолчанию
	CircleInTwoDimensions() {
		x = 0;
		y = 0;
		r = 0;
	}

	//параметрический конструктор
	CircleInTwoDimensions(double x, double y, double r) {
		this->x = x;
		this->y = y;
		this->r = r;
	}

	//конструктор копирования
	CircleInTwoDimensions(const CircleInTwoDimensions& object) {
		this->x = object.x;
		this->y = object.y;
		this->r = object.r;
	}

	//конструктор перемещения
	CircleInTwoDimensions(CircleInTwoDimensions&& object) noexcept {
		this->x = object.x;
		this->y = object.y;
		this->r = object.r;
	}

	//функция ввода
	void input() {
		double x, y, r;
		cout << "Введите координату х -> ";
		cin >> x;
		cout << "Введите координату y -> ";
		cin >> y;

		do {
			cout << "Введите радиус r -> ";
			cin >> r;
			if (r < 0)cout << "Радиус не может быть отрицательным";
		} while (r <= 0);

		this->x = x;
		this->y = y;
		this->r = r;
	}

	//сравнение окружностей
	bool comparison(CircleInTwoDimensions object) {
		if (object.r > this->r) return true;
		else return false;
	}

	//функция вычисления периметра окружности
	double perimeter() {
		return 2 * M_PI * r;
	}

	//функция вычисления площади окружности
	double sqaure() {
		return M_PI * r * r;
	}

	//функция проверки на пересечение окружностей
	bool crossingChecking(CircleInTwoDimensions object) {
		//если у окружностей совпадают центры окружности и их радиусы равны, пересечение будет; 
		//если центры окружностей совпадают но радиусы разные, пересечения нет
		if (object.x == this->x && object.y == this->y) {
			if (object.r == this->r) return true;
			else return false;
		}
		if (sqrt(pow(object.x - this->x, 2) + pow(object.y - this->y, 2)) <= object.r + this->r) return true;
		if (sqrt(pow(object.x - this->x, 2) + pow(object.y - this->y, 2)) > object.r + this->r) return false;
	}

	//проверка на концентричность окружностей
	bool ifConcentricity(CircleInTwoDimensions object) {
		if (object.x == this->x && object.y == this->y) return true;
		else return false;
	}
};

19. «Сектор круга»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class CircleSector {
private:
	double corner;
	double r;
public:

	//конструктор по умолчанию
	CircleSector() {
		corner = 0;
		r = 0;
	}

	//параметрический конструктор
	CircleSector(double corner, double r) {
		this->corner = corner;
		this->r = r;
	}

	//конструктор копирования
	CircleSector(const CircleSector& object) {
		this->corner = object.corner;
		this->r = object.r;
	}

	//конструктор перемещения
	CircleSector(CircleSector&& object) noexcept {
		this->corner = object.corner;
		this->r = object.r;
	}

	//функция ввода
	void input() {
		double corner, r;

		do {
			cout << "Введите угол сектора corner -> ";
			cin >> corner;
			if (corner < 0) cout << "Угол не может быть отрицательным";
			if (corner == 0)cout << "Укажите угол сектора";
		} while (corner <= 0);

		do {
			cout << "Введите радиус r -> ";
			cin >> r;
			if (r < 0)cout << "Радиус не может быть отрицательным";
			if (r == 0)cout << "Укажите радиус окружности";
		} while (r <= 0);

		this->corner = corner;
		this->r = r;
	}

	//сравнение секторов по площади
	bool comparison(CircleSector object) {
		if ((M_PI * object.r * object.r * (object.corner / 360)) == (M_PI * this->r * this->r * (this->corner / 360))) return true;
		else return false;
	}

	//функция вычисления периметра
	double perimeter() {
		return 2 * M_PI * r * (corner / 360);
	}

	//функция вычисления площади
	double sqaure() {
		return M_PI * r * r * (corner / 360);
	}

};

20. «Кольцо в двумерном пространстве»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class Rings {
private:
	double x;
	double y;
	double r1;
	double r2;
public:

	//конструктор по умолчанию
	Rings() {
		x = 0;
		y = 0;
		r1 = 0;
		r2 = 0;
	}

	//параметрический конструктор
	Rings(double x, double y, double r1, double r2) {
		this->x = x;
		this->y = y;
		this->r1 = r1;
		this->r2 = r2;
	}

	//конструктор копирования
	Rings(const Rings& object) {
		this->x = object.x;
		this->y = object.y;
		this->r1 = object.r1;
		this->r2 = object.r2;
	}

	//конструктор перемещения
	Rings(Rings&& object) noexcept {
		this->x = object.x;
		this->y = object.y;
		this->r1 = object.r1;
		this->r2 = object.r2;
	}

	//функция ввода
	void input() {
		double x, y, r;
		cout << "Введите координату х -> ";
		cin >> x;
		cout << "Введите координату y -> ";
		cin >> y;

		do {
			cout << "Введите радиус r1 -> ";
			cin >> r;
			if (r1 < 0)cout << "Радиус не может быть отрицательным";
		} while (r1 <= 0);

		do {
			cout << "Введите радиус r2 -> ";
			cin >> r;
			if (r2 < 0)cout << "Радиус не может быть отрицательным";
		} while (r2 <= 0);

		this->x = x;
		this->y = y;
		this->r1 = r1;
		this->r2 = r2;
	}

	//сравнение колец
	bool comparison(Rings object) {
		double s11, s12, s21, s22;
		s11 = M_PI * this->r1 * this->r1;
		s12 = M_PI * this->r2 * this->r2;
		s21 = M_PI * object.r1 * object.r1;
		s22 = M_PI * object.r2 * object.r2;

		if (abs(s11 - s12) == abs(s21 - s22)) return true;
		else return false;
	}

	//функция вычисления периметра кольца (сумма периметров внутренней и внешней окружности)
	double perimeter() {
		return 2 * M_PI * r1 + 2 * M_PI * r2;
	}

	//функция вычисления площади кольца
	double sqaure() {
		double s1, s2;
		s1 = M_PI * r1 * r1;
		s2 = M_PI * r2 * r2;
		return abs(s1-s2);
	}
};

21. «Прямоугольник в двумерном пространстве»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class Rectangles {
private:
	double x;
	double y;
	double width;
	double height;

public:

	//конструктор по умолчанию
	Rectangles() {
		x = 0;
		y = 0;
		width = 0;
		height = 0;
	}

	//параметрический конструктор
	Rectangles(double x, double y, double width, double height) {
		this->x = x;
		this->y = y;
		this->width = width;
		this->height = height;
	}

	//конструктор копирования
	Rectangles(const Rectangles& object) {
		this->x = object.x;
		this->y = object.y;
		this->width = object.width;
		this->height = object.height;
	}

	//конструктор перемещения
	Rectangles(Rectangles&& object) noexcept {
		this->x = object.x;
		this->y = object.y;
		this->width = object.width;
		this->height = object.height;
	}

	//функция ввода
	void input() {
		double x, y, r;
		cout << "Введите координату х -> ";
		cin >> x;
		cout << "Введите координату y -> ";
		cin >> y;

		do {
			cout << "Введите ширину width -> ";
			cin >> r;
			if (width < 0)cout << "Ширина не может быть отрицательной";
		} while (width <= 0);

		do {
			cout << "Введите высоту height -> ";
			cin >> r;
			if (height < 0)cout << "Высота не может быть отрицательной";
		} while (height <= 0);

		this->x = x;
		this->y = y;
		this->width = width;
		this->height = height;
	}

	//сравнение прямоугольников
	bool comparison(Rectangles object) {
		double s1, s2;
		s1 = this->width * this->height;
		s2 = object.width * object.width;

		if (s1 == s2) return true;
		else return false;
	}

	//функция вычисления периметра
	double perimeter() {
		return (width + height) * 2;
	}

	//функция вычисления площади
	double sqaure() {
		return width * height;
	}
};

22. «Треугольник в двумерном пространстве»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class Triangles
{
private:
	double a;
	double b;
	double c;
public:

	//конструктор по умолчанию
	Triangles() {
		a = 0;
		b = 0;
		c = 0;
	}

	//параметрический конструктор
	Triangles(double a, double b, double c) {
		this->a = a;
		this->b = b;
		this->c = c;
	}

	//конструктор копирования
	Triangles(const Triangles& object) {
		this->a = object.a;
		this->b = object.b;
		this->c = object.c;
	}

	//конструктор перемещения
	Triangles(Triangles&& object) noexcept {
		this->a = object.a;
		this->b = object.b;
		this->c = object.c;
	}

	//функция ввода
	void input() {
		double a, b, c;
		bool check_traingle_rool = false;

		do {

			do {
				cout << "Введите длину первой стороны a -> ";
				cin >> a;
				if (a < 0)cout << "Сторона не может быть отрицательной";
				if (a == 0)cout << "Введите значение стороны";
			} while (a <= 0);

			do {
				cout << "Введите длину второй стороны b-> ";
				cin >> b;
				if (b < 0)cout << "Сторона не может быть отрицательной";
				if (b == 0)cout << "Введите значение стороны";
			} while (b <= 0);

			do {
				cout << "Введите длину третьей стороны c-> ";
				cin >> c;
				if (c < 0)cout << "Сторона не может быть отрицательной";
				if (c == 0)cout << "Введите значение стороны";
			} while (c <= 0);

			if (a + b > c || a + c > b || b + c > a) check_traingle_rool = true;
		} while (check_traingle_rool == false);


		this->a = a;
		this->b = b;
		this->c = c;
	}

	// функция сравнения треугольников
	bool comparison(Triangles object) {
		double s1, s2, p1, p2;  // p - полупериметр
		p1 = (this->a + this->b + this->c) / 2;
		p2 = (object.a + object.b + object.c) / 2;
		s1 = sqrt(p1 * (p1 - this->a) * (p1 - this->b) * (p1 - this->c));
		s2 = sqrt(p2 * (p2 - object.a) * (p2 - object.b) * (p2 - object.c));

		if (s1 == s2) return true;
		else return false;
	}


	//функция вычисления периметра 
	double perimeter() {
		return a + b + c;
	}

	//функция вычисления площади 
	double sqaure() {
		double p, s; // р - полупериметр
		p = (this->a + this->b + this->c) / 2;
		s = sqrt(p * (p - this->a) * (p - this->b) * (p - this->c));
		return s;
	}

	//функция проверки треугольника на прямоугольность
	bool isRectangular() {
		if ((a * a == b * b + c * c) || (b * b == a * a + c * c) || (c * c == a * a + b * b)) return true;
		else return false;
	}

	//функция проверки треугольника на равнобедренность
	bool isIsosceles() {
		if (a == b || a == c || b == c) return true;
		else return false;
	}

	//функция проверки треугольника на равносторонность
	bool isEquilateral() {
		if (a == b == c) return true;
		else return false;
	}
};

23. «Треугольник в двумерном пространстве»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class Triangles
{
private:
	double aX;
	double aY;
	double bX;
	double bY;
	double cX;
	double cY;
public:

	//конструктор по умолчанию
	Triangles() {
		aX = 0;
		aY = 0;
		bX = 0;
		bY = 0;
		cX = 0;
		cY = 0;
	}

	//параметрический конструктор
	Triangles(double aX, double aY, double bX, double bY, double cX, double cY) {
		this->aX = aX;
		this->aY = aY;
		this->bX = bX;
		this->bY = bY;
		this->cX = cX;
		this->cY = cY;
	}

	//конструктор копирования
	Triangles(const Triangles& object) {
		this->aX = object.aX;
		this->aY = object.aY;
		this->bX = object.bX;
		this->bY = object.bY;
		this->cX = object.cX;
		this->cY = object.cY;
	}

	//конструктор перемещения
	Triangles(Triangles&& object) noexcept {
		this->aX = object.aX;
		this->aY = object.aY;
		this->bX = object.bX;
		this->bY = object.bY;
		this->cX = object.cX;
		this->cY = object.cY;
	}

	//функция ввода
	void input() {
		double aX, aY, bX, bY, cX, cY;
		cout << "Введите координаты точки a: ";
		cin >> aX >> aY;
		cout << "Введите координаты точки b: ";
		cin >> bX >> bY;
		cout << "Введите координаты точки c: ";
		cin >> cX >> cY;

		this->aX = aX;
		this->aY = aY;
		this->bX = bX;
		this->bY = bY;
		this->cX = cX;
		this->cY = cY;
	}

	// функция сравнения треугольников
	bool comparison(Triangles object) {
		double s1, s2;
		s1 = 1 / 2 * ((this->bX - this->aX) * (this->cY - this->aY) - (this->cX - this->aX) * (this->bY - this->aY));
		s2 = 1 / 2 * ((object.bX - object.aX) * (object.cY - object.aY) - (object.cX - object.aX) * (object.bY - object.aY));

		if (s1 == s2) return true;
		else return false;
	}


	//функция вычисления периметра 
	double perimeter() {
		double a, b, c; // длины сторон треугольника
		a = sqrt(pow((bX - aX), 2) - pow((bY - aY), 2));
		b = sqrt(pow((cX - bX), 2) - pow((cY - bY), 2));
		c = sqrt(pow((aX - cX), 2) - pow((aY - cY), 2));
		return a + b + c;
	}

	//функция вычисления площади 
	double sqaure() {
		double s;
		s = 1 / 2 * ((this->bX - this->aX) * (this->cY - this->aY) - (this->cX - this->aX) * (this->bY - this->aY));
		return s;
	}

	// функция проверки попадения произвольной точки в треугольник
	bool check(double oX, double oY) {

		// использую метод сравнения площадей: если точка попадает в треугольник, то при соединении с вершинами она разбивает его на 3 треугольника
		// находим площади этих треугольников и сравниваем их с площадью исходного треугольника
		// соответственно, если сумма больше, то точка выходит за пределы треугольника

		double s1, s2, s3, s;
		s1 = 1 / 2 * ((bX - aX) * (oY - aY) - (oX - aX) * (bY - aY));
		s2 = 1 / 2 * ((cX - bX) * (oY - bY) - (oX - bX) * (cY - bY));
		s3 = 1 / 2 * ((oX - aX) * (cY - aY) - (cX - aX) * (oY - aY));
		s = 1 / 2 * ((bX - aX) * (cY - aY) - (cX - aX) * (bY - aY));

		if (s1 + s2 + s3 == s) return true;
		else return false;
	}
};

24. «Матрица 2×2 вещественных чисел»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class Matrix {
private:
	static double mas[2][2];
public:

	//конструктор по умолчанию
	Matrix() {
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				mas[i][j] = 0;
	}

	//параметрический конструктор
	Matrix(double arr[2][2]) {
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				mas[i][j] = arr[i][j];
	}

	//конструктор копирования
	Matrix(const Matrix& object) {
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				this->mas[i][j] = object.mas[i][j];
	}

	//конструктор перемещения
	Matrix(Matrix&& object) noexcept {
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				this->mas[i][j] = object.mas[i][j];
	}

	//функция ввода
	void input() {
		cout << "Заполните массив 2х2 ->" << endl;
		for (int i = 0; i < 2; i++) {
			for (int j = 0; j < 2; j++)
			{
				cin >> mas[i][j];
			}
			cout << endl;
		}
	}

	// функция сложения матриц
	Matrix sum(Matrix object) {
		double arr[2][2];
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				arr[i][j] = this->mas[i][j] + object.mas[i][j];
		return Matrix(arr);
	}

	// функция умножения матриц
	Matrix mul(Matrix object) {
		double arr[2][2];
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				for (int count = 0; count < 2; count++)
					arr[i][j] += this->mas[i][j] * object.mas[i][j];
		return Matrix(arr);
	}

	// функция умножения матрицы на число
	Matrix mulOnNumber(double number) {
		double arr[2][2];
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				arr[i][j] = this->mas[i][j] * number;
		return Matrix(arr);
	}

	// функция сравнения
	bool comparison(Matrix object) {
		bool check = false;
		for (int i = 0; i < 2; i++) {
			for (int j = 0; j < 2; j++) {
				if (this->mas[i][j] == object.mas[i][j]) check = true;
				else {
					check = false; break;
				}
			}
		}
		return check;
	}

	// функция вычисления определителя матрицы
	double determinant() {
		double det;
		det = mas[0][0] * mas[1][1] - mas[0][1] * mas[1][0];
		return det;
	}

	// функция транспонирования матрицы
	void transposition() {
		double arr[2][2];
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				arr[i][j] = mas[j][i];

		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++)
				mas[i][j] = arr[i][j];
	}
};

25. «Матрица 3×3 вещественных чисел»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class Matrix {
private:
	static double mas[3][3];
public:

	//конструктор по умолчанию
	Matrix() {
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				mas[i][j] = 0;
	}

	//параметрический конструктор
	Matrix(double arr[3][3]) {
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				mas[i][j] = arr[i][j];
	}

	//конструктор копирования
	Matrix(const Matrix& object) {
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				this->mas[i][j] = object.mas[i][j];
	}

	//конструктор перемещения
	Matrix(Matrix&& object) noexcept {
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				this->mas[i][j] = object.mas[i][j];
	}

	//функция ввода
	void input() {
		cout << "Заполните массив 2х2 ->" << endl;
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++)
			{
				cin >> mas[i][j];
			}
			cout << endl;
		}
	}

	// функция сложения матриц
	Matrix sum(Matrix object) {
		double arr[3][3];
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				arr[i][j] = this->mas[i][j] + object.mas[i][j];
		return Matrix(arr);
	}

	// функция умножения матриц
	Matrix mul(Matrix object) {
		double arr[3][3];
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				for (int count = 0; count < 3; count++)
					arr[i][j] += this->mas[i][j] * object.mas[i][j];
		return Matrix(arr);
	}

	// функция умножения матрицы на число
	Matrix mulOnNumber(double number) {
		double arr[3][3];
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				arr[i][j] = this->mas[i][j] * number;
		return Matrix(arr);
	}

	// функция сравнения
	bool comparison(Matrix object) {
		bool check = false;
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				if (this->mas[i][j] == object.mas[i][j]) check = true;
				else {
					check = false; break;
				}
			}
		}
		return check;
	}

	// функция вычисления определителя матрицы
	double determinant() {
		double det;
		det = mas[0][0] * mas[1][1] * mas[2][2] - mas[0][0] * mas[1][2] * mas[2][1]
			- mas[0][1] * mas[1][0] * mas[2][2] + mas[0][1] * mas[1][2] * mas[2][0]
			+ mas[0][2] * mas[1][0] * mas[2][1] - mas[0][2] * mas[1][1] * mas[2][0];
		return det;
	}

	// функция транспонирования матрицы
	void transposition() {
		double arr[3][3];
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				arr[i][j] = mas[j][i];

		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++)
				mas[i][j] = arr[i][j];
	}
};

26. «Счетчик»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class Counter {
private:
	double min_v;
	double max_v;
	double now_v;
	double step;
public:
	
	//конструктор по умолчанию
	Counter() {
		min_v = 0;
		max_v = 0;
		now_v = 0;
		step = 0;
	}

	//параметрический конструктор
	Counter(double min_v, double max_v,	double now_v, double step) {
		this->min_v = min_v;
		this->max_v = max_v;
		this->now_v = now_v;
		this->step = step;
	}

	//конструктор копирования
	Counter(const Counter& object) {
		this->min_v = object.min_v;
		this->max_v = object.max_v;
		this->now_v = object.now_v;
		this->step = object.step;
	}

	//конструктор перемещения
	Counter(Counter&& object) noexcept {
		this->min_v = object.min_v;
		this->max_v = object.max_v;
		this->now_v = object.now_v;
		this->step = object.step;
	}

	//функция ввода
	void input() {
		double min_v, max_v, now_v, step;
		cout << "Введите минимальное значение счетчика";
		cin >> min_v;
		cout << "Введите максимальное значение счетчика";
		cin >> max_v;
		cout << "Введите текущее значение счетчика";
		cin >> now_v;
		cout << "Введите шаг значение счетчика";
		cin >> step;

		this->min_v = min_v;
		this->max_v = max_v;
		this->now_v = now_v;
		this->step = step;
	}

	// функция сравнения
	bool comparison(Counter object) {
		if (this->min_v == object.min_v && this->max_v == object.max_v && this->step == object.step) return true;
		else return false;
	}

	// функция приращения на шаг
	void push() {
		now_v += step;
	}

	// функция уменьшения на шаг
	void pull() {
		now_v -= step;
	}

	// функция получения текущего значения счетчика
	double getCounter() {
		return now_v;
	}
};

27. «Диапазон на числовой прямой»

#define _USE_MATH_DEFINES 
#include <cmath>
#include <iostream>
using namespace std;

class NumberLine {
private:
	double left_border;
	double right_border;
public:

	// конструктор по умолчанию
	NumberLine() {
		this->left_border = 0;
		this->right_border = 0;
	}

	// параметрический конструктор
	NumberLine(double left_border, double right_border) {
		this->left_border = left_border;
		this->right_border = right_border;
	}

	// конструктор копирования
	NumberLine(const NumberLine& object) {
		this->left_border = left_border;
		this->right_border = right_border;
	}

	// конструктор перемещения
	NumberLine(NumberLine&& object) noexcept {
		this->left_border = left_border;
		this->right_border = right_border;
	}

	// функция ввода
	void input() {
		double left_border, right_border;
		cout << "Введите левую границу ->";
		cin >> left_border;
		cout << "Введите правую границу ->";
		cin >> right_border;

		this->left_border = left_border;
		this->right_border = right_border;
	}

	// сравнение диапазонов
	bool comparison(NumberLine object) {
		if (this->left_border == object.left_border && this->right_border == object.right_border) return true;
		else return false;
	}

	// функция нахождения длины диапазона
	double length() {
		double length;
		length = right_border - left_border;
		return length;
	}

	// функция проверки попадания числа в диапазон
	bool check(double number) {
		if (number > left_border && number < right_border) return true;
		else return false;
	}

	// функция проверки не пересекаются ли диапазоны
	bool checkCrossing(NumberLine object) {
		if ((object.left_border >= this->left_border && object.left_border <= this->right_border) || (object.right_border >= this->left_border && object.right_border <= this->right_border)) return true;
		else return false;
	}
};

28. «Геометрическая прогрессия»

#include <iostream>
#include <cmath>
using namespace std;

class GeometricProgression {
private:
    int first;
    int step;
public:
    GeometricProgression() {
        first = 0;
        step = 0;
    }
    GeometricProgression(int first, int step) {
        this->first = first;
        this->step = step;
    }
    GeometricProgression(GeometricProgression& other) {
        this->first = other.first;
        this->step = other.step;
    }
    GeometricProgression(GeometricProgression&& other) {
        this->first = other.first;
        this->step = other.step;
    }
    GeometricProgression Sum(GeometricProgression&& other) {
        GeometricProgression sum;
        if (step != other.step) abort();
        sum.first = first + other.first;
        sum.step = step;
        return sum;
    }
    GeometricProgression Sub(GeometricProgression&& other) {
        GeometricProgression sub;
        if (step != other.step) abort();
        sub.first = first - other.first;
        sub.step = step;
        return sub;
    }
    GeometricProgression MultiplyWithNum (int n){
        GeometricProgression multiply;
        multiply.first = first * n;
        multiply.step = step;
        return multiply;
    }
    int SumOfN(int n) {
        return first * (pow(step, n) - 1) / step - 1;
    }

    int GetNthTerm(int n) {
        return first * pow(step, n -1);
    }

    void Input() {
        cout << "Введите первый елемент геометрической прогресии b1: ";
        cin >> first;
        cout << "Введите шаг геометрической прогресии q: ";
        cin >> step;
    }
    void Print() {
        cout << "b1: " << first << "\tq: " << step << endl;
    }
};

29. «Арифметическая прогрессия»

#include <iostream>

using namespace std;
class Arithmetic {
private:
    int first;
    int step;
public:
    Arithmetic() {
        first = 0;
        step = 0;
    }
    Arithmetic(int first, int step) {
        this->first = first;
        this->step = step;
    }

    Arithmetic(Arithmetic& other) {
        this->first = other.first;
        this->step = other.step;
    }

    Arithmetic(Arithmetic&& other) {
        this->first = other.first;
        this->step = other.step;
    }
    Arithmetic Sum(Arithmetic&& other) {
        Arithmetic sum;
        if (step != other.step) abort();
        sum.first = first + other.first;
        sum.step = step * 2;
        return sum;
    }
    Arithmetic Sub(Arithmetic&& other) {
        Arithmetic sub;
        if (step != other.step) abort();
        sub.first = first - other.first;
        sub.step = step / 2;
        return sub;
    }
    Arithmetic MultiplyWithNum(int n) {
        Arithmetic multiply;
        multiply.first = first * n;
        multiply.step = step * n;
        return multiply;
    }
    int SumOfN(int n) {
        return ((2 * first + step * (n - 1)) / 2) * n;
    }

    int GetNthTerm(int n) {
        return first + step * (n - 1);
    }
    void Input() {
        cout << "Введите первый елемент геометрической прогресии a1: ";
        cin >> first;
        cout << "Введите шаг геометрической прогресии d: ";
        cin >> step;
    }
    void Print() {
        cout << "a1: " << first << "\td: " << step << endl;
    }
};