Модифицировать программу так, чтобы можно было передавать функцию в виде делегата - C#
Формулировка задачи:
Модифицировать программу нахождения минимума функции так, чтобы можно было
передавать функцию в виде делегата. Сделать меню с различными функциями и представьте
пользователю выбор для какой функции и на каком отрезке находить минимум.
Вот программа:
Собственно не пойму как реализовать?
namespace DoubleBinary { class Program { public static double F(double x) { return x * x-50*x+10; } public static void SaveFunc(string fileName, double a,double b,double h) { FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); BinaryWriter bw = new BinaryWriter(fs); double x = a; while (x<=b) { bw.Write(F(x)); x += h;// x=x+h; } bw.Close(); fs.Close(); } public static double Load(string fileName) { FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader bw = new BinaryReader(fs); double min = double.MaxValue; double d; for(int i=0;i<fs.Length/sizeof(double);i++) { // Считываем значение и переходим к следующему d = bw.ReadDouble(); if (d < min) min = d; } bw.Close(); fs.Close(); return min; } static void Main(string[] args) { SaveFunc("data.bin", -100, 100, 0.5); Console.WriteLine(Load("data.bin")); Console.ReadKey(); } } }
как превратить в делегат?
Решение задачи: «Модифицировать программу так, чтобы можно было передавать функцию в виде делегата»
textual
Листинг программы
namespace DoubleBinary { class Program { public delegate double function(double x); public static double F1(double x) { return x * x - 50 * x + 10; } public static double F2(double x) { return x * x - 10 * x + 50; } public static void SaveFunc(string fileName, double a, double b, double h, function F) { FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); BinaryWriter bw = new BinaryWriter(fs); double x = a; while (x <= b) { bw.Write(F(x)); x += h;// x=x+h; } bw.Close(); fs.Close(); } public static double Load(string fileName) { FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader bw = new BinaryReader(fs); double min = double.MaxValue; double d; for (int i = 0; i < fs.Length / sizeof(double); i++) { // Считываем значение и переходим к следующему d = bw.ReadDouble(); if (d < min) min = d; } bw.Close(); fs.Close(); return min; } static void Main(string[] args) { function[] F = {F1, F2}; Console.WriteLine("Сделайте выбор: 1 - функция F1, 2 - функция F2"); int index = int.Parse(Console.ReadLine()); SaveFunc("data.bin", -100, 100, 0.5, F[index-1]); Console.WriteLine(Load("data.bin")); Console.ReadKey(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д