- •Пример № 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 ( )
- •Результат работы программы
Vec (char* pName ) : X ( 0 ) , y ( 0 ) { strncpy ( name , pName , 3 ) ; }
Vec ( char* pName ,doubleX ,doubleY ) : X ( X ) , y ( y ) { strncpy ( name , pName , 3 ) ; }
// функции, дружественные классу Vec
friend void Print ( const Vec & V ) ; // выводит на экран имя и проекции заданного вектора
friend double Modul ( const Vec & V ) ; // возвращает длину заданного вектора
frienddoubleScalar (constVec & V ,constVec & W ) ;
// возвращает скалярное произведение заданных векторов
friendvoidRotate (constVec & V ,doublef , Vec & W ) ;
// поворачивает заданный вектор на заданный угол
// функции, дружественные классам Dot и Vec
friend void Vector(const Dot&N,const Dot&K,Vec&V);
// вычисляет вектор по координатам его концов
friend void EndVec(const Dot&N,const Vec&V,Dot&K);
// вычисляет координаты конца вектора
} ;
Файл DotVec.Cpp
#include"DotVec.h"
//////////////////////////// РЕАЛИЗАЦИЯ функциЙ, дружественных классу Dot //////////////////////////////////
// выводит на экран имя точки и значения координат заданной точки
Void Print ( const Dot & d ) // константная ссылка на заданную точку
{
char S [ ] ="Координаты точки "; // объявляет и инициализирует строку заголовка
CharToOem ( S , S ) ; // преобразует символы строки в кириллицу
cout<<S<<D.name<<" :"; // выводит на экран заголовок и имя точки
cout<<"\tx = "<<D.x<<"\ty = "<<D.y<<'\n' ; // выводит на экран значения координат
}
// вводит значения координат заданной точки с клавиатуры
Void Input ( Dot & d ) // ссылка на заданную точку
{
char S [ ] =”Введите координаты точки ”; // объявляет и инициализирует строку приглашения
CharToOem ( S , S ) ; // преобразует символы строки в кириллицу
cout<<S<<D.name<<'\n' ; // выводит на экран приглашение и имя точки
cout <<"\tx="; cin >>D.x ; // вводит значение абсциссы точки с клавиатуры
cout <<"\ty="; cin >>D.y ; // вводит значения ординаты точки с клавиатуры
}
// возвращает расстояние между заданными точками
double Dist ( const Dot & A , const Dot & B ) // константные ссылки на заданные точки
{
double X = A.x – B.x ; // объявляет и инициализирует
double Y = A.y – B.y ; // катеты прямоугольного треугольника
return sqrt ( X*X + Y*Y ) ; // возвращает значение гипотенузы прямоугольного треугольника
}
// возвращает значение площади треугольника, образованного заданными точками
doubleArea (constDot & A ,constDot & B ,constDot & C )
{ // константные ссылки на вершины треугольника
double a = Dist ( C , B ) ; // объявляет и вычисляет
double b = Dist ( C , A ) ; // длины сторон треугольника
doublec = Dist ( A , B ) ;
double p = ( a+b+c ) / 2.0 ; // объявляет и вычисляет длину полупериметра
return sqrt ( p*( p – a )*( p – b )*( p – c )) ; // вычисляет площадь треугольника по формуле Герона
}
// возвращает значение угла в градусах с вершиной в точке B
doubleAngle (constDot & A ,constDot & B ,constDot & C )
{ // константные ссылки на заданные точки
constdoublepi = 4*atan ( 1.0 ) ;// объявляет константу π