Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
#1

Наследование классов. Длина вектора на плоскости и в трехмерном пространстве - C++

17.03.2013, 23:19. Просмотров 1792. Ответов 9
Метки нет (Все метки)

Условие задачи:
Кликните здесь для просмотра всего текста

Создать базовый класс «вектор на плоскости». Элементы класса: поля, задающие координаты точки (статус доступа protected), определяющей конец вектора (начало вектора находится в точке с координатами 0, 0); конструктор для инициализации полей; функция для вычисления длины вектора, функция для печати полей и длины вектора. Создать производный класс «вектор в трехмерном пространстве». Элементы класса: дополнительное поле, задающее дополнительную координату; конструктор для инициализации полей; переопределенная функция для вычисления длины вектора; переопределенная функция для печати полей и длины вектора. Создать по 1 объекту каждого из классов. Показать вызов созданных функций. Обеспечить динамический полиморфизм (вызов функций через указатель одного типа, настроенный на объект другого типа).


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
#include "stdafx.h"
#include "stdafx.h"
#include "conio.h"
#include <iostream>
using namespace std;
 
class vekt_na_plti
{
protected:
    int x, y;  //координата вектора x, y
public:
    vekt_na_plti(int x, int y)  //конструктор для инициализации поля
    {
        this->x=x;
        this->y=y;
    }
    virtual void print()
    {
        cout<<"\nkoordinata vektora x= "<<x<<"   konec vektora="<<(x);
        cout<<"\nkoordinata vektora y= "<<y<<"   konec vektora="<<(y);
    }
};
class vektor_v_trexmern_prve: public vekt_na_plti
{
    int z;  //координата вектора z
public:
    vektor_v_trexmern_prve(int x, int y, int z):vekt_na_plti(x ,y)
    {
        this->z=z;
    }
    void print()
    {
        vekt_na_plti::print();
        cout<<"\nkoordinata vektora z="<<z;
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    vekt_na_plti A(5, 4);
    vektor_v_trexmern_prve B(1, 2, 5);
    A.print();
    cout << '\n';
    B.print();
    cout << '\n';
    vekt_na_plti *pA;
    pA=&A;
    pA->print();
    cout << '\n';
    pA=&B;
    pA->print(); 
    getch();
    return 0;
}
Как найти длину вектора на плоскости и в пространстве?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 23:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование классов. Длина вектора на плоскости и в трехмерном пространстве (C++):

точки на плоскости в трехмерном пространстве - C++
в общем нужно проверять лежат ли 4 точки(отдельный класс состоящих из трех флоатов) в одной плоскости. Подскажите простой способ, если...

Трехмерном пространстве - C++
В множестве А1 в трехмерном пространстве найти пару точек с максимальным расстоянием между ними(использовать структуру)

Как определить пересечение 2-х треугольников в трехмерном пространстве? - C++
Собсно сабж) Какие есть идеи?

Представить координаты точки в трехмерном пространстве в виде структуры - C++
Представить координаты точки в трехмерном пространстве в виде структуры, состоящей из трех вещественных полей. Написать программу ввода...

Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве - C++
Помогите, пожалуйста, найти ошибку... Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном...

Заменить наследование классов на наследование интерфейсов - C++
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

9
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
17.03.2013, 23:39 #2
Цитата Сообщение от kukhtikov Посмотреть сообщение
Как найти длину вектора на плоскости и в пространстве?
Так же как и длину отрезка.
0
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
18.03.2013, 00:51  [ТС] #3
HighPredator, правильно?

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
#include "stdafx.h"
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
class vekt_na_plti
{
protected:
    int x, y;  //координата вектора x, y
public:
    vekt_na_plti()
    {
 
    }
    vekt_na_plti(int x, int y)  //конструктор для инициализации поля
    {
        this->x=x;
        this->y=y;
    }
    double dlina_vect(int a, int b)
    {
        x=a;
        y=b;
        double l;
        l=pow(x*x+y*y,0.5);
        return l;
    }
        virtual void print()
    {
        cout<<"\nkoordinata vektora x= "<<x<<"   konec vektora="<<(x);
        cout<<"\nkoordinata vektora y= "<<y<<"   konec vektora="<<(y);
        cout << '\n' << "Dlina vektora na ploskosti: L=" << dlina_vect(x,y);
    }
};
class vektor_v_trexmern_prve: public vekt_na_plti
{
    int z;  //координата вектора z
public:
    vektor_v_trexmern_prve()
    {
    }
    vektor_v_trexmern_prve(int x, int y, int z):vekt_na_plti(x ,y)
    {
        this->z=z;
    }
    double dlina_vect1(int a, int b, int c)
    {
        x=a;
        y=b;
        z=c;
        double l;
        l=pow(x*x+y*y+z*z,0.5);
        return l;
    }
    void print()
    {
        vekt_na_plti::print();
        cout<<"\nkoordinata vektora z="<<z;
        cout << '\n' << "Dlina vektora v prostranstve: L=" << dlina_vect1(x,y,z);
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    vekt_na_plti A;
    int x1, y1, z1;
    vektor_v_trexmern_prve B;
    cout << "Vvedite koordinatu X: x="; cin >> x1; cout << '\n';
    cout << "Vvedite koordinatu Y: y="; cin >> y1; cout << '\n';
    cout << "Vvedite koordinatu Z: z="; cin >> z1; cout << '\n';
    vekt_na_plti *pA;
    vektor_v_trexmern_prve *pB;
    pA=&A;
    pA->dlina_vect(x1,y1);
    pA->print();
    cout << '\n';
    pB=&B;
    pB->dlina_vect1(x1,y1,z1);
    pB->print(); 
    getch();
    return 0;
}
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
18.03.2013, 00:55 #4
Цитата Сообщение от kukhtikov Посмотреть сообщение
double dlina_vect(int a, int b)
Если это метод, то зачем ему вообще что-то передавать, раз x и y и так члены класса?
Цитата Сообщение от kukhtikov Посмотреть сообщение
pow(x*x+y*y,0.5)
sqrt я смотрю не наш метод
0
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
18.03.2013, 01:03  [ТС] #5
HighPredator, у меня это sqrt выдает какие-то ошибки)

Добавлено через 5 минут
HighPredator, а так то правильно?
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
18.03.2013, 01:08 #6
Так у вас координаты целые.
C++
1
sqrt((x*x+y*y)*1.0)
Если будут double то никаких танцев не надо.
0
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
18.03.2013, 12:22  [ТС] #7
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
#include "stdafx.h"
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
class vekt_na_plti
{
protected:
    int x, y;  //координата вектора x, y
public:
    vekt_na_plti()
    {
    }
    vekt_na_plti(int a, int b)  //конструктор для инициализации поля
    {
        x=a;
        y=b;
        //this->x=x;
        //this->y=y;
    }
    double dlina_vect()
    {
        double l;
        l=pow(x*x+y*y,0.5);
        return l;
    }
        virtual void print()
    {
        cout << "\nkoordinata vektora x= "<< x;
        cout <<"\nkoordinata vektora y= "<< y;
        //cout << '\n' << "Dlina vektora na ploskosti: L=" << dlina_vect(x,y);
    }
};
class vektor_v_trexmern_prve: public vekt_na_plti
{
    int z;  //координата вектора z
public:
    vektor_v_trexmern_prve()
    {
    }
    vektor_v_trexmern_prve(int x, int y, int z):vekt_na_plti(x ,y)
    {
        this->z=z;
    }
    double dlina_vect1()
    {
        double l;
        l=pow(x*x+y*y+z*z,0.5);
        return l;
    }
    void print()
    {
        vekt_na_plti::print();
        cout<<"\nkoordinata vektora z="<< z;
        cout << '\n' << "Dlina vektora na ploskosti: L=" << dlina_vect();
        cout << '\n' << "Dlina vektora v prostranstve: L=" << dlina_vect1();
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    vekt_na_plti A;
    int x1, y1, z1;
    vektor_v_trexmern_prve B;
    cout << "Vvedite koordinatu X: x="; cin >> x1; cout << '\n';
    cout << "Vvedite koordinatu Y: y="; cin >> y1; cout << '\n';
    cout << "Vvedite koordinatu Z: z="; cin >> z1; cout << '\n';
    /*A.print();
    cout<<'\n';
    A.dlina_vect(x1,y1);
    cout << '\n';
    B.print();
    cout << '\n';*/
    vekt_na_plti *pA;
    vektor_v_trexmern_prve *pB;
    pA=&A;
    pA->dlina_vect();
    pA->print();
    cout << '\n';
    pB=&B;
    pB->dlina_vect1();
    pB->print(); 
    getch();
    return 0;
}
Кликните здесь для просмотра всего текста

Создать базовый класс «вектор на плоскости». Элементы класса: поля, задающие координаты точки (статус доступа protected), определяющей конец вектора (начало вектора находится в точке с координатами 0, 0); конструктор для инициализации полей; функция для вычисления длины вектора, функция для печати полей и длины вектора. Создать производный класс «вектор в трехмерном пространстве». Элементы класса: дополнительное поле, задающее дополнительную координату; конструктор для инициализации полей; переопределенная функция для вычисления длины вектора; переопределенная функция для печати полей и длины вектора. Создать по 1 объекту каждого из классов. Показать вызов созданных функций. Обеспечить динамический полиморфизм (вызов функций через указатель одного типа, настроенный на объект другого типа).

В чем у меня ошибка?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.03.2013, 13:01 #8
Вектор A создаете, но он не инициализирован

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
    
    int x1, y1, z1;
    
    cout << "Vvedite koordinatu X: x="; cin >> x1; cout << '\n';
    cout << "Vvedite koordinatu Y: y="; cin >> y1; cout << '\n';
    cout << "Vvedite koordinatu Z: z="; cin >> z1; cout << '\n';
     vekt_na_plti A(x1,y1);
     vektor_v_trexmern_prve B(x1,y1,z1);
    vekt_na_plti *pA;
    vektor_v_trexmern_prve *pB;
    pA=&A;
    pA->dlina_vect();
    pA->print();
    cout << '\n';
    pB=&B;
    pB->dlina_vect1();
    pB->print(); 
    getch();
    return 0;
}
0
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
18.03.2013, 13:25  [ТС] #9
Croessmah, еще один вопрос...как обеспечить вывод полиморфизма динамически?

Добавлено через 8 минут
Croessmah, преподаватель сказал, что 2 вектора должны быть полностью идентичны
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
int main()
{
    int x1, y1, z1;
    cout << "Vvedite koordinatu X: x="; cin >> x1;
    cout << "Vvedite koordinatu Y: y="; cin >> y1;
    cout << "Vvedite koordinatu Z: z="; cin >> z1; 
     vekt_na_plti A(x1,y1);
     vektor_v_trexmern_prve B(x1,y1,z1);
    vekt_na_plti *pA;
    vektor_v_trexmern_prve *pB;
    pA=&A;
    pA->dlina_vect();
    pA->print();
    cout << '\n';
    pB=&B;
    pB->dlina_vect1();
    pB->print(); 
    cout << '\n';
    cout <<'\n';
    cout << "Vvedite koordinatu X: x="; cin >> x1; 
    cout << "Vvedite koordinatu Y: y="; cin >> y1; 
    cout << "Vvedite koordinatu Z: z="; cin >> z1; 
    pA=&B;
    pA->dlina_vect();
    pA->print();
    getch();
    return 0;
}
Добавлено через 7 минут
Croessmah, не понимаю, как это сделать
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.03.2013, 13:36 #10
Как-то так?
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 <conio.h>
#include <iostream>
#include <cmath>
 
using namespace std;
 
class vekt_na_plti
{
protected:
    int x, y;  //координата вектора x, y
public:
    vekt_na_plti()
    {
    }
    vekt_na_plti(int a, int b)  //конструктор для инициализации поля
    {
        x=a;
        y=b;
        //this->x=x;
        //this->y=y;
    }
    virtual double dlina_vect()
    {
        return pow(x*x+y*y,0.5);
    }
    virtual void print()
    {
        cout << "\nkoordinata vektora x= "<< x;
        cout <<"\nkoordinata vektora y= "<< y;
          cout << '\n' << "Dlina vektora na ploskosti: L=" << dlina_vect();
        //cout << '\n' << "Dlina vektora na ploskosti: L=" << dlina_vect(x,y);
    }
};
class vektor_v_trexmern_prve: public vekt_na_plti
{
    int z;  //координата вектора z
public:
    vektor_v_trexmern_prve()
    {
    }
    vektor_v_trexmern_prve(int x, int y, int z):vekt_na_plti(x ,y)
    {
        this->z=z;
    }
    double dlina_vect()
    {
        return pow(x*x+y*y+z*z,0.5);
    }
    void print()
    {
        vekt_na_plti::print();
        cout<<"\nkoordinata vektora z="<< z;
        cout << '\n' << "Dlina vektora v prostranstve: L=" << dlina_vect();
    }
};
 
int main()
{    
    int x1, y1, z1;    
    cout << "Vvedite koordinatu X: x="; cin >> x1; cout << '\n';
    cout << "Vvedite koordinatu Y: y="; cin >> y1; cout << '\n';
    cout << "Vvedite koordinatu Z: z="; cin >> z1; cout << '\n';
    vekt_na_plti A(x1,y1);
    vektor_v_trexmern_prve B(x1,y1,z1);
    vekt_na_plti *pA;
    int c;
    std::cout<<"Enter 2 or 3 ->";
    std::cin>>c;
    if(c==2)
        pA=&A;
    else
        pA=&B;
    pA->print();
    getch();
    return 0;
}
0
18.03.2013, 13:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2013, 13:36
Привет! Вот еще темы с ответами:

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

Множество попарно различных плоскостей в трехмерном пространстве задано перечислением троек точек, через которые проходит каждая из плоскостей. Вы* бр - C++
В геометрии не силен!!:cry: Множество попарно различных плоскостей в трехмерном пространстве задано перечислением троек точек, через...

Переменной R присвоить значение 1, если длина вектора А больше длины вектора В, и значение 0 в противном случае - C++
Условие задачи: переменной R присвоить значение 1, если длина вектора А больше длины вектора В, и значение 0 в противном случае. Исходные...

Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого множества - C++
Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого...


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

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

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