Задача кода, который мы встроим непосредственно в уже созданную процедуру Main, достаточно понятна. Необходимо объявить и создать объекты, представляющие входные данные, организовать диалог с пользователем для ввода этих данных, обратиться к сервисам DLL для получения результата и результаты вывести на консоль. Приведу вначале код консольного проекта с построенным методом Main, а затем его прокомментирую. Вот этот код:
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleToMathTools{ class Program { /// <summary> /// Точка входа в консольный проект /// организация интерфейса к DLL MathTools /// </summary> /// <param name="args"></param> static void Main(string[] args) { //Входные данные double x = 0; const string INVITE = "Введите вещественное число x" + "- аргумент функции Sin(x)"; const string CONTINUE = "Продолжим? (Yes/No)"; string answer = "yes"; do { //Организация ввода данных Console.WriteLine(INVITE); string temp = Console.ReadLine(); x = Convert.ToDouble(temp); //Вычисления и вывод результата double res = 0; res = Math.Sin(x); Console.WriteLine("Math.Sin(x) = " + res.ToString()); res = MathTools.MyMath.Sin(x); Console.WriteLine("MathTools.MyMath.Sin(x) = " + res.ToString()); res = MathTools.MyMath.SinOld(x); Console.WriteLine("MathTools.MyMath.SinOld(x) = " + res.ToString()); //диалог с пользователем Console.WriteLine(CONTINUE); answer = Console.ReadLine(); } while (answer == "yes"); } }} Дадим краткие комментарии к этому коду.
Входные данные устроены просто - задается лишь одна переменная x типа double. Помните, что в языке C# все переменные являются объектами.
Вводу значения x предшествует, как и положено для хорошего стиля программирования, приглашение к вводу. Для ввода и вывода значений используются статические методы ReadLine и WriteLine класса Console, входящего в библиотеку FCL и предоставляющего свои сервисы пользователям консольных приложений. Для преобразования введенных данных, представляющих собой строки текста, к нужному типу (в нашем случае к типу double) используются статические методы класса Convert, сервисы которого позволяют проводить различные преобразования между типами данных.
Значение функции вычисляется тремя разными методами - методом стандартного класса Math и двумя методами класса MyMath, входящего в состав библиотеки MathTools.
Следуя правилу стиля "Имена - константам", в коде метода используются именованные константы.
Применяется стандартный прием зацикливания тела метода Main, позволяющий пользователю самому решать, когда прервать выполнение метода.
На рис. 1.8 показаны результаты работы консольного проекта.
увеличить изображение
Рис. 1.8. Результаты работы консольного проекта
Анализируя эти результаты, можно видеть, что все три метода на всех исследуемых аргументах дают одинаковые результаты, совпадающие с точностью до 9 цифр после запятой. Точность методов в классе MyMath обеспечивается константой EPS этого класса. Достигнутая точность вполне достаточна для большинства практических задач. Остается понять, насколько написанные нами методы проигрывают методу стандартного класса по времени. Это исследование оставим для следующего проекта - Windows-проекта, обеспечивающего интерфейс, который дает пользователю больше возможностей.