Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема10_Струкруры.doc
Скачиваний:
2
Добавлен:
07.09.2019
Размер:
179.2 Кб
Скачать

Передача структуры в качестве аргумента функции

Рассмотрим следующую задачу. Объявить структуру Point (Точка) с вещественными полями x, y и z, которые задают координаты этой точки в трехмерном пространстве. Написать функцию, которая принимает два аргумента типа Point и возвращает расстояние между ними.

#include "stdafx.h"

#include <iostream>

using namespace std;

struct Point {

float x;

float y;

float z;

};

float sqr(float number) {

return number*number;

}

float getDistance(Point p, Point q) {

return sqrt(sqr(p.x-q.x) +

sqr(p.y-q.y) +

sqr(p.z-q.z));

}

int main() {

Point p = {1,2,3};

Point q = {2,3,4};

cout << getDistance(p,q)) << endl;

}

Возврат структур в качестве значения функции

Создадим функцию, которая принимает две точки и возвращают ту из них, которая отстоит дальше от начала координат.

#include <iostream>

using namespace std;

struct Point {

float x;

float y;

float z;

};

float sqr(float number) {

return number*number;

}

float getDistance(Point p, Point q) {

return sqrt(sqr(p.x-q.x) +

sqr(p.y-q.y) +

sqr(p.z-q.z));

}

Point farPoint(Point p1, Point p2) {

Point zero = {0,0,0};

float d1 = getDistance(zero, p1);

float d2 = getDistance(zero, p2);

return d1>d2 ? p1 : p2;

}

int main() {

Point p = {1,2,3};

Point q = {2,3,4};

Point far = farPoint(p,q);

cout << far.x << " " << far.y << endl;

}

Примеры решения задач

Задача 1. Объявите структуру Vector (Вектор) с вещественными полями x, y и z, которые задают координаты этого вектора в трёхмерном пространстве. Создайте функцию, которая принимает два аргумента типа Vector и возвращает их скалярное произведение.

#include <iostream>

using namespace std;

struct Vector { float x; float y; float z; };

float getScalarProduct(Vector v1, Vector v2) {

return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;

}

Int main() {

Vector vect1 = {12.3, 45.3, 2.3};

Vector vect2 = {11.2, 35.2, 17.8};

cout << getScalarProduct(vect1, vect2) << endl;

return 0;

}

Задача 2. Объявите структуру Point (Точка) с вещественными полями x и y, которые задают её координаты на плоскости. Объявить также структуру Circle (Окружность) с полем center типа Point, которое задает координаты центра этой окружности, и вещественным полем radius, определяющим её радиус. Создайте функцию, которая принимает в качестве аргументов окружность и точку, а возвращает true, если точка находится внутри окружности, и false – иначе.

#include <iostream>

using namespace std;

struct Point { float x; float y; };

struct Circle { Point center; float radius; };

float getDistance(Point p1, Point p2) {

return sqrt((p1.x-p2.x)*(p1.x-p2.x) +

(p1.y-p2.y)*(p1.y-p2.y));

}

bool isInside(Point p, Circle c) {

float dist = getDistance(p, c.center);

return dist < c.radius;

}

int main() {

Circle circle;

circle.center.x = 12.3;

circle.center.y = 10.1;

circle.radius = 7.8;

Point point;

point.x = 15;

point.y = 11;

isInside(point, circle) ?

cout << "Внутри\n" : cout << "Снаружи\n";

return 0;

}

Задача 3. Объявите структуру «Книга», имеющую 5 полей: название, автор, тираж, количество страниц и цена. Задайте в коде программы массив из структур и выведите их в виде таблицы.

#include <iostream>

using namespace std;

struct Book {

char name[100];

char author[100];

int nCopies;

int nPages;

float price;

};

Book books[] = {

{"Пиковая дама", "Пушкин", 10000, 70, 300},

{"Идиот", "Достоевский", 20000, 490, 600},

{"Мастер и Маргарита", "Булгаков", 40000,340,500},

{"Совершенный код", "Макконнел", 4000,800, 900},

{"Криптография", "Смарт", 3000, 400, 550}

};

int main() {

setlocale(LC_ALL, "Russian");

printf("%-20s %-12s %-7s %-5s %-5s\n",

"Название", "Автор", "Тираж", "Стр.", "Цена");

printf("------------------------------------\n");

for (int i=0; i<5; i++) {

printf("%-20s %-12s %-7d %-5d %-5.2f\n",

books[i].name, books[i].author,

books[i].nCopies, books[i].nPages,

books[i].price);

}

printf("------------------------------------\n");

return 0;

}

Задача 4. На основе предыдущей программы реализовать меню из следующих пунктов: 1 – Вывод массива в виде таблицы, 2 – Сортировка массива по второму полю, 3 – Сортировка массива по третьему полю, 4 – Запись содержимого массива в файл, 0 – Выход. Каждый пункт меню реализовать в виде отдельной функции.

#include <iostream>

using namespace std;

struct Book {

char name[100];

char author[100];