Для работы с числовыми типами в CTS предусмотрен класс Math, содержащий математические константы и статические методы для реализации тригонометрических, логарифмических и других математических функций общего назначения. В полях Е и PI класса хранятся основные математические константы — соответственно основание натурального логарифма e = 2,71828183 и число = 3,14159265. В табл. 5.2 представлены некоторые методы класса. Каждый метод объявлен с модификаторами public и static, что делает эти методы доступными из любой точки программы без предварительного создания объекта класса Math.
Таблица 5.2. Некоторые методы класса Math
Метод
Описание
double Abs(double d);
Возвращает модуль аргумента. Имеются перегруженные методы для всех математических типов
double Acos(double d);
Возвращает угол в радианах по его арккосинусу
double Asin(double d);
Возвращает угол в радианах по его арксинусу
double Atan(double d);
Возвращает угол в радианах по его арктангенсу
long BigMul(int x, int y);
Возвращает произведение двух 32-разрядных чисел
double Ceiling(double d);
Возвращает наименьшее целое число, которое больше или равно аргументу
double Cos(double d);
Возвращает косинус угла d в радианах
double Cosh(double d);
Возвращает гиперболический косинус угла d в радианах
int DivRen(int a, int b, out int R);
Возвращает результат деления двух целых чисел и остаток R как выходной параметр
double Exp(double d);
Возвращает E в степени d
double Floor(double d);
Возвращает наибольшее целое, которое меньше или равно заданному числу
double IEEERemainder(double a, double b);
Возвращает остаток от деления а на b
double Log(double d);
Возвращает натуральный логарифм числа d. В перегруженном методе вторым параметром передается основание логарифма
double Log10(double d);
Возвращает десятичный логарифм числа d
double Max(double a, double b));
Возвращает максимальное из двух чисел. Имеются перегруженные методы для всех математических типов
double Max(double a, double b);
Возвращает минимальное из двух чисел. Имеются перегруженные методы для всех математических типов
double Pow(double a, double b);
Возвращает результат возведения числа а в степень b
double Round(double a);
Округляет число а до ближайшего целого. Имеются перегруженные методы для всех математических типов
int Sign(double a);
Возвращает -1, 0 или +1 в зависимости от того, что число а меньше нуля, равно ему или больше нуля. Имеются перегруженные методы для всех математических типов
double Sin(double a);
Возвращает синус угла а в радианах
double Sinh(double a);
Возвращает гиперболический синус угла а в радианах
double Sqrt(double a);
Возвращает корень квадратный из а
double Tan(double a);
Возвращает тангенс угла а в радианах
double Tanh(double a);
Возвращает гиперболический тангенс угла а в радианах
Для иллюстрации приемов работы с математическими типами и функциями в листинге 5.3 представлена программа, которую я с небольшими изменениями позаимствовал из справочной службы Visual Studio 2005 (файл Ch05\MathTest\Program.cs).
Листинг 5.3. Иллюстрация использования некоторых методов класса Math
using System;
/*
В этом примере демонстрируется использование методов
класса System.Math для определения высоты и углов
трапеции по ее сторонам.
*/
class MathTrapezoidSample
{
// В этом классе определены поля для хранения
// параметров трапеции, а также методы, необходимые
// для решения задачи.
private double m_longBase; // Большее основание
private double m_shortBase; // Меньшее основание
private double m_leftLeg; // Левая сторона
private double m_rightLeg; // Правая сторона
private double x; // Проекция правой стороны на основание
public MathTrapezoidSample(double longbase, double shortbase,
double leftLeg, double rightLeg)
{
// Конструктор класса принимает параметры
// трапеции и запоминает их в полях, после чего
// вычисляет и запоминает проекцию правой стороны
// на основание
m_longBase = Math.Abs(longbase);
m_shortBase = Math.Abs(shortbase);
m_leftLeg = Math.Abs(leftLeg);
m_rightLeg = Math.Abs(rightLeg);
GetRightSmallBase();
}
private void GetRightSmallBase()
{
// Вычисляет проекцию правой стороны на основание
x = (Math.Pow(m_rightLeg,2.0) - Math.Pow(m_leftLeg,2.0) +
Math.Pow(m_longBase,2.0) + Math.Pow(m_shortBase,2.0) -
2* m_shortBase * m_longBase)/ (2*(m_longBase - m_shortBase));
}
public double GetHeight()
{
// Вычисляет высоту трапеции
return Math.Sqrt(Math.Pow(m_rightLeg,2.0) - Math.Pow(x,2.0));
}
public double GetSquare()
{
// Вычисляет площадь трапеции
return GetHeight() * m_longBase / 2.0;
}
public double GetLeftBaseRadianAngle()
{
// Находит левый нижний угол трапеции (радианы)
double sinX = GetHeight()/m_leftLeg;
return Math.Round(Math.Asin(sinX),2);
}
public double GetRightBaseRadianAngle()
{
// Находит правый нижний угол (радианы)
double cosX = (Math.Pow(m_rightLeg,2.0) + Math.Pow(x,2.0) +
Math.Pow(GetHeight(),2.0))/(2*x*m_rightLeg);
return Math.Round(Math.Acos(cosX),2);
}
public double GetLeftBaseDegreeAngle()
{
// Левый нижний угол (градусы)
double x = GetLeftBaseRadianAngle() * 180/ Math.PI;
return Math.Round(x,2);
}
public double GetRightBaseDegreeAngle()
{
// Правый нижний угол (градусы)
double x = GetRightBaseRadianAngle() * 180/ Math.PI;
return Math.Round(x,2);
}
static void Main()
{
MathTrapezoidSample trpz = new MathTrapezoidSample(
20.0, 10.0, 8.0, 6.0);
Console.WriteLine(
"Основания трапеции равны 20 и 10 см, стороны - 8 и 6\n");
double h = trpz.GetHeight();
Console.WriteLine("Высота трапеции: " + h.ToString());
double dxR = trpz.GetLeftBaseRadianAngle();
Console.WriteLine("Левый нижний угол: " +
dxR.ToString() + " (радианы)");
double dyR = trpz.GetRightBaseRadianAngle();
Console.WriteLine("Правый нижний угол: " +
dyR.ToString() + " (радианы)");
double dxD = trpz.GetLeftBaseDegreeAngle();
Console.WriteLine("Левый нижний угол: " +
dxD.ToString() + " (градусы)");
double dyD = trpz.GetRightBaseDegreeAngle();
Console.WriteLine("Правый нижний угол: " +
dyD.ToString() + " (градусы)");
Console.ReadLine();
}
}
0 коммент.:
Отправить комментарий