Untitled

mail@pastecode.io avatar
unknown
c_cpp
a month ago
6.6 kB
1
Indexable
Never
#include <iostream>
#include <sstream>
#include <windows.h>

using namespace std;

class Coord {
  private:
    int x, y;
  public:

    Coord( const int valX = 0, const int valY = 0  ) : x( valX ), y(valY) {

    }

    Coord( const Coord& copy ) : x( copy.x ), y( copy.y ) {
    }

    int GetX() const {
        return x;
    }

    int GetY() const {
        return y;
    }


    void SetX( const int x ) {
        this->x = x;
    }

    void SetY( const int y ) {
        this->y = y;
    }

    Coord& operator=( const Coord& copy );


    Coord operator+( const Coord& other );
    Coord operator+( const int val );
    friend Coord operator-( Coord left, const Coord& right );
    friend Coord operator-( Coord left, const int val);

    Coord& operator+=( const Coord& other );
    Coord& operator+=( const int val );
    friend Coord operator-=( Coord& left, const Coord& right );
    friend Coord operator-=( Coord& left, const int val );
    friend bool operator==( const Coord& left, const Coord& right );
    friend bool operator!=( const Coord& left, const Coord& right );


};


Coord& Coord::operator=( const Coord& copy ) {
    x = copy.x;
    y = copy.y;
    return *this;
}

Coord Coord::operator+( const Coord& other ) {
    return Coord( x + other.x, y + other.y );
}

Coord Coord::operator+( const int val ) {
    return Coord( x + val, y + val );
}
Coord operator-( Coord left, const int val) { // c - 5 ---> operator-( c, 5 )
    left.x -= val;
    left.y -= val;
    return left;
}
Coord operator-( Coord left, const Coord& right ) {
    left.x -= right.x;
    left.y -= right.y;
    return left;
}

ostream& operator<<(ostream& os, const Coord& my) {
    os << "(" << my.GetX() << "; " << my.GetY() << ")"; // friend my.value
    return os;
}

istream& operator>>(istream& is, Coord& my) {
    int x,y;
    is >> x >> y;
    my.SetX( x );
    my.SetY( y );
    return is;
}

Coord& Coord::operator+=( const Coord& other ) {
    x += other.x;
    y += other.y;
    return *this;
}

Coord& Coord::operator+=( const int val ) {
    x += val;
    y += val;
    return *this;
}

Coord operator-=( Coord& left, const Coord& right ) {
    left.x -= right.x;
    left.y -= right.y;
    return left;
}

Coord operator-=( Coord& left, const int val ) {
    left.x -= val;
    left.y -= val;
    return left;
}

bool operator==( const Coord& left, const Coord& right ) {
    return (left.x == right.x && left.y == right.y );
}

bool operator!=( const Coord& left, const Coord& right ) {
    return !( left == right );
}


int GetNumber( const string &mes, const int low, const int high ) {
    string nStr;
    long long n;
    while ( true ) {
        cout << mes << " от " << low << " до " << high << ": ";
        getline( cin, nStr ); // считываем строку неограниченной длины, до нажатия Enter


        int sign = 1;
        if ( nStr[0] == '-' ) { // проверяем наличие знака минус перед цифрами
            sign = -1; // если знак минус есть, то запоминаем знак числа
            // удалить знак минус перед числом
            nStr.erase( 0, 1 );
        }

        // пробуем найти ЛЮБОЙ символ, НЕ входящий в набор 0123456789
        if ( nStr.find_first_not_of( "0123456789" ) == string::npos ) { // если НЕ нашли, то введено целое число
            stringstream ss;
            ss << nStr; // отдаём строковому потоку строку, которая представляет собой запись целого полоительного числа
            ss >> n; // просим строковый поток вернуть нам int значение

            n *= sign;

            if ( n >= low && n <= high  )
                break;
        }
        cout << "Ошибка ввода! Значение должно быть " << "от " << low << " до " << high << "!" << endl;
    }
    return n;
}

int main() {
    SetConsoleCP( 1251 );
    SetConsoleOutputCP( 1251 );

    bool first = true;
    while ( true ) {

        int proc;
        if ( !first ) {
            cout << "Введите 1 для продолжения работы или 0 для выхода\n";
            proc = GetNumber( "Введите число", 0, 1 );


            if ( !proc )
                return 0;
        }

        first = false;

        int ax = GetNumber( "Введите координату XA", -100000, 100000 );
        int ay = GetNumber( "Введите координату YA", -100000, 100000 );
        int bx = GetNumber( "Введите координату XB", -100000, 100000 );
        int by = GetNumber( "Введите координату YB", -100000, 100000 );



        Coord objA( ax, ay ), objB( bx, by );

        cout << "Выберите пункт меню:\n";
        cout << "1 - сумма координат\n";
        cout << "2 - разность координат\n";
        cout << "3 - сумма координаты A с числом\n";
        cout << "4 - разность координаты B с числом\n";
        cout << "5 - сравнение\n";
        cout << "0 - выход\n";


        int opt = GetNumber( "Введите число", 0, 5 );
        switch( opt ) {
        case 1: {
            cout << "A + B = " << objA + objB << endl;
            break;
        }
        case 2: {
            cout << "A - B = " << objA - objB << endl;
            break;
        }

        case 3: {
            int n = GetNumber( "Введите число N", -100000, 100000 );
            cout << "A + " << n << " = " << objA + n << endl;
            break;
        }
        case 4: {
            int n = GetNumber( "Введите число N", -100000, 100000 );
            cout << "B - " << n << " = " << objB - n << endl;
            break;
        }
        case 5: {

            if ( objA == objB )
                cout << "Координаты совпадают" << endl;
            else
                cout << "Координаты НЕ совпадают" << endl;

            break;
        }
        case 6: {
        
            Coord c = a;
            
        }



        }
    }

    return 0;
}