- •Пример № 3
- •Задача решается по следующему алгоритму:
- •Проверка правильности работы программы:
- •При вычислении угла используются функции:
- •Файл DotVec.H
- •Vec (char* pName ) : X ( 0 ) , y ( 0 ) { strncpy ( name , pName , 3 ) ; }
- •Vec ( char* pName ,doubleX ,doubleY ) : X ( X ) , y ( y ) { strncpy ( name , pName , 3 ) ; }
- •Файл DotVec.Cpp
- •Void Print ( const Dot & d ) // константная ссылка на заданную точку
- •Void Input ( Dot & d ) // ссылка на заданную точку
- •Vec ba ("ba") , bc ("bc") ; // объявляет вектора
- •Vector ( b , a , ba ) ; Vector ( b , c , bc ) ;// вычисляет вектора
- •Void Print ( const Vec & V ) // константная ссылка на заданный вектор
- •Void Rotate ( const Vec & V , // константная ссылка на заданный вектор
- •VoidTitle ( )
- •Результат работы программы
Пример № 3
Дружественные функции
В приведённом примере решена следующая задача:
Заданы координаты двух вершин правильного треугольника. Определить координаты третьей вершины и его площадь.
Задача решается по следующему алгоритму:
Действия Функция
вводим координаты точек AиBс клавиатурыInput ( Dot& )
вычисляем вектор ABпо координатам его концовVector ( const Dot& , const Dot& )
поворачиваем вектор ABна 60º и определяем векторACRotate ( const Vec& , double , Vec& )
прибавляем вектор ACк точкеAи получаем точкуC EndVec ( const Dot& , const Vec& , Dot& )
выводим на экран координаты точки C Print ( const Dot& )
длины сторон вычисляем по теореме Пифагора Dist ( const Dot& , const Dot & )
вычисляем площадь треугольника по его вершинам Area (const Dot&, const Dot&, const Dot&)
Проверка правильности работы программы:
вычисляем длины всех сторон треугольника Dist ( const Dot& , const Dot& )
вычисляем значения всех углов треугольника Angle(const Dot&, const Dot&,const Dot&)
При вычислении угла используются функции:
вычисление скалярного произведение двух векторов Scalar ( const Vec& , const Vec& )
вычисление модуля вектора Modul ( const Vec& )
Для каждого действия объявляем соответствующую функцию-член в классах DotиVec.
Файл DotVec.H
////////////////////////////////////////////////// подключение библиотек ////////////////////////////////////////////////////
#include<iostream.h> // содержит функции ввода-вывода
#include<windows.h> // содержит функцию CharToOem
#include <math.h> // содержит математические функции
class Vec ; // предварительное объявление класса
///////////////////////////////////////////////// интерфейс класса точки /////////////////////////////////////////////////
class Dot // класс точки
{ // закрытые члены класса
double x , y ; // координаты точки
char name ; // имя точки
public: // открытые члены класса
// конструкторы класса
Dot ( char Name) : name ( Name ) , x ( 0 ) , y ( 0 ) { } // использует список инициализации
Dot ( char Name , double X , double Y ) { name = Name ; x = X ; y = Y ; }
// функции, дружественные классу Dot
friend void Print ( const Dot & D ) ; // выводит на экран имя и координаты заданной точки
friend void Input ( Dot & D ) ; // вводит значения координат заданной точки с клавиатуры
friend double Dist ( const Dot & A , const Dot & B ) ;
// возвращает расстояние между заданными точками
frienddoubleArea (constDot & A ,constDot & B ,constDot & C ) ;
// возвращает значение площади треугольника, образованного заданными точками
frienddoubleAngle (constDot & A ,constDot & B ,constDot & C ) ;
// возвращает значение угла с вершиной в точке B
// функции, дружественные классам Dot и Vec
friend void Vector(const Dot&N,const Dot&K,Vec&V);
// вычисляет вектор по координатам его концов
friend void EndVec(const Dot&N,const Vec&V,Dot&K);
// вычисляет координаты конца вектора
} ;
/////////////////////////////////////////// интерфейс класса вектора /////////////////////////////////////////////////
class Vec // класс вектора
{ // закрытые члены класса
double x , y ; // проекции вектора
char name [ 3 ] ; // имя вектора
public: // открытые члены класса
// конструкторы