Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
1

Класс: Разработать абстрактный класс класс Point для задания координаты...

28.12.2017, 10:34. Просмотров 4492. Ответов 15
Метки нет (Все метки)

Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить...

Разработать абстрактный класс класс Point для задания координаты
точки на плоскости. Выбирая этот класс в качестве базового разработать производный класс Circle, определяющий окружности разного радиуса. Определить в этом классе функцию, возвращающую длину радиуса окружности, описанной вокруг треугольника, вершинами которому служат центры трех заданных окружностей. В обоих классах объявить виртуальную функцию Length, которая возвращает длину соответствующего объекта. В главной программе объявить массив указателей на объекты и нарисовать несколько точек и 3 окружности. Вывести длину радиуса окружности, описанной вокруг треугольника, вершинами которого являются центры заданных окружностей.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2017, 10:34
Ответы с готовыми решениями:

Разработать абстрактный класс класс Point для задания координаты
Народ, не буду врать на подобии "помогите, не понимаю как сделать" и т.п., говорю как есть, у меня...

Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов
Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления...

Разработать класс Point для представления точки на плоскости
Разработать класс Point для представления точки на плоскости. Разработать класс, производный от...

Создать абстрактный базовый класс Point, который включает в себя:
Помогите решить с объяснениями. Создать абстрактный базовый класс Point, который включает в...

15
3300 / 2681 / 724
Регистрация: 25.03.2012
Сообщений: 9,683
Записей в блоге: 1
29.12.2017, 08:17 2
Цитата Сообщение от dizzying Посмотреть сообщение
В обоих классах объявить виртуальную функцию Length, которая возвращает длину соответствующего объекта.
шо? Длину точки?
Цитата Сообщение от dizzying Посмотреть сообщение
разработать производный класс Circle
круг это частный случай точки? Круги потом можно будет использовать вместо точек в программе? Например, в твою функцию для треугольника можно будет вместо вершин передавать круги! Это нормально?
Цитата Сообщение от dizzying Посмотреть сообщение
нарисовать несколько точек и 3 окружности.
как рисовать? Ты знаешь как использовать графику?
0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
29.12.2017, 09:19  [ТС] 3
Kuzia domovenok, у меня тоже много вопросов по этому заданию, поэтому и пишу сюда)
0
Kuzia domovenok
29.12.2017, 10:22
  #4

Не по теме:

dizzying, а задать вопросы преподу зассал? Да нет конечно! Просто невозможно задавать вопросы по делу, когда ты вообще не в теме. Ты ходишь в школу как на диктант. Переписываешь задание и не вникаешь в него. Потому что весь этот С++ для тебя - как китайские иероглифы. Перерисовал значочки и пошёл на форум их копировать.

0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
03.01.2018, 22:44  [ТС] 5
Народ, не буду врать на подобии "помогите, не понимаю как сделать" и т.п., говорю как есть, у меня осталось 2 дня на то что бы сделать лабораторную, сам я в тему не вник и теперь мучаюсь, если кому не сложно, то вот задача, буду благодарен:
Разработать абстрактный класс класс Point для задания координаты
точки на плоскости. Выбирая этот класс в качестве базового разработать производный класс Circle, определяющий окружности разного радиуса. Определить в этом классе функцию, возвращающую длину радиуса окружности, описанной вокруг треугольника, вершинами которому служат центры трех заданных окружностей. В обоих классах объявить виртуальную функцию Length, которая возвращает длину соответствующего объекта. В главной программе объявить массив указателей на объекты и нарисовать несколько точек и 3 окружности. Вывести длину радиуса окружности, описанной вокруг треугольника, вершинами которого являются центры заданных окружностей
0
Заклинатель змей
568 / 472 / 204
Регистрация: 30.04.2016
Сообщений: 2,298
04.01.2018, 14:08 6
dizzying,
В обоих классах объявить виртуальную функцию Length, которая возвращает длину соответствующего объекта.
расскажите, как будете считать длину точки;
нарисовать несколько точек и 3 окружности.
Уже определились с графическими средствами?
0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
04.01.2018, 20:33  [ТС] 7
DobroAlex, не буду ничего придумывать, и рассказывать то чего не знаю, поэтому нет, не знаю
0
Заклинатель змей
568 / 472 / 204
Регистрация: 30.04.2016
Сообщений: 2,298
04.01.2018, 22:03 8
dizzying, если вы сами не понимаете задание, как я пойму? Спросите у преподавателя
0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
05.01.2018, 01:25  [ТС] 9
DobroAlex, все разузнал, по поводу того что нужно нарисовать точки и 3 окружности, ничего этого делать не нужно, это образно, по поводу функции которая будет высчитывать длину точки, то у меня есть код, с похожим заданием, если нужен код задания то вот, он не много отличается от моего, но я все ровно не понимаю как этот код переделать на мой:

Разработать абстрактный класс класс Point для задания координаты точки на плоскости. Выбирая этот класс в качестве базового класса, разработать производный класс Rectangle, определяющий различные прямоугольники со сторонами, параллельными осям координат. Определить в этом классе функцию, возвращающую расстояния от начала координат до всех вершин прямоугольника. В обоих классах объявить виртуальную функцию Length, которая возвращает длину соответствующего объекта. В главной программе объявить массив указателей на несколько точек и несколько прямоугольников. Вывести в среднее расстояние от начала координат до вершин прямоугольников

А вот код этой задачи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
 
class Point
{
protected:
    double m_x0;
    double m_y0;
public:
    Point();
    Point(double x0, double y0)
    {
        m_x0 = x0;
        m_y0 = y0;
    }
    virtual void Length() = 0;
    virtual void Distance() = 0;
};
 
class Rectangle : virtual public Point
{
protected:
 
public:
    Rectangle();
    Rectangle(double x0, double y0) :Point(x0, y0)
    {
 
    }
    void Distance()
    {
        double temp = sqrt(m_x0*m_x0 + m_y0*m_y0);
        cout << "Расстояние РѕС‚ точки (0,0) РґРѕ 1 вершины - " << 0 << endl;
        cout << "Расстояние РѕС‚ точки (0,0) РґРѕ 2 вершины - " << m_y0 << endl;
        cout << "Расстояние РѕС‚ точки (0,0) РґРѕ 3 вершины - " << temp << endl;
        cout << "Расстояние РѕС‚ точки (0,0) РґРѕ 4 вершины - " << m_x0 << endl;
    }
 
 
    void Length()
    {
        cout << "Длинна прямоугольника - " << (m_x0 + m_y0) * 2 << endl;
        cout << endl;
    }
 
 
};
 
 
 
int main()
{
    cout << "Расстояния считаються РїРѕ часовой стрелке, начиная СЃ точки (0,0)" << endl;
    Point* arr[2];
 
    Rectangle test(5, 5);
    arr[0] = &test;
    arr[0]->Distance();
    arr[0]->Length();
    Rectangle test1(3, 4);
 
    arr[1] = &test1;
    arr[1]->Distance();
    arr[1]->Length();
 
    Rectangle test2(8, 9);
    arr[2] = &test2;
    arr[2]->Distance();
    arr[2]->Length();
 
 
 
    return 0;
}
Все что написано в cout по идее условие задачи, просто кодировка сбилась
0
Заклинатель змей
568 / 472 / 204
Регистрация: 30.04.2016
Сообщений: 2,298
05.01.2018, 11:38 10
dizzying, понятно всё, Point предполагается сделать чисто виртуальным : класс чисто виртуальный, если у него есть хоть одна чисто виртуальная функция вида
C++
1
virtual someType someFunc (someArguments) = 0
-- эту функцию надо переопределить в каждом невиртуальном наследнике; создание объектов чистого виртуального класса не предполагается
0
2 / 2 / 1
Регистрация: 19.12.2017
Сообщений: 68
05.01.2018, 19:33  [ТС] 11
DobroAlex, ага, так вы не поможете с моим кодом?
0
51 / 45 / 31
Регистрация: 14.04.2015
Сообщений: 273
09.01.2018, 00:56 12
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
Рассмотрим пример решения задания, описанного выше,
для класса «Звезда». Перегрузить операции >=, <=, !=.
// подключение необходимых библиотек
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <bios.h>
#include <dos.h>
#include <math.h>
// описание класса star (звезда)
class star
{ protected:
// поля класса –
// x,y – координаты центра,
// r – радиус описанной окружности
// color – цвет рисования
int x,y,r,color;
public:
star(int a,int b, int rad, int c); // конструктор
star(star &a); // конструктор копирования
void change(int dx, int dy);// изменение координат центра
// методы, возвращающие значение полей
int getX();
int getY();
int getR();
int getColor();
// рисование объекта
virtual void draw(const c = -1);
// перегруженный оператор присваивания
star& operator = (star &a);
// перегрузка операторов нестрогой проверки условий
int operator <= (star &a);
int operator >= (star &a);
int operator != (star &a); };
// класс, изменяющий местоположение объекта
class action
{
public :
void draw(star *a); // нарисовать объект *а
void clear(star *a); // стереть объект *а
//изменить местоположение объекта *а
void move(star *a,int dX, int dY);
};
// конструктор инициализирует поля объекта
star :: star (int a, int b, int rad, int c)
{
x = a;
y = b;
r = rad;
color = c;
}
void star :: change(int dx, int dy)
{
x+=dx;
y+=dy;
}
// рисование пятиугольной звезды основано на правилах
// рисования правильных n-угольников:
// 1. установить указатель графического экрана в точку с
// координатами (x,y-r);
// 2. цикл ( i := 1; n )
// 2.1. провести линию в точку с координатами
//
2 2
sin( ) , cos( )
i i
x r y r
n n
⋅ ⋅π ⋅ ⋅π
+ ⋅ − ⋅
// При n = 5 этот алгоритм нарисует пятиугольник, если
// ввести дополнительную переменную и изменять ее
// значение на каждом шаге алгоритма на 2, то вершины
// пятиугольника будут пройдены таким образом, что при
// рисовании линий получится пятиугольная звезда
void star :: draw(const int c)
{
if (c==-1)
setcolor(color);
else setcolor(c);
moveto(x,y-r);
for(int i=0,k=0;i<=5;i++,k+=2){
float f = sin(k*2*M_PI/5.);
float f1 = cos(k*M_PI*2/5.);
lineto(x+f*r,y-f1*r);
}
}
int star :: getX()
{
return x;
}
int star :: getY()
{
return y;
68
}
int star :: getColor()
{
return color;
}
int star :: getR()
{
return r;
}
// конструктор копирования
star :: star(star &a)
{
x = a.x;
y = a.y;
color = a.color;
r = a.r;
}
// Перегрузка оператора присваивания
star& star :: operator = (star & a)
{
x = a.x;
y = a.y;
color = a.color;
r = a.r;
return *this;
}
// рисование объекта
void action::draw(star *a)
{
a->draw();
}
// стирание объекта (вызов метода рисования с
// параметром, равным цвету фона)
void action::clear(star *a)
{
int color = getbkcolor();
a->draw(color);
}
// изменение местоположения объекта
void action::move(star *a,int dx,int dy)
{
this -> clear(a);// стереть объект
a->change(dx,dy);// изменить координаты
this -> draw(a);// нарисовать объект
}
int star::operator <= (star& a){
if (r<=a.r) return 1;
else return 0;
}
// Так как операторы сравнения используются в
// конструкциях if, while, а работа этих конструкций
// зависит от истинности или ложности условных
// выражений, то перегруженные операторы сравнения в
// качестве результата должны возвращать целое значение,
// поскольку ложь — это 0, а истина — это любое ненулевое
//число.
int star::operator >= (star& a){
if (r>=a.r) return 1;
else return 0;
}
int star::operator != (star& a){
if (r!=a.r) return 1;
else return 0;
}
class MyGraph
{
public:
void Run();
};
void MyGraph :: Run ()
{
randomize();
int gdriver = DETECT, gmode, errorcode;
// проинициализировать графический режим
initgraph(&gdriver, &gmode, " ");
union { int c;
char cod[2];
} button;
int flag = 1;
// создать объект p1
star p1(100,100,50,CYAN);
action b;
// нарисовать объект
p1.draw();
randomize();
int dx = 0, dy = 0;
setcolor(14);
outtextxy(25,430,"Движение - клавиши управления курсо-
ром, сравнение - клавиша '>',выход - ESC");
while (flag)
{
// организовать ожидание нажатия клавиши
button.c = bioskey(0);
// если нажата клавиша дополнительной клавиатуры, то
// организовать выбор по значению
// переменной button.cod[1]
if (!button.cod[0]){
switch (button.cod[1]){
case 75 : dx = -10; dy = 0;break; // влево
case 77 : dx = 10; dy = 0;break; // вправо
case 72 : dy =-10; dx = 0;break; // вверх
case 80 : dy = 10; dx = 0;break; // вниз
}
b.move(&p1,dx,dy); // выполнить передвижение
}
// если нажата клавиша основной клавиатуры, то
// организовать выбор по значению переменной
// button.cod[0]
else switch (button.cod[0]){
case 27 : flag = 0;break; // выход из цикла
// выполнить сравнение двух объектов
case 46 : star a(80,80,random(70),5);
a.draw();
setfillstyle(1,0);
setcolor(14);
if (a>=p1) { if (a!=p1) outtextxy(
50,300,"Второй объект больше первого.");
else outtextxy(
50,300,"Первый и второй объекты равны.");
}
else outtextxy(50,300,"Второй объект
меньше первого.");
delay(1500);
a.draw(getbkcolor());
bar(50,300,300,400);
break; } }
closegraph(); }
void main() {
MyGraph obj;
obj.Run(); }



вот не давно читал как рисовать.
Кликните здесь для просмотра всего текста
Рисование и заполнение
void arc (int x, int y, int stangle, int endangle, int radius) — ри-
сует дугу окружности с центром в точке с координатами x,y и
радиусом radius от угла stangle до угла endangle.
void circle(int x,int y,int r) — рисует окружность с центром в
точке с координатами x,y и радиусом r.
void drawpoly(int num, int* coord) — рисует контур много-
угольника с num вершинами в точках с координатами, сохра-
ненными в массиве coord.
void ellipse(int x, int y, int stangle, int endangle, int radiusx, int
radiusy) — рисует эллиптическую дугу с центром в точке с ко-
ординатами x,y и радиусами radiusx, radiusy от угла stangle до
угла endangle.
void line(int x0,int y0,int x1, int y1) — рисует линию с коор-
динатами концов x0,y0 и x1,y1.
62
void lineto(int x1, int y1) — рисует линию от текущей пози-
ции до точки с координатами x1, y1.
void moveto(int x, int y) — перемещает текущую позицию в
точку с координатами x, y.
void rectangle(int x0,int y0,int x1, int y1) — рисует прямо-
угольник с координатами верхнего левого угла x0, y0 и коорди-
натами правого нижнего угла x1, y1.
void bar (int x0,int y0,int x1, int y1) — рисует закрашенный
установленным цветом прямоугольник с координатами верхнего
левого угла x0, y0 и координатами правого нижнего угла x1, y1.
void fillellipse(int x, int y, int xradius, int yradius) — рисует эл-
липс с центром в точке x, y и горизонтальной и вертикальной
полуосями xradius и yradius соответственно и закрашивает его
текущими цветом и шаблоном заполнения.
void fillpoly(int numpoins, int far *polypoints) — рисует кон-
тур многоугольника с numpoints вершинами текущим цветом и
типом линии а затем закрашивает его текущими цветом и шаб-
лоном заполнения. polypoints указывает на последовательность
из (numpoints *2) целых чисел. Каждая пара дает координату x,y
вершины многоугольника.
void floodfill(int x, int y, int border) — эта процедура исполь-
зуется для закрашивания замкнутой области, точка с координа-
тами x,y является точкой внутри заполняемой области. Область,
ограниченная цветом, указанным в border, закрашивается теку-
щими цветом и шаблоном заполнения. Если точка находится
внутри области, закрашивается внутренняя часть области; если
вне — закрашивается внешняя часть области.
void pieslice(int x, int y, int stangle, int endangle, int radius) —
рисует и заполняет круговой сектор с центром в точке с коорди-
натами x,y и радиусом radius. Сектор рисуется в направлении от
начального угла stangle до конечного endangle. Граница сектора
рисуется текущим цветом линий, а сам сектор заполняется те-
кущим шаблоном и цветом заполнения. Углы задаются в граду-
сах и отсчитываются против часовой стрелки: 0 градусов соот-
ветствуют «3 часам», 90 градусов — «12 часам» и т.д.
void far sector(int x, int y, int stangle, int endangle, nt xradius,
int yradius) — рисует и заполняет сектор эллипса (аналогично
pieslice).
63
void setfillstyle(int pattern, int color) — устанавливает теку-
щий цвет и шаблон заполнения. Параметр pattern может прини-
мать следующие значения (можно использовать смысловое имя
или номер):
EMPTY_FILL 0 заполнение фоновым цветом
SOLID_FILL 1 сплошное заполнение
LINE_FILL 2 заполнение горизонтальными линиями
LTSLASH_FILL 3 заполнение ///
SLASH_FILL 4 заполнение ///,толстыми линиями
BKSLASH_FILL 5 заполнение \\\, толстыми линиями
LTBKSLASH_FILL 6 заполнение \\\
HATCH_FILL 7 заполнение редкой штриховкой
XHATCH_FILL 8 заполнение двойной штриховкой
INTERLEAVE_FILL 9 заполнение прерывистой линией
WIDE_DOT_FILL 10 заполнение редкими точками
CLOSE_DOT_FILL 11 заполнение частыми точками


Простите что так много текста +))))
0
Заклинатель змей
568 / 472 / 204
Регистрация: 30.04.2016
Сообщений: 2,298
09.01.2018, 11:24 13
Welcome20, ваш пример рисования актуален только для BorlandC 3.1. Избегайте использования этого экскремента мамонта, т.к MS DOS безвозвратно устарела
0
51 / 45 / 31
Регистрация: 14.04.2015
Сообщений: 273
11.01.2018, 02:32 14
DobroAlex, скажу так что было предложено в книги то и показал, сам рисованием не занимался, читал книгу, смотрю что то похожее, вот и решил предложить вдруг поможет +)
0
0 / 0 / 0
Регистрация: 05.02.2020
Сообщений: 23
11.02.2020, 21:47 15
Подскажите пожалуйста, что написано во всех cout у dizzying?
0
Эксперт С++
8274 / 3850 / 837
Регистрация: 15.11.2014
Сообщений: 8,726
12.02.2020, 20:40 16
Цитата Сообщение от LegendaryUser Посмотреть сообщение
Подскажите пожалуйста, что написано во всех cout у dizzying?
например это:
Цитата Сообщение от dizzying Посмотреть сообщение
cout << "Расстояния считаються по часовой стрелке, начиная с точки (0,0)" << endl;
C++
1
cout << "� асстояния считаються по часовой стрелке, начиная с точки (0,0)" << endl;
декодер Артемия Лебедева
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2020, 20:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Класс: Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра.
Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра....

Абстрактный класс, наследование, класс хранится в другом классе
Нужна помощь. Написать программу: 1 класс. Имеется абстрактный класс который описывает какую-то...

Создать класс Point и производный класс ColoredPoint (цветная точка)
Создайте класс Point (точка на плоскости), характеризующийся двумя координатами. Создайте...

Создать класс Point и класс-наследник Line
Создайте класс Point (точка), который содержит элементы целого типа xCoordinate и yCoordinate, и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.