Форум программистов, компьютерный форум CyberForum.ru

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

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

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

17.03.2013, 23:19. Просмотров 1719. Ответов 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;
}
Как найти длину вектора на плоскости и в пространстве?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 23:19     Наследование классов. Длина вектора на плоскости и в трехмерном пространстве
Посмотрите здесь:

Трехмерном пространстве C++
C++ длина вектора
C++ Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве
Длина вектора C++
C++ Как определить пересечение 2-х треугольников в трехмерном пространстве?
длина вектора C++
C++ Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого множества
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,381
Записей в блоге: 3
17.03.2013, 23:39     Наследование классов. Длина вектора на плоскости и в трехмерном пространстве #2
Цитата Сообщение от kukhtikov Посмотреть сообщение
Как найти длину вектора на плоскости и в пространстве?
Так же как и длину отрезка.
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;
}
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,381
Записей в блоге: 3
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 я смотрю не наш метод
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
18.03.2013, 01:03  [ТС]     Наследование классов. Длина вектора на плоскости и в трехмерном пространстве #5
HighPredator, у меня это sqrt выдает какие-то ошибки)

Добавлено через 5 минут
HighPredator, а так то правильно?
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,381
Записей в блоге: 3
18.03.2013, 01:08     Наследование классов. Длина вектора на плоскости и в трехмерном пространстве #6
Так у вас координаты целые.
C++
1
sqrt((x*x+y*y)*1.0)
Если будут double то никаких танцев не надо.
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 объекту каждого из классов. Показать вызов созданных функций. Обеспечить динамический полиморфизм (вызов функций через указатель одного типа, настроенный на объект другого типа).

В чем у меня ошибка?
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,945
Записей в блоге: 2
Завершенные тесты: 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;
}
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, не понимаю, как это сделать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2013, 13:36     Наследование классов. Длина вектора на плоскости и в трехмерном пространстве
Еще ссылки по теме:

C++ Множество попарно различных плоскостей в трехмерном пространстве задано перечислением троек точек, через которые проходит каждая из плоскостей. Вы* бр
точки на плоскости в трехмерном пространстве C++
Даны вектора в трёхмерном пространстве, создать класс C++
Вычислить точку пересечения прямой и плоскости в пространстве C++
C++ Представить координаты точки в трехмерном пространстве в виде структуры

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,945
Записей в блоге: 2
Завершенные тесты: 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;
}
Yandex
Объявления
18.03.2013, 13:36     Наследование классов. Длина вектора на плоскости и в трехмерном пространстве
Ответ Создать тему
Опции темы

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