Читать в оригинале

<< Предыдущая Оглавление Следующая >>


4.3.8. Класс Math и его функции

Кроме переменных и констант, первичным материалом для построения выражений являются функции. Большинство их в проекте будут созданы самим программистом, но не обойтись и без встроенных функций. Умение работать в среде Visual Studio 2005 предполагает знание встроенных возможностей этой среды, знание возможностей каркаса Framework .Net, пространств имен, доступных при программировании на языке C#, а также соответствующих встроенных классов и функций этих классов. Рассмотрим еще один класс - класс Math, содержащий стандартные математические функции, без которых трудно обойтись при построении многих выражений. Этот класс содержит два статических поля, задающих константы E (число е) и PI (число пи), а также 23 статических метода. Методы задают:

- тригонометрические функции - Sin, Cos, Tan;

- обратные тригонометрические функции - ASin, ACos, ATan, ATan2(sinx, cosx);

- гиперболические функции - Tanh, Sinh, Cosh;

- экспоненту и  логарифмические функции - Exp, Log, Log10;

- модуль, корень, знак - Abs, Sqrt, Sign;

- функции округления - Ceiling, Floor, Round;

- минимум, максимум, степень, остаток - Min, Max, Pow, lEEEReminder.

В особых пояснениях эти функции не нуждаются. Приведем пример:

/// <summary>
/// работа с функциями класса Math
/// </summary>
public void MathFunctions() {
          double a, b, t, t0, dt, y;
          string NameFunction;
          Console.WriteLine("Введите имя F(t)исследуемой функции a*F(b*t)" +
                        " (sin, cos, tan, cotan)");
          NameFunction = Console.ReadLine();
          Console.WriteLine("Введите параметр a (double)");
          a = double.Parse(Console.ReadLine());
          Console.WriteLine("Введите параметр b (double)");
          b = double.Parse(Console.ReadLine());
          Console.WriteLine("Введите начальное время t0(double)");
          t0 = double.Parse(Console.ReadLine());
          const int points = 10;
          dt = 0.2;
          for (int i = 1; i <= points; i++) {
            t = t0 + (i - 1)*dt;
            switch (NameFunction) {
                        case ("sin"): y = a*Math.Sin(b*t); break;
                        case ("cos"): y = a*Math.Cos(b*t); break;
                        case ("tan"): y = a*Math.Tan(b*t); break;
                        case ("cotan"): y = a/Math.Tan(b*t); break;
                        case ("ln"): y = a*Math.Log(b*t); break;
                        case ("tanh"): y = a*Math.Tanh(b*t); break;
                        default: y = 1; break;
            } //switch
            Console.WriteLine("t = " + t + "; " + a + "*" + NameFunction + "(" + b + "*t)= " + y + ";");
          } //for
          double u = 2.5, v = 1.5, p, w;
          p = Math.Pow(u, v);
          w = Math.IEEERemainder(u, v);
          Console.WriteLine("u = " + u + "; v= " + v + "; power(u,v)= " + p + "; reminder(u,v)= " + w);
} //MathFunctions

Отметим, что в примерах программного кода постепенно расширяется диапазон используемых средств.

Рисунок 18. Результаты работы процедуры MathFunctions

В данном примере пользователь определяет, какую функцию он хочет вычислить и при каких значениях ее параметров. Некоторые параметры задаются константами и инициализированными переменными, но для большинства их значения вводятся пользователем. Одна из целей этого фрагмента состоит в демонстрации консольного ввода данных разного типа, при котором используется метод Parse. Этот метод избавляет программиста от необходимости проверки возможности преобразования введенной строки символов в число, так как метод Parse либо выполнит преобразование, либо возбудит исключение System.FormatException.

Функция, заданная пользователем, вычисляется в операторе switch. Здесь реализован выбор из 6 стандартных функций, входящих в «джентльменский» набор класса Math.

Вызов еще двух функций из класса Math содержится в двух последних строчках этой процедуры. На рис. 18 можно видеть результаты ее работы.

 



<< Предыдущая Оглавление Следующая >>