Модифицировать программу так, чтобы можно было передавать функцию в виде делегата - 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();
}
}
}