Форум по программам и оборудованию > > >

Составить описание класса прямоугольников со сторонами, параллельными осям координат

17.12.2018 11:03


30.11.2018 17:24
Nirec
 
Здравствуйте!!!Помогите пожалуйста подкорректировать мой код, надо изменить конструктор, так, чтобы я ввел две координаты, а остальные он сам считал
Код:
/* Вариант 7
Составить описание класса прямоугольников со сторонами, параллельными осям координат. 
Предусмотреть возможность перемещения прямоугольников на плоскости, изменение размеров, построение наименьшего прямоугольника, 
содержащего две заданных прямоугольника и прямоугольника, являющегося общей частью(пересечением) двух прямоугольников.
Написать программу, демонстрирующую работу с этим классом.
Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. */
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
class rectangle 
{
    private:
        double x1,x2,y1,y2,dx,dy;
    public:
        rectangle(double a,double b,double c,double d): x1(a),x2(b),y1(c),y2(d) {} // конструктор с параметрами
        rectangle(): x1(2),x2(5),y1(2),y2(0) {}  // конструктор по умолчанию
        ~rectangle() {} // деструктор 
        void Input();
        void Result();
        void Peremeshenie();
        void Size();
        void Square();
        void Minimal();
        void Сross(); 
};
 
void rectangle::Input() 
{
    cout << "Введите координату х левой точки" << endl; cin >> x1;
    cout << "Введите координату y верхней точки" << endl; cin >> y1;
    cout << "Введите координату х правой точки" << endl; cin >> x2;
    cout << "Введите координату y нижней точки" << endl; cin >> y2;
}
 
void rectangle::Result() 
{
    cout << " A:" << "(" << x1 << "," << y1 << ")" << endl;
    cout << " B:" << "(" << x2 << "," << y1 << ")" << endl;
    cout << " C:" << "(" << x2 << "," << y2 << ")" << endl;
    cout << " D:" << "(" << x1 << "," << y2 << ")" << endl;
}
 
void rectangle::Peremeshenie()
{
    cout << "На сколько переместить по X?" << endl;
    cin >> dx;
    cout << "На сколько переместить по Y?" << endl;
    cin >> dy;
    cout << " A:" << "(" << x1 + dx << "," << y1 + dy << ")" << endl;
    cout << " B:" << "(" << x2 + dx << "," << y1 + dy << ")" << endl;
    cout << " C:" << "(" << x2 + dx << "," << y2 + dy << ")" << endl;
    cout << " D:" << "(" << x1 + dx << "," << y2 + dy << ")" << endl;
}
 
void rectangle::Size() 
{
    cout << "На сколько изменить Х?" << endl;
    cin >> dx;
    cout << "На сколько изменить Y?" << endl;
    cin >> dy;
    x2 += dx; y2 += dy;
    Result();
}
void rectangle::Minimal() 
{
    double x3,x4,y3,y4,x_min = x1,x_max = x1,y_min = y1,y_max = y1,AB,BC,AC;
    cout << " 2 прямоугольник:" << endl;
    cout << "Введите координату х левой точки" << endl; cin >> x3;
    cout << "Введите координату y верхней точки" << endl; cin >> y3;
    cout << "Введите координату х правой точки" << endl; cin >> x4;
    cout << "Введите координату y нижней точки" << endl; cin >> y4;
    cout << endl << "Вы ввели следующие координаты 1 прямоугольника:" << endl;
    cout << " A:" << "(" << x1 << "," << y1 << ")" << endl;
    cout << " B:" << "(" << x2 << "," << y1 << ")" << endl;
    cout << " C:" << "(" << x2 << "," << y2 << ")" << endl;
    cout << " D:" << "(" << x1 << "," << y2 << ")" << endl;
    cout << endl;
    cout << "Вы ввели следующие координаты 2 прямоугольника:" << endl;
    cout << " A:" << "(" << x3 << "," << y3 << ")" << endl;
    cout << " B:" << "(" << x4 << "," << y3 << ")" << endl;
    cout << " C:" << "(" << x4 << "," << y4 << ")" << endl;
    cout << " D:" << "(" << x3 << "," << y4 << ")" << endl;
    cout << endl;
    double A[4]= {x1,x2,x3,x4}, B[4]= {y1,y2,y3,y4};
    for(int i = 0; i < 4; i++)
    {
        if(x_max < A[i])
        {
            x_max = A[i];
        }
        if(y_max < B[i])
        {
            y_max = B[i];
        }
        if(x_min > A[i])
        {
            x_min = A[i];
        }
        if(y_min > B[i])
        {
            y_min = B[i];
        }
    }
    cout <<" Наименьший прямоугольник содержащий оба предыдущих имеет следующие координаты: " << endl;
    cout << " A:" << "(" << x_min << "," << y_max << ")" << endl;
    cout << " B:" << "(" << x_max << "," << y_max << ")" << endl;
    cout << " C:" << "(" << x_max << "," << y_min << ")" << endl;
    cout << " D:" << "(" << x_min << "," << y_min << ")" << endl;
}
 
void rectangle::Сross() 
{
    double x3,x4,y3,y4,x_min = x1,x_max = x1,y_min = y1,y_max = y1,x1_sred,x2_sred,y1_sred,y2_sred;
    cout << " 2 прямоугольник:" << endl;
    cout << "Введите координату х левой точки" << endl; cin >> x3;
    cout << "Введите координату y верхней точки" << endl; cin >> y3;
    cout << "Введите координату х правой точки" << endl;    cin >> x4;
    cout << "Введите координату y нижней точки" << endl;    cin >> y4;
    cout << endl;
    cout << "Вы ввели следующие координаты 1 прямоугольника:" << endl;
    cout << " A:" << "(" << x1 << "," << y1 << ")" << endl;
    cout << " B:" << "(" << x2 << "," << y1 << ")" << endl;
    cout << " C:" << "(" << x2 << "," << y2 << ")" << endl;
    cout << " D:" << "(" << x1 << "," << y2 << ")" << endl;
    cout << endl;
    cout << "Вы ввели следующие координаты 2 прямоугольника:" << endl;
    cout << " A:" << "(" << x3 << "," << y3 << ")" << endl;
    cout << " B:" << "(" << x4 << "," << y3 << ")" << endl;
    cout << " C:" << "(" << x4 << "," << y4 << ")" << endl;
    cout << " D:" << "(" << x3 << "," << y4 << ")" << endl;
    cout << endl;
    double A[4]= {x1,x2,x3,x4}, B[4]= {y1,y2,y3,y4};
    for(int i = 0; i < 4; i ++)
    {
        if(x_max < A[i])
        {
            x_max = A[i];
        }
        if(y_max < B[i])
        {
            y_max = B[i];
        }
        if(x_min > A[i])
        {
            x_min = A[i];
        }
        if(y_min > B[i])
        {
            y_min = B[i];
        }
    }
    for(int i = 0; i < 4; i ++)
    {
        if((A[i] != x_max) && (A[i] != x_min))
        {
            x1_sred = A[i];
            break;
        }
    }
    for(int i = 0; i < 4; i ++)
    {
        if((A[i] != x_max) && (A[i] != x_min) && (A[i] != x1_sred))
        {
            x2_sred = A[i];
            break;
        }
    }
    for(int i = 0; i < 4; i ++)
    {
        if((B[i] != y_max) && (B[i] != y_min))
        {
            y1_sred = B[i];
            break;
        }
    }
    for(int i = 0; i < 4; i ++)
    {
        if((B[i] != y_max) && (B[i] != y_min) && (B[i] != y1_sred))
        {
            y2_sred = B[i];
            break;
        }
    }
        cout <<" Прямоугольник на пересечении двух предыдущих имеет следущие координаты: " << endl;
        cout << " A:" << "(" << x2_sred << "," << y1_sred << ")" << endl;
        cout << " B:" << "(" << x1_sred << "," << y1_sred << ")" << endl;
        cout << " C:" << "(" << x1_sred << "," << y2_sred << ")" << endl;
        cout << " D:" << "(" << x2_sred << "," << y2_sred << ")" << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << " 1 - Ввод данных \n 2 - Вывод \n 3 - Перемещение \n 4 - Изменение размера\n"
        " 5 - Минимальный прямоугольник \n 6 - Прямоугольник получившийся на пересечении \n 0 - Выход\n" << endl;
    rectangle A;
    char Control;
        cout << "> ";
        cin >> Control;
        switch (Control)
        {
            case '1': 
                A.Input();
                cout << "> ";
                cin >> Control;
            case '2': 
                A.Result();
                cout << "> ";
                cin >> Control;
            case '3': 
                A.Peremeshenie();
                cout << "> ";
                cin >> Control;
            case '4': 
                A.Size();
                cout << "> ";
                cin >> Control;
            case '5': 
                A.Minimal();
                cout << ">";
                cin >> Control;
            case '6': 
                A.Сross();
                cout << "> ";
                cin >> Control;
            case '0': break;
        }
            system("pause");
            return 0;
}
30.11.2018 17:28
Nirec
 
достаточно просто ввести две координаты: верхнего левого угла и нижнего правого.
30.11.2018 17:52
OlegON
 
Не понял, задача описана в комментарии или исходя из чего считать все это?
02.12.2018 08:58
Occul
 
напиши, что не получается...
05.12.2018 13:07
OlegON
 
напиши тогда решение...

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.