Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2018, 16:23   #1
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию Составить описание класса прямоугольников со сторонами, параллельными осям координат

Здравствуйте!!!
Я написал код, он работает
Код:
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
class rectangle {
    private:
        double x1,x2,y1,y2,dx,dy,r;
    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 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 << "Вы ввели следующие координаты прямоугольника:" << endl;
    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 << "Получились следующие координаты прямоугольника:" << endl;
    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 >> r;
    cout << "Получились следующие координаты прямоугольника:" << endl;
    cout << " A:" << "(" << x1 << "," << y1 << ")" << endl;
    cout << " B:" << "(" << x2*r << "," << y1 << ")" << endl;
    cout << " C:" << "(" << x2*r << "," << y2 << ")" << endl;
    cout << " D:" << "(" << x1 << "," << y2 << ")" << endl;}
void rectangle::Minimal() {
    double x3,x4,y3,y4,x_min = x1,x_max = x1,y_min = y1,y_max = y1;
    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:" << "(" << x1_sred << "," << y2_sred << ")" << endl;
        cout << " B:" << "(" << x2_sred << "," << y2_sred << ")" << endl;
        cout << " C:" << "(" << x2_sred << "," << y1_sred << ")" << endl;
        cout << " D:" << "(" << x1_sred << "," << y1_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; }
вопрос: а как изменить функции, если под изменение размера понимается смещение сторон?
Nuc вне форума Ответить с цитированием
Старый 19.11.2018, 00:09   #2
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию

функцию наименьшего прямоугольника правильно записал?
просто у меня выводит не те координаты:
Изображения
Тип файла: png Скриншот 18-11-2018 225502.png (5.6 Кб, 66 просмотров)
Nuc вне форума Ответить с цитированием
Старый 19.11.2018, 07:14   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Вы определитесь - в коде у вас "Наименьший прямоугольник содержащий оба предыдущих", а в выводе просто "Наименьший прямоугольник". Это немного разные вещи.
p51x вне форума Ответить с цитированием
Старый 19.11.2018, 09:47   #4
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию

ну в задании сказано: построение наименьшего прямоугольника,
содержащего два заданных прямоугольника
Nuc вне форума Ответить с цитированием
Старый 19.11.2018, 11:52   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

И чем вас не устроили выведенные координаты?
p51x вне форума Ответить с цитированием
Старый 26.11.2018, 13:12   #6
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию

если честно я как-то не понял чуток с заданием

А подскажите как, изменить конструктор, чтобы я ввел две координаты, а остальные он сам считал, нужно же через высоту и длину?

Последний раз редактировалось Вадим Мошев; 26.11.2018 в 13:15.
Nuc вне форума Ответить с цитированием
Старый 26.11.2018, 13:17   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Nuc Посмотреть сообщение
А подскажите как, изменить конструктор, чтобы я ввел две координаты, а остальные он сам считал, нужно же через высоту и длину?
Вам не нужна высота и длинна. Вам достаточно просто ввести две координаты: верхнего левого угла и нижнего правого.
Вадим Мошев вне форума Ответить с цитированием
Старый 26.11.2018, 13:18   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Не знаю, что вы имели в виду под "через высоту и длину"... но обычно вводят "диагональные" верщины, а дальше все просто - одна получается изменением х, вторая - у.
p51x вне форума Ответить с цитированием
Старый 26.11.2018, 13:31   #9
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию

понял, спасибо
Nuc вне форума Ответить с цитированием
Старый 30.11.2018, 20:40   #10
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию

фигня какая то получилась
Код:
class rectangle {
    private:
        double x1,x2,y1,y2,dx,dy,r;
    public:
        rectangle(double a,double b,double c,double d): x1(a),y1(c) {} // конструктор с параметрами
        rectangle(): x1(2),x2(5),y1(2),y2(0) {}  // конструктор по умолчанию
        ~rectangle() {} // Деструктор 
        void Input(); void Result(); void Peremeshenie();
        void Size(); void Minimal(); void Сross(); };
void rectangle::Input() {
    cout << "Введите координату х левых точек" << endl; cin >> x1;
    cout << "Введите координату y верхних точек" << endl; cin >> y1;
Nuc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить описание класса прямоугольника со сторонами, параллельными осям координат(С++) APTEMKA01 Помощь студентам 3 02.11.2018 21:03
Создать класс ПРЯМОУГОЛЬНИК со сторонами параллельными осям координат vutt C# (си шарп) 0 11.05.2016 03:35
Описание класса прямоугольников со сторонами, параллельными осям координат romaust C# (си шарп) 0 04.05.2016 10:51
Составить описание класса прямоугольника со сторонами, параллельными осям координат gylayko Помощь студентам 2 23.02.2013 21:38
ООП: Составить описание класса для определения одномерных массивов целых цисел (векторов) Kuzu Паскаль, Turbo Pascal, PascalABC.NET 0 18.10.2012 00:23