/* func.h * Описание функций */ #pragma once /* Директива pragma с параметром once гарантирует, * что данный загоовочный файл будет включен в компилируемый файл * не более одного раза. * Директива pragma не входит в стандарт С++, * но работает в Visual C++ и многих других системах разработки. */ // Определение макроса SQR #define SQR(x) (x) * (x) /* После этой строки любое вхождение SQR(_параметр_) * будет заменено на (_парметр_) * (_параметр_). * Стоит отметить, что скобки в данном случае обязательны, * т.к. без них подстановка не работает для выражений: * ( x + y ) * ( x + y ) != x + y * x + y */ // Разопределение макроса SQR #undef SQR /* После этой строки любое вхождение SQR() * не будет обрабатываться препроцессором. * * Описывать макросы в заголовочных файлах - плохо, * поскольку это вносит изменения в ещё не написанный код. * * Сегодня макросы вообще считаются вредным инструментом, * т.к. приводят к ситуации, когда програмист не видит тот код, * который будет скомпилирован. */ /* Вместо макросов в С++ принято использовать встраиваемые функции. * При реализации необходимо отметить функцию спецификатором inline. */ /* Встраиваемые (inline) функции подставляются компилятором, * но только достаточно простые функции. */ // double sqr ( double x ) // Вычисляет квадрат числа. inline double sqr(double x) { return x*x; } //Функция 1. // Вычисляет эвклидово расстояние между двумя точками на плоскости. // Параметры: // x1, y1, x2, y2 – вещественные координаты точек. // Возвращаемое значение: // расстояние между точками ( x1; y1 ), ( x2; y2 ). double distance ( double x1, double y1, double x2, double y2 ); //Функция 2. // Вспомогательная функция сортировки трех значений. // Параметры: // a, b, c - значения для сортировки, // asc - флаг направления сортировки: // false - по убыванию (по умолчанию), // true - по возростанию. // Результат: // a, b, c отсортированные в соответствии со значением asc. void sort ( double &a, double &b, double &c, bool asc = 0); // Набор целочисленных констант, описывающих тип треугольника. enum triangleType { tRight = 0, // прямоугольный tAcute, // остроугольный tObtuse // тупоугольный }; /* Перечисление - удобный способ ограничить набор значений, * которые может принимать переменная или возвращать функция. */ //Функция 3. // Определяет тип треугольника, заданного тремя точками. // Параметры: // xa, ya, xb, yb, xc, yc – вещественные координаты точек // A ( xa, ya ), B ( xb, yb ), C ( xc, yc ). // Возвращаемое значение: // tRight - прямоугольный, // tAcute - остроугольный, // tObtuse - тупоугольный. triangleType checkTriangleType ( double xa, double ya, double xb, double yb, double xc, double yc ); //Функция 4. // Вычисляет площадь треугольника, заданного тремя точками. // Параметры: // xa, ya, xb, yb, xc, yc – вещественные координаты точек // A ( xa, ya ), B ( xb, yb ), C ( xc, yc ). // Возвращаемое значение: // площадь треугольника ABC. double square ( double xa, double ya, double xb, double yb, double xc, double yc ); //Функция 5. // Вычисляет расстояние от точки до прямой, заданной двумя точками. // Параметры: // from_x, from_y, to_x1, to_y1, to_x2, to_y2 – вещественные координаты точек // F ( from_x; from_y ), T1 ( to_x1; to_y1 ), T2 ( to_x2; to_y2 ). // Возвращаемое значение: // расстояние от точки F ( from_x; from_y ) до прямой, заданной точками T1 ( to_x1; to_y1 ), T2 ( to_x2; to_y2 ). double distanceTo ( double from_x, double from_y, double to_x1, double to_y1, double to_x2, double to_y2 );