Цель. Получить практические навыки работы со структурами. Научиться создавать структуры для моделирования геометрических объектов.
Для решения задач данной темы требуются некоторые структуры.
· Структура Point2D (двумерная точка) имеет вещественные поля x и y, определяющие ее координаты в двумерном пространстве.
· Структура Circle (окружность) имеет поле center типа Point2D, которое задает координаты центра этой окружности, и вещественное поле radius, определяющее ее радиус.
· Структура Segment (отрезок) состоит из двух полей типа Point2D, определяющих его концы.
· Структура Triangle (треугольник), состоит из трех полей типа Point2D, задающих координаты вершин этого треугольника.
· Структура Point3D (трехмерная точка) имеет вещественные поля x, y и z, задающие ее координаты в пространстве.
· Структура Sphere (Сфера) имеет поле center типа Point3D, задающее координаты центра этой сферы, и вещественное поле radius, определяющее ее радиус.
· Структура Vector3D (трехмерный вектор) имеет вещественные поля x, y и z, задающие его координаты в трехмерном пространстве.
|
|
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
Задача 1. Создайте процедуру, которая принимает в качестве аргумента вектор Vector3D и выводит его координаты.
#include <iostream>
using namespace std;
struct Vector3D {
float x;
float y;
float z;
};
void printVector(Vector3D v) {
cout << "x=" << v.x << ", ";
cout << "y=" << v.y << ", ";
cout << "z=" << v.z << ".\n";
}
int main() {
Vector3D v1 = {1.5, 6.7};
Vector3D v2;
v2.x=3; v2.y=5.6; v2.z=7.8;
printVector(v1);
printVector(v2);
system("pause");
return 0;
}
Задача 2. Создайте функцию, которая принимает в качестве аргументов две точки Point2D и возвращает расстояние между ними.
#include <iostream>
using namespace std;
struct Point2D {
float x;
float y;
};
float getDistance(Point2D p, Point2D q) {
return sqrt((p.x-q.x)*(p.x-q.x)+
(p.y-q.y)*(p.y-q.y));
}
int main() {
Point2D p1 = {1.5, 6.7};
Point2D p2 = {2.5, 8.5};
cout << getDistance(p1, p2) << endl;
system("pause");
return 0;
}
Задача 3. Создайте логическую функцию, которая принимает аргументом точку Point2D и проверяет, попадает ли она в единичную окружность.
struct Point2D {
float x;
float y;
};
bool isInside(Point2D p) {
return sqrt(p.x*p.x + p.y*p.y)<1;
}
int main() {
Point2D p1 = {0.5, 0.7};
Point2D p2 = {1.2, 3.5};
cout << (isInside(p1)? "Yes": "No") << endl;
cout << (isInside(p2)? "Yes": "No") << endl;
system("pause");
return 0;
}
Задача 4. Создайте функцию, которая принимает аргументами две точки Point2D и возвращает ту из них, которая расположена ближе к началу координат.
#include <iostream>
using namespace std;
struct Point2D {
float x;
float y;
};
Point2D getCloser(Point2D p, Point2D q) {
float d1 = sqrt(p.x*p.x + p.y*p.y);
float d2 = sqrt(q.x*q.x + q.y*q.y);
if (d1<d2) {
return p;
} else {
return q;
}
}
int main() {
Point2D p1 = {0.5, 0.7};
Point2D p2 = {1.2, 3.5};
Point2D closer = getCloser(p1,p2);
cout << closer.x << " " << closer.y << endl;
system("pause");
return 0;
}
Задача 5. Создайте функцию, которая принимает в качестве аргумента треугольник Triangle и возвращает его периметр.
|
|
#include <iostream>
using namespace std;
struct Point2D {
float x;
float y;
};
struct Triangle {
Point2D a;
Point2D b;
Point2D c;
};
float getDistance(Point2D p, Point2D q) {
return sqrt((p.x-q.x)*(p.x-q.x) +
(p.y-q.y)*(p.y-q.y));
}
float perimeter(Triangle t) {
float s1 = getDistance(t.a, t.b);
float s2 = getDistance(t.b, t.c);
float s3 = getDistance(t.a, t.c);
return s1+s2+s3;
}
int main() {
Point2D p1 = {0.5, 0.7};
Point2D p2 = {1.2, 3.5};
Point2D p3 = {1, 3};
Triangle triangle = {p1,p2,p3};
cout << perimeter(triangle) << endl;
system("pause");
return 0;
}
ЗАДАЧИ
1. Создайте процедуру, которая принимает в качестве аргумента точку Point3D и выводит ее координаты.
2. Создайте процедуру, которая принимает в качестве аргумента отрезок Segment и выводит ее координаты его начала и конца.
3. Создайте процедуру, которая принимает в качестве аргумента треугольник Triangle и выводит ее координаты его вершин.
4. Создайте функцию, которая принимает аргумент типа Triangle и возвращает его площадь.
5. Создайте функцию, которая принимает аргумент типа Triangle и возвращает его периметр.
6. Создайте функцию, которая принимает в качестве аргумента окружность Circle и возвращает ее площадь.
7. Создайте функцию, которая принимает в качестве аргумента окружность Circle и возвращает ее длину.
8. Создайте функцию, которая принимает в качестве аргумента вектор Vector3D и возвращает его длину.
9. Создайте функцию, которая принимает два аргумента типа Segment и возвращает тот из них, длина которого больше.
10. Создайте функцию, которая принимает аргумент типа Vector3D и возвращает его длину.
11. Создайте функцию, которая принимает два аргумента типа Vector3D и возвращает их скалярное произведение.
12. Создайте функцию, которая принимает два аргумента типа Point2D и возвращает расстояние между ними.
13. Создайте функцию, которая принимает в качестве аргументов окружность Circle и точку Point2D, а возвращает true, если точка лежит внутри этой окружности или на ней, и false – иначе.
14. Создайте функцию, которая принимает в качестве аргументов сферу Sphere и точку Point3D, а возвращает true, если точка лежит внутри сферы, и false – иначе.
15. Создайте функцию, которая принимает два аргумента типа Vector3D и возвращает длину вектора, являющегося их суммой.
16. Создайте функцию, которая принимает два аргумента типа Vector3D и возвращает вектор, являющийся их суммой.
17. Создайте функцию, которая принимает два аргумента типа Vector3D и возвращает величину угла между ними в градусах.
18. Создайте функцию, которая принимает два аргумента типа Point2D и возвращает ту из них, которая отстоит от точки (0,0) на большее расстояние.
19. Создайте функцию, которая принимает два аргумента типа Vector3D и возвращает тот из них, который имеет большую длину.
20. Создайте функцию, которая принимает в качестве аргумента точку и возвращает номер четверти в декартовой плоскости, где лежит эта точка. Если точка лежит на одной из осей, то функция должна возвратить 0.
21. Создайте функцию, которая принимает в качестве аргументов две окружности и возвращает ту из них, которая имеет большую площадь.
22. Создайте логическую функцию, которая принимает в качестве аргумента точку и проверяет, лежит ли она на одной из осей или нет.
23. Создайте логическую функцию, которая принимает аргумент типа Segment и проверяет, пересекает ли он одну из координатных осей.
24. Создайте функцию, которая принимает в качестве аргумента сферу и возвращает ее объем.
25. Создайте функцию, которая принимает в качестве аргумента сферу и возвращает площадь ее поверхности.
26. Создайте функцию, которая принимает в качестве аргумента трехмерный вектор и возвращает его длину.
27. Создайте функцию, которая принимает в качестве аргумента двумерный вектор и возвращает его проекцию на ось абсцисс.
28. Создайте функцию, которая принимает в качестве аргумента двумерный вектор и возвращает его проекцию на ось ординат.
|
|
29. Создайте функцию, которая принимает в качестве аргументов два двумерных вектора и возвращает угол между ними.
30. Создайте функцию, которая принимает аргументами две точки Point2D и возвращает ту из них, которая расположена ближе к началу координат.