Класс Match

Для работы с числовыми типами в 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();

}

}

Предлагаю ознакомиться с аналогичными статьями: