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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2013, 21:34   #1
alexSo
 
Регистрация: 06.05.2013
Сообщений: 7
По умолчанию Метод С++

Задание
Описать класс CPoint - точка.Описать класс четырехугольник CTetragon. Обязательные поля класса CTetragon: - имя прямоугольника, 4 объекта класса CPoint, 4 поля типа double – стороны четырех угольника. Обязательные методы должны выполнять следующие действия: конструктор без параметров (нулевого прямоугольника); конструктор, принимающий в качестве параметра 4 точки, конструктор копирования; метод получения периметра, Переопределить операцию (<) – сравнение по длине периметра. Описать производный класс CRectangle – прямоугольник. Обязательные методы должны выполнять следующие действия: конструктор без параметров (нулевого квадрата); конструктор, принимающий в качестве параметра 4 точки, конструктор копирования; метод получения периметра, деструктор. Переопределить следующие операции: операцию (<) – сравнение по длине периметра. Для классов CTetragon и CRectangle определить метод, определяющий факт включения одной фигуры в другую. Написать демонстрационную программу.
И так все я это сделал кроме метода :Для классов CTetragon и CRectangle определить метод, определяющий факт включения одной фигуры в другую.
Клаас точка
Код:
#include "stdafx.h"
#include <string>
 using namespace std;
class Point
{
private:
	double x,y;
public:
	Point();
	Point(double,double);
	 double get_x() const{return x;}
	double get_y() const {return y;}
	void setPoints();
    void setPoints(double a, double b);
    
    
};
Код:
#include "StdAfx.h"
#include "Point.h"
# include <iostream>
# include <string>
# include <iomanip>


Point::Point():x(0), y(0)
{


}

Point::Point(double X, double Y): x(X),y(X)
{

}

 void Point::setPoints()
    {
        std::cout << "Введите координаты точки  относительно оси x:"; std::cin >> x;
        std::cout << "Введите координаты точки относительно оси y:"; std::cin >> y;
    }
    void Point::setPoints(double a, double b)
    {   x = a; y = b;   }
Класс 4угольник
Код:
#include "stdafx.h"
#include "Point.h"
#include <string>
 using namespace std;

class CTetragon
{
protected:
	string name;
	double Length,Width,Length1,Width1;
	Point A, B, C,D;
	


public:

	CTetragon(double a1, double b1, double a2, double b2, double a3, double b3,double a4, double b4) : A(a1,b1),B(a2,b2), C(a3,b3),D(a4,b4) {}
	CTetragon(const Point &a, const Point &b, const Point &c,const Point &d)
    : A(a), B(b), C(c), D(d)  {};
	CTetragon();
	CTetragon(string, double ,double, double ,double);
	void output();
	void input();
	double per() ; 
	void input(ifstream &);
	double get_Length(){return Length;}
	double get_Width(){return Width;}
	double get_Length1(){return Length1;}
	double get_Width1(){return Width1;}
  const  Point &getPointA() const { return A; }
  const  Point &getPointB() const { return B; }
  const  Point &getPointC() const { return C; }
  const  Point &getPointD() const { return D; }
bool operator <( CTetragon& a) ;
void setPoints();
 void getCoods();
   
};
Код:
#include "StdAfx.h"
#include "CTetragon.h"
# include <iostream>
# include <string>
# include <iomanip>




CTetragon::CTetragon(): name (""), Length (0), Width (0), Length1(0),Width1 (0)
{
}
CTetragon::CTetragon(string n , double a, double b, double c, double d ): name(n),Length(a),Width(b),Length1(c),Width1(d)
{
	

}




void CTetragon::input()
{
setlocale(LC_ALL,"rus_"); 
cout<<"Введите имя Фигуры"<<endl;
getline(cin,name);
getline(cin,name);
cout<<"Введите стороны Фигуры(Длина,Ширина,Длина,Ширина)"<<endl;
cin>>Length>>Width>>Length1>>Width1;
}
void CTetragon::output()
{
	/*cout.setf(ios::left);*/
	cout<<"\n"<<setw(30)<<name;
    cout<<setw(8)<<Length<<setw(8)<<Width<<setw(8)<<Length1<<setw(8)<<Width1<<setw(8);
}

double CTetragon::per()
{
	
    return get_Length()+get_Width()+get_Length1()+get_Width1();
}

bool CTetragon::operator <(CTetragon& a) 
{
	return this ->per()< a.per();

}

  void CTetragon:: setPoints()
    {
        A.setPoints();
        B.setPoints();
        C.setPoints();
		D.setPoints();
    }
  void CTetragon::getCoods()
  {
	 
	 cout << "x1 = " << A.get_x() << "  y1 = " << A.get_y() << endl;
	 cout << "x2 = " << B.get_x() << "  y2 = " << B.get_y() << endl;
	 cout << "x3 = " << C.get_x() << "  y3 = " << D.get_y() << endl;
	 cout << "x4 = " << D.get_x() << "  y4 = " << D.get_y() << endl;
  }
Класс прямоугольник
Код:
#include "StdAfx.h"
#include "CTetragon.h"
class CRectangle: public CTetragon
{
public:
	CRectangle();
	CRectangle(string , double , double, double , double);
	

};
Код:
#include "StdAfx.h"
#include "СRectangle.h"
# include <iostream>
# include <string>
# include <iomanip>


	

CRectangle::CRectangle():CTetragon(){};

CRectangle::CRectangle (string n , double a, double b, double c, double d): CTetragon (n,a,b,c,d)
{
};



Помогите плз. А то пока не по зубам такой метод написать.

Последний раз редактировалось alexSo; 06.05.2013 в 21:37.
alexSo вне форума Ответить с цитированием
Старый 06.05.2013, 21:38   #2
alexSo
 
Регистрация: 06.05.2013
Сообщений: 7
По умолчанию

Ну и сам майн. Код большой.
Вложения
Тип файла: txt main.txt (5.6 Кб, 155 просмотров)
alexSo вне форума Ответить с цитированием
Старый 06.05.2013, 22:51   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Забудь про программирование. Подумай о самом алгоритме:

У тебя есть две произвольные фигуры (не важно, прямоугольники, треугольники, парралепипеды, это не суть). Тебе известны их координаты.

Как узнать, что одна из фигур находится внутри другой фигуры?

Фигура находится внутри другой фигуры, если все точки этой фигуры находятся в пределах другой фигуры.

Задачка у тебя глупая (её требования вынуждают программиста писать говнокод).

Но можно попробовать сделать по человечачьи:

Сделай один единственный класс "многоугольник". Который в конструкторе принимает массив точек. Эти точки и определят геометрию его фигуры.

Для многоугольника сделай метод, который принимает другой многоугольник.

У этого другого многоугольника в цикле пробегись по всем точкам, и узнай, пренадлежат ли они первому многоугольнику. Если пренадлежат - значит, другой многоугольник внутри первого.

Добавь в этот многоугольник расчет периметра, operator< , ну и тому подобный хлам.

Затем отнаследуй свои глупые классы (глупые, потому что они не нужны. Один многоугольник покрывает все их возможности) от многоугольника, и покажи своему преподавателю.

Не забудь в наследника CTetragon вписать никому нахрен не упавшие 4 дополнительные переменные типа double – стороны четырех угольника.
_Bers вне форума Ответить с цитированием
Старый 07.05.2013, 10:22   #4
alexSo
 
Регистрация: 06.05.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Забудь про программирование. Подумай о самом алгоритме:

У тебя есть две произвольные фигуры (не важно, прямоугольники, треугольники, парралепипеды, это не суть). Тебе известны их координаты.

Как узнать, что одна из фигур находится внутри другой фигуры?

Фигура находится внутри другой фигуры, если все точки этой фигуры находятся в пределах другой фигуры.

Задачка у тебя глупая (её требования вынуждают программиста писать говнокод).

Но можно попробовать сделать по человечачьи:

Сделай один единственный класс "многоугольник". Который в конструкторе принимает массив точек. Эти точки и определят геометрию его фигуры.

Для многоугольника сделай метод, который принимает другой многоугольник.

У этого другого многоугольника в цикле пробегись по всем точкам, и узнай, пренадлежат ли они первому многоугольнику. Если пренадлежат - значит, другой многоугольник внутри первого.

Добавь в этот многоугольник расчет периметра, operator< , ну и тому подобный хлам.

Затем отнаследуй свои глупые классы (глупые, потому что они не нужны. Один многоугольник покрывает все их возможности) от многоугольника, и покажи своему преподавателю.

Не забудь в наследника CTetragon вписать никому нахрен не упавшие 4 дополнительные переменные типа double – стороны четырех угольника.
Спасибо! С тобой согласен. Задача говно. Еще вопросик Класс многоугольник делать наследником класса точки?

Последний раз редактировалось alexSo; 07.05.2013 в 10:24.
alexSo вне форума Ответить с цитированием
Старый 07.05.2013, 13:15   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Еще вопросик Класс многоугольник делать наследником класса точки?

Зачем?
_Bers вне форума Ответить с цитированием
Старый 07.05.2013, 14:27   #6
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
Зачем?
ну все же понятно, потому что многоугольник - разновидность точки, пасаны подтвердили информацию.
rrrFer вне форума Ответить с цитированием
Старый 07.05.2013, 14:41   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
ну все же понятно, потому что многоугольник - разновидность точки, пасаны подтвердили информацию.
Какое отношение имеет тема наследования к теме "разновидности базового класса" - это пасаны никак не прокомментировали?

Глупые книжные истины, аля "наследник - частный случай базы" актуально только для новобранцев, и только что бы у них мозги черти с чем не смешались, пока они не осознают низкоуровневые принципы механики наследования, и не поймут, что наследоваться можно всегда, когда это удобно программисту для решения задач насущных.

И таким образом, который предоставит максимум гибкости (иммунитет к возможным изменениям проекта) при разработке.
_Bers вне форума Ответить с цитированием
Старый 07.05.2013, 17:46   #8
alexSo
 
Регистрация: 06.05.2013
Сообщений: 7
По умолчанию

Помоги плз найти ошибку
Код:
proga.exe": Загружено: "C:\Users\DRIVE\Documents\Visual Studio 2010\Projects\proga\Debug\proga.exe", Символы загружены.
"proga.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB
"proga.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB
"proga.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll", Невозможно найти или открыть файл PDB
"proga.exe": Загружено: "C:\Windows\SysWOW64\msvcp100d.dll", Символы загружены.
"proga.exe": Загружено: "C:\Windows\SysWOW64\msvcr100d.dll", Символы загружены.
Первый этап обработки исключения в "0x01203636" в "proga.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccce0".
Необработанное исключение в "0x01203636" в "proga.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccce0".
Код:
1

#include "stdafx.h"
using namespace std;
 
class Points
{
private: double x, y;
public:
    Points(double X = 0, double Y = 0) : x(X), y(X) {}
    double get_x() const{return x;}
    double get_y() const {return y;}
    void Show() const ; 
    
};
 

Код C++
#include "StdAfx.h"
#include "Points.h"
# include <iostream>
# include <string>
# include <iomanip>
 
 
void Points::Show() const 
{ 
    cout << " (" << x <<", " << y <<")";
 
}

Код C++
#include "Points.h"
#include "StdAfx.h"
#include <string>
using namespace std;
class Tetragon
{
public:
Tetragon(Points, Points, Points, Points, string); 
Tetragon(string);
Points Get_v1() const { return v1; }  //Получить значение vl
Points Get_v2() const { return v2; }  // Получить значение v2
Points Get_v3() const { return v3; }  // Получить значение v3
Points Get_v4() const { return v4; }  // Получить значение v4
string Get_name() const {return name;}
void Show() const;  
void ShowSideAndArea () const;     
 
 
private:
string name;
char* objID;  
double a;         
double b;         
double c; 
double d;
Points v1, v2, v3,v4;  
};
 
Код C++
#include "StdAfx.h"
#include "Tetragon.h"
#include <math.h>
#include <iostream>
#include <iomanip>
#include <string>
Tetragon::Tetragon(Points _v1, Points _v2, Points _v3,Points _v4, string names)
: v1(_v1), v2(_v2), v3(_v3),v4(_v4) ,name(names)
{ 
 
a = sqrt((v1.get_x() - v2.get_x()) * (v1.get_x() - v2.get_x()) + (v1.get_y() - v2.get_y()) * (v1.get_y() - v2.get_y()));
b = sqrt((v2.get_x() - v4.get_x()) * (v2.get_x() - v4.get_x()) + (v4.get_y() - v4.get_y()) * (v4.get_y() - v4.get_y()));
c = sqrt((v1.get_x() - v3.get_x()) * (v1.get_x() - v3.get_x()) + (v1.get_y() - v3.get_y()) * (v1.get_y() - v3.get_y()));
d = sqrt((v4.get_x() - v3.get_x()) * (v4.get_x() - v3.get_x()) + (v4.get_y() - v3.get_y()) * (v4.get_y() - v3.get_y()));
cout<<name<<endl;
}
 
Tetragon::Tetragon(string name)
{
    a = b = c = 0;
    cout<<"Треугольник"<<name<<endl;
 
}
 
void Tetragon::Show() const {
cout<< name << " : ";
v1.Show();  v2.Show();  v3.Show();v4.Show();
cout <<endl;
 
}
void Tetragon::ShowSideAndArea() const {
double p = (a + b + c+d);
cout << "___" << endl;
cout << name << " : ";
cout.precision(4);
cout << " a= " << setw(5) << a;
cout << ". b= " << setw(5) << b;
cout << ". c= " << setw(5) << c;
cout << ". d= " << setw(5) << d;
cout << ":\tp= " << p << endl;
}
 

Код C++

// proga.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include "Tetragon.h"
#include <conio.h> 
using namespace std;
Points p1(6, 7);    Points p2(4, 1);
Points p3(1, 6);    Points p4(0, 5);
Points p5(2, 1);    Points p6(2, 7);
Points p7(2, 2);    Points p8(3, 0);
 
Tetragon triaA(p1, p2, p3, p7,  "triaA");
Tetragon triaB(p1, p4, p8, p7,  "triaB");
Tetragon triaC(p1, p5, p6, p7,  "triaC");
Tetragon triaD(p1, p7, p8, p6,  "triaD");
void ExitBack() {
cout <<"Нажмите Enter" << endl;
cin.get(); cin.get();
}
 
void Show(Tetragon* p_tria[],  int k) {
cout << "======= Перечень треугольников ========" << endl;
for (int i = 0; i < k; ++i) p_tria[i]->Show();
for (int i = 0; i < k; ++i) p_tria[i]->ShowSideAndArea();
ExitBack();
}
 
 
 
int main()
{
    setlocale (0,"Rus");
    bool q=0;
    
 
 
Tetragon* pTria[] = {&triaA, &triaB, &triaC, &triaD};
int n = sizeof (pTria) / sizeof (pTria[0]);
 
    
    
 
    while (q!=1)
    {
        cout<<"\nВыберите действие:\n";
        cout<<"1 - Создание нового списка фигур\n";
        
        char n;
        cin>>n;
        switch(n)
        {
        case '1':   
            {
                Show(pTria, n);
                break;
            }
            case '0':   {q=1; break;}
        default:    cout<<"Ошибка ввода\n";
        }
        
        cout<<"\nДля продолжения нажмите Enter"; 
        _getch();
    }
}
 
Ошибка вылетает,когда пытаюсь вывести все треугольники на экран. Они выводяться но сразу же следует ошибка
alexSo вне форума Ответить с цитированием
Старый 07.05.2013, 17:47   #9
alexSo
 
Регистрация: 06.05.2013
Сообщений: 7
По умолчанию

И по правильному пути я иду?
alexSo вне форума Ответить с цитированием
Старый 08.05.2013, 06:51   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
что наследоваться можно всегда
Если не брать во внимание веские аргументы Саттера (аля "глупая книжная истина"), то я не думаю что порождение многоугольника, состоящего из точек, от точки что-то может улучшить в этом случае.

И если ты в своей конторе пишешь такой код, подумай чуть о новобранцах, которые придут работать и будут долго пытаца понять чем же многоугольник так провинился.
Цитата:
Ошибка вылетает,когда пытаюсь вывести все треугольники на экран. Они выводяться но сразу же следует ошибка
в какой строчке, какая ошибка?

Последний раз редактировалось rrrFer; 08.05.2013 в 06:53.
rrrFer вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод перебора, Метод дихотомии, Метод золотого сечения Delphi !!! OneBri Помощь студентам 0 03.10.2012 08:42
Конструктор,метод вывода на экран Display, метод для преобразования в строку toString в Delphi Чумак Татьяна Помощь студентам 6 03.04.2012 11:58
исследовать метод квадратных корней и метод Холецкого для решения СЛАУ Vит@x@ Помощь студентам 0 22.11.2011 10:47
Задача Коммивояжера. Метод Монте-Карло и метод приращений. [Паскаль] U9110 Помощь студентам 4 06.04.2011 09:48
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 05:23