Beispiel #1
0
        static void Main(string[] args)
        {
            // 协变
            Func <string> func1 = () => "KKKK";
            Func <object> func2 = func1;
            // 逆变
            Action <object> fun3 = t => { };
            Action <string> fun4 = fun3;
            // 协变
            MyFunc <string> str1 = () => "TTTT";
            MyFunc <object> str2 = str1;
            // 逆变
            MyFunc2 <object> str3 = t => { };
            MyFunc2 <string> str4 = str3;

            MyFunc3 <object, string> str11 = t => "loud";
            MyFunc3 <string, string> str22 = str11; //第一个泛型的逆变(object->string)
            MyFunc3 <object, object> str33 = str11; //第二个泛型的协变(string->object)
            MyFunc3 <string, string> str44 = str11; //第一个泛型的逆变和第二个泛型的协变

            // 协变
            IEnumerable <string> list  = new List <string>();
            IEnumerable <object> list2 = list;

            // 逆变
            IComparable <object> list3 = null;
            IComparable <string> list4 = list3;

            IMotion <Teacher> x = new Run <Teacher>();
            IMotion <People>  y = x;

            Console.WriteLine("Hello World!");
        }
Beispiel #2
0
 public static void Table(MyFunc2 func, double x, double a, double b, double c)
 {
     Console.ForegroundColor = ConsoleColor.Cyan;
     Console.WriteLine("----- X ----- Y -----");
     while (x <= b)
     {
         Console.WriteLine("| {0,8:0.000} | {1,8:0.000} |", x, func(x, a));
         x += c;
     }
     Console.WriteLine("-----------------------");
 }
Beispiel #3
0
        /// <summary>
        /// Метод записи результатов функции на заданном отрезке с заданным шагом в файл
        /// </summary>
        /// <param name="fileName">имя создаваемого файла</param>
        /// <param name="f">функция для расчётов</param>
        /// <param name="c">начальное значение независимого параметра</param>
        /// <param name="a">множитель функции</param>
        /// <param name="b">максимальное значение независимого параметра</param>
        /// <param name="h">шаг значений независимого параметра</param>
        public static void SaveMyFunc(string fileName, MyFunc2 f, double c, double a, double b, double h)
        {
            double x = c;

            using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
            {
                BinaryWriter writer = new BinaryWriter(fs);
                while (x <= b)
                {
                    writer.Write(f(x, a));
                    x += h;
                }
                writer.Close();
            }
        }
Beispiel #4
0
        /// <summary>
        /// Метод получения переменных для функции и вывода минимальных значений
        /// </summary>
        /// <param name="f"></param>
        /// <param name="min"></param>
        /// <returns></returns>
        public static bool CheckAndRunUserFunction(MyFunc2 f, out double min)
        {
            min = Double.MaxValue;
            string fileName = AppDomain.CurrentDomain.BaseDirectory + "mytestfunc.txt";

            do
            {
                Console.Write("Введите множитель/основание функции.(П.С. Для выхода нажмите 0)=> ");
                if (Double.TryParse(Console.ReadLine(), out double a) && a != 0)
                {
                    do
                    {
                        Console.Write("Введите начальное значение диапазона.(П.С. Для выхода нажмите 0)=> ");
                        if (Double.TryParse(Console.ReadLine(), out double x) && x != 0)
                        {
                            do
                            {
                                Console.Write("Введите макимальное значение диапазона.(П.С. Для выхода нажмите 0)=> ");
                                if (Double.TryParse(Console.ReadLine(), out double b) && b != 0)
                                {
                                    do
                                    {
                                        Console.Write("Введите шаг значений функции.(П.С. Для выхода нажмите 0)=> ");
                                        if (Double.TryParse(Console.ReadLine(), out double h) && h != 0)
                                        {
                                            Table(f, x, a, b, h);
                                            SaveMyFunc(fileName, f, x, a, b, h);
                                            double[] results = LoadMin(fileName, out min);
                                            Console.ForegroundColor = ConsoleColor.Yellow;
                                            Console.WriteLine("Минимальным значением функции на отрезке от{1,8:000}до{2,8:000}с шагом значений{3,8:000}\n будет => {0,8:000}", min, x, b, h);
                                            Pause();
                                            return(true);
                                        }
                                        else
                                        if (h == 0)
                                        {
                                            return(false);
                                        }
                                        else
                                        {
                                            Console.ForegroundColor = ConsoleColor.Red;
                                            Console.WriteLine("Введён не корректный шаг значений. Повторите ввод!");
                                            Pause();
                                        }
                                    } while (true);
                                }
                                else if (b == 0)
                                {
                                    return(false);
                                }
                                else
                                {
                                    Console.ForegroundColor = ConsoleColor.Red;
                                    Console.WriteLine("Введено не корректное максимальное значение диапазона. Повторите ввод!");
                                    Pause();
                                }
                            } while (true);
                        }
                        else if (x == 0)
                        {
                            return(false);
                        }
                        else
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("Введено не корректное минимальное значение диапазона. Повторите ввод!");
                            Pause();
                        }
                    } while (true);
                }
                else if (a == 0)
                {
                    return(false);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Введен не корректный множитель/основание функции. Повторите ввод!");
                    Pause();
                }
            } while (true);
        }