Untitled
unknown
c_cpp
2 years ago
6.6 kB
11
Indexable
#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;
}
Editor is loading...