CPP-101: Структури

Примери: Правоъгълник в равнината

Нека разгледаме правоъгълник в равнината, чиито страни са успоредни на координатните оси. За определянето на такъв правоъгълник е напълно достатъчно да се укажат два срещуположни негови върха – например долния ляв (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;
}
Публикувано в CPP-101, ООП с етикети , , . Постоянна връзка.

Един коментар по CPP-101: Структури

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

Коментарите са затворени.