Примери: Правоъгълник в равнината
Нека разгледаме правоъгълник в равнината, чиито страни са успоредни на координатните оси. За определянето на такъв правоъгълник е напълно достатъчно да се укажат два срещуположни негови върха – например долния ляв (bl – bottom left) и горния десен (ur – upper right).
Дефиницията на структурата rect, която описва такива правоъгълници, е представена в следния фрагмент:
struct point {
double x;
double y;
};
struct rect {
point bl;
point ur;
};
Обърнете внимание, че като членове на структурата rect се използват променливи, чийто тип е дефинираната по-горе структура point.
Нека разгледаме няколко функции, които работят със структурите rect и point. Първо, нека дефинираме функция cononical_rect, целта на която е да върне правоъгълник, в който членовете има коректни стойности – x-координатата на долния ляв ъгъл трябва да е по-малка от x-координатата на горния десен ъгъл; y-координатата на долния ляв ъгъл трябва да е по-малка от y-координата на горния десен ъгъл. Функцията cononical_rect обезпечава спазването на това изискване.
inline double min(double x, double y) {
return xy?x:y;
}
rect canonical_rect(rect r) {
point bl={min(r.bl.x,r.ur.x),min(r.bl.y,r.ur.y)};
point ur={max(r.bl.x,r.ur.x),max(r.bl.y,r.ur.y)};
rect result={bl,ur};
return result;
}
Обърнете внимание, че функциите min и max са дефинирани като inline функции.
Нека разгледаме още една функция, която работи със структурите rect и point – функцията contains. Тази функция получава като аргументи правоъгълник r и точка p и проверява дали точката p се намира в правоъгълника r. Ако точката се намира в правоъгълника, функцията връща стойност true, иначе – връща false.
bool contains(rect r, point p) {
return p.x>=r.bl.x && p.x<=r.ur.x
&& p.y>=r.bl.y && p.y <= r.ur.y;
}


Pingback: CPP-101: Кратък обзор на езика за програмиране C++ | Записки по програмиране