Лабораторная работа 4.4. Структуры

Цель. Получить практические навыки работы со структурами. Научиться создавать структуры для моделирования геометрических объектов.

Для решения задач данной темы требуются некоторые структуры.

· Структура 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 и возвращает ту из них, которая расположена ближе к началу координат.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: