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

Составить программу, которая печатает true, если точка с координатами (х,у) принадлежит заштрихованной области, и false в противном случае - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поиск и замена в векторе http://www.cyberforum.ru/cpp-beginners/thread694141.html
Есть вектор v, который содержит следующие значения элементов: v Нужно найти и заменить значения 5 на 1, чтобы в итоге получилось: v
C++ Запись и чтение текстового файла Сначала файл нужно записать, строчки формируются из разных переменных, текста и чисел. Потом прочитать текстовый файл отделяя текст от чисел. Текст заносится в одну переменную, числа в другую... http://www.cyberforum.ru/cpp-beginners/thread694138.html
Вывести текст на экран дисплея C++
Помогите решить, я совсем не понимаю как сделать задача такая: Вариант 8 с помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки...
C++ Циклический алгоритм
помогите составить программу для цикла Выкладывайте задание в текстовом виде в теме.
C++ Задачи по циклах http://www.cyberforum.ru/cpp-beginners/thread694109.html
1)Написать функцию, которая по целым числом определяет старшую цифру его десятичной записи. С++; 2)http://www.cyberforum.ru/cpp-beginners/thread693808.html Правила: одна тема - один вопрос.
C++ Что означает "нарушение доступа (ошибка сегментации)" отладчик выдает : нарушение доступа(ошибка сегментации) что это означает??? в чем суть ошибки??? подробнее

Показать сообщение отдельно
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
11.11.2012, 13:15
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
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
#include <cmath>
 
class Stringable {
 public:
  virtual std::string toString() const {}
};
 
std::ostream &operator<<(std::ostream &stream, const Stringable &object) {
  return stream << object.toString();
}
 
std::ostream &operator<<(std::ostream &stream, const Stringable *object) {
  return stream << object->toString();
}
 
class Point : public Stringable {
 private:
  double x, y;
 public:
  Point() : x(0.0), y(0.0) {}
  Point(double x, double y) : x(x), y(y) {}
  const double &getX() const { return x; }
  const double &getY() const { return y; }
  double getDistanceTo(const Point &other) {
    return pow(pow(getX() - other.getX(), 2.0) +
      pow(getY() - other.getY(), 2.0), 0.5);
  }
  static Point *generateRandomPoint() {
    return new Point((rand() % 2000 - 1000) / 100., (rand() % 2000 - 1000) / 100.);
  }
  virtual std::string toString() const {
    std::stringstream ss;
    ss << "[" << getX() << ", " << getY() << "]";
    return ss.str();
  }
};
 
class Figure : public Stringable {
 public:
  virtual bool isPointInside(const Point &point) {}
};
 
class Circle : public Figure {
 private:
  Point center;
  double radius;
 public:
  Circle(const Point &center, const double &radius) 
    : center(center), radius(radius) {}
  const Point &getCenter() const { return center; }
  const double &getRadius() const { return radius; }
  virtual bool isPointInside(const Point &point) {
    return center.getDistanceTo(point) < radius;
  }
  virtual std::string toString() const {
    std::stringstream ss;
    ss << "[Circle [" << getCenter() << ", " << getRadius() << "]]";
    return ss.str();
  }
};
 
class Triangle : public Figure {
 private:
  Point a, b, c;
 public:
  Triangle(const Point &a, const Point &b, const Point &c) : a(a), b(b), c(c) {}
  const Point &getA() const { return a; }
  const Point &getB() const { return b; }
  const Point &getC() const { return c; }
  double getArea() const {
    return fabs((a.getX() - c.getX())*(b.getY() - c.getY()) + (b.getX()-c.getX())*(c.getY()-a.getY()));
  }
  virtual bool isPointInside(const Point &point) {
    return fabs(getArea() - Triangle(a, b, point).getArea() -
      Triangle(a, point, c).getArea() - Triangle(point, b, c).getArea())
      < 0.000000001;
  }  
  virtual std::string toString() const {
    std::stringstream ss;
    ss << "[Triangle [" << getA() << ", " <<
      getB() << ", " << getC() << "]]";
    return ss.str();
  }
};
 
std::ostream &operator<<(std::ostream &stream, const std::vector<Figure*> &stringables) {
  std::copy(stringables.begin(), stringables.end(), 
    std::ostream_iterator<Figure*>(stream, "; "));
  return stream;
}
 
std::ostream &operator<<(std::ostream &stream, const std::vector<Point*> &stringables) {
  std::copy(stringables.begin(), stringables.end(), 
    std::ostream_iterator<Point*>(stream, "; "));
  return stream;
}
 
Figure *isPointInFigures(const Point &point, std::vector<Figure*> figures) {
  for (std::vector<Figure*>::iterator figure = figures.begin();
    figure != figures.end(); ++figure)
    if ((*figure)->isPointInside(point))
      return *figure;
    return NULL;
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  std::vector<Figure*> figures;
  figures.push_back(new Circle(Point(-4., 4), 3.));
  figures.push_back(new Triangle(Point(0, 0), Point(6., 0.), Point(0., 6.)));
 
  std::vector<Point*> points;
  for (int i = 0; i < 10; ++i) points.push_back(Point::generateRandomPoint());
 
  std::cout << "Points: " << points << std::endl;
  std::cout << "Figures: " << figures << std::endl;
 
  for (std::vector<Point*>::iterator point = points.begin();
    point != points.end(); ++point) {
    if (Figure *figure = isPointInFigures(**point, figures))
      std::cout << **point << " is in figure " << *figure << std::endl;
  }
 
  for (std::vector<Figure*>::iterator i = figures.begin();
    i != figures.end(); ++i)
    delete *i;
  for (std::vector<Point*>::iterator i = points.begin(); i != points.end(); ++i)
    delete *i;
 
  std::cin >> argc;
  return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru