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

Полиморфизм, Точка в трёхмерном пространстве - C++

Восстановить пароль Регистрация
 
polya
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 26
11.01.2013, 00:49     Полиморфизм, Точка в трёхмерном пространстве #1
Задание 1.
1. Опишите класс "Точка в 3-хмерном пространстве".
Данные класса:
координаты точки, цвет.
Конструкторы класса:
конструктор по умолчанию, конструктор произвольной точки.
2.Определите методы:
ввод точки, вывод на экран, определение расстояния от точки до начала координат.
3. Объявите несколько объектов с использованием различных конструкторов, найдите их расстояния от начала координат.
Задание 2.
1. Опишите класс "Материальная точка", производный от точки, имеющий собственное данное - масса.
2. Определите конструкторы матер. точки по умолчанию и с параметрами.
3.Определите метод сравнения масс материальных точек.
4.Объявите несколько материальных точек, найдите из них точку наибольшей массы.

Вот код заголовочного файла, понимаю, что это код первоклассника, но - извиняйте((.

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
#include <conio.h>
//Задание 1 "Точка в трёхмерном пространстве".
class Point {
    float x,y,z; //координаты точки
    char colour[n]; //цвет
public: 
    Point() { //Конструктор по умолчанию.
            x=y=z=0;
            //char colour[9] = "white";
        }
     // Конструктор для Point.
        Point(float a, float b, float c) {
            x = a;
            y = b;
            z = c;
        }
     void print() //Вводим координаты точки.
    {
    printf("\nВведите координаты\n");
    
    scanf("%f", &x);
    printf("\n");
    scanf("%f", &y);
    printf("\n");
    scanf("%f", &z);
    printf("\n");
    }
 
    void input()  //Выводим координаты точки на экран.
    {
        printf("\nКоординаты точки:\n");
        printf("%4.0f",x);
        printf("\n");
        printf("%4.0f",y);
        printf("\n");
        printf("%4.0f",z);
        printf("\n");
    }
    int rast()
    {
        return (sqrt(y*y+x*x))+z*z;
    }
};
//Задание 2 "Материальная точка".
class Point_M: public Point {
    int m; //собственное данное - масса.
public:
    Point_M(){ //конструктор по умолчанию.
    m = 0;}
    Point_M(int S){//конструктор с параметром.
    m = S; }
bool compare(int c1, int c2){ //метод для сравнения масс точек.
    if (c1 > c2)
    return 1;
    else return 0;
}
 
};
В чем заключается вопрос:
Я сомневаюсь насчет метода сравнения, можно его как-нибудь по-другому сделать(получше что ли). В задании написано сравнить несколько точек, как можно это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 00:49     Полиморфизм, Точка в трёхмерном пространстве
Посмотрите здесь:

Полиморфизм C++
C++ Как записать Z в трёхмерном массиве
Дана точка М(x, y). Присвоить z = 1, если точка принадлежит окружности с радиусом R и центром в точке (a, b) и z = 0 в противном случае. C++
C++ Даны отрезки [a, b] и [c, d] и точка A с координатой х. Определить, принадлежит ли данная точка одному из этих отрезков, обоим или лежит вне их
Создайте стуктуру Point (точка) с вещественными полями x и y, которые задают координаты этой точки в двухмерном пространстве C++
Составить описания класса для векторов задаваемые координатами концов в трёхмерном пространстве C++
Даны вектора в трёхмерном пространстве, создать класс C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
(SkyNet)
 Аватар для (SkyNet)
22 / 40 / 6
Регистрация: 25.10.2011
Сообщений: 175
11.01.2013, 02:51     Полиморфизм, Точка в трёхмерном пространстве #2
C++
1
2
3
4
5
...
bool compare(Point_M& other){ //метод для сравнения масс точек.
    if (this->m > other->m)
    return 1;
    else return 0;
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.01.2013, 03:29     Полиморфизм, Точка в трёхмерном пространстве #3
Два в одном.
Забил на ввод, тут уж сами, вместо метода вывода -- перегруженный оператор "<<", что логичнее.
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
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
 
class Color {
 public:
  Color(int red, int green, int blue) : red(red), green(green), blue(blue) {}
  int getRed() const { return red; }
  int getGreen() const { return green; }
  int getBlue() const { return blue; }
 private:
  int red, green, blue;
};
 
std::ostream &operator<<(std::ostream &stream, const Color &color) {
  return stream << "Color{" <<
    "red=" << color.getRed() << "," <<
    "green=" << color.getGreen() << "," <<
    "blue=" << color.getBlue() << "}";
}
 
class Point {
 public:
  Point() : x(0), y(0), z(0), color(0, 0, 0) {}
  explicit Point(int maxRandom) : x(rand() % maxRandom), y(rand() % maxRandom),
    z(rand() % maxRandom), color(0, 0, 0) {}
  Point(int x, int y, int z, const Color &color) : x(x), y(y), z(z),
    color(color) {}
  Point(int x, int y, int z) : x(x), y(y), z(z), color(0, 0, 0) {}
  int getX() const { return x; }
  int getY() const { return y; }
  int getZ() const { return z; }
  const Color &getColor() const { return color; }
  double getDistanceTo(int x, int y, int z) {
    return sqrt(pow(x - getX(), 2.0) + pow(y - getY(), 2.0) +
      pow(z - getZ(), 2.0));
  }
  double getDistanceTo(const Point &other) {
    return getDistanceTo(other.getX(), other.getY(), other.getZ());
  }
 private:
  int x, y, z;
  Color color;  
};
 
std::ostream &operator<<(std::ostream &stream, const Point &point) {
  return stream << "Point{" <<
    "x=" << point.getX() << "," <<
    "y=" << point.getY() << "," <<
    "z=" << point.getZ() << "," <<
    "color=" << point.getColor() << "}";
}
 
class MassPoint : public Point {
 public:
  MassPoint() : Point() {}
  explicit MassPoint(int maxRandom) : Point(maxRandom),
    mass(rand() % maxRandom) {}
  MassPoint(int x, int y, int z, const Color &color, int mass)
    : Point(x, y, z, color), mass(mass) {}
  MassPoint(int x, int y, int z, int mass) : Point(x, y, z), mass(mass) {}
  int getMass() const { return mass; }
  int compareByMass(const MassPoint &other) const {
    return getMass() - other.getMass();
  }
  static int compareByMass(const MassPoint &a, const MassPoint &b) {
    return a.compareByMass(b);
  }
 private:
  int mass;
};
 
std::ostream &operator<<(std::ostream &stream, const MassPoint &point) {
  return stream << "MassPoint{" <<
    "x=" << point.getX() << "," <<
    "y=" << point.getY() << "," <<
    "z=" << point.getZ() << "," <<
    "color=" << point.getColor() << "," <<
    "mass=" << point.getMass() << "}";
}
 
MassPoint *getMax(MassPoint *begin, MassPoint *end,
  int (*comparator)(const MassPoint &a, const MassPoint &b)) {
  MassPoint *result = begin++;
  while (begin != end) {
    if (comparator(*result, *begin) < 0) {
      result = begin;
    }
    ++begin;
  }
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  Point origin(0, 0, 0);
  std::cout << "ORIGIN POINT: " << origin << std::endl;
 
  const int numberOfPoints = 10;
  MassPoint points[numberOfPoints];
  
  for (int i = 0; i < numberOfPoints; ++i) {
    points[i] = MassPoint(20); // òî÷êГ* Г±Г® ñëó÷Г*Г©Г*ûìè êîîðäèГ*Г*ГІГ*ìè
    std::cout << points[i] << " distance to origin is " <<
      std::fixed << std::setprecision(3) <<
      points[i].getDistanceTo(origin) << std::endl;
  }
  
  std::cout << "MAX MASS POINT " << *getMax(points, points + numberOfPoints,
    MassPoint::compareByMass);
 
  std::cin.peek();
  return 0;
}
Yandex
Объявления
11.01.2013, 03:29     Полиморфизм, Точка в трёхмерном пространстве
Ответ Создать тему
Опции темы

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