Модифицировать программу так, чтобы можно было передавать функцию в виде делегата - C#

Узнай цену своей работы

Формулировка задачи:

Модифицировать программу нахождения минимума функции так, чтобы можно было передавать функцию в виде делегата. Сделать меню с различными функциями и представьте пользователю выбор для какой функции и на каком отрезке находить минимум. Вот программа:
Листинг программы
  1. namespace DoubleBinary
  2. {
  3. class Program
  4. {
  5. public static double F(double x)
  6. {
  7. return x * x-50*x+10;
  8. }
  9. public static void SaveFunc(string fileName, double a,double b,double h)
  10. {
  11. FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
  12. BinaryWriter bw = new BinaryWriter(fs);
  13. double x = a;
  14. while (x<=b)
  15. {
  16. bw.Write(F(x));
  17. x += h;// x=x+h;
  18. }
  19. bw.Close();
  20. fs.Close();
  21. }
  22. public static double Load(string fileName)
  23. {
  24. FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
  25. BinaryReader bw = new BinaryReader(fs);
  26. double min = double.MaxValue;
  27. double d;
  28. for(int i=0;i<fs.Length/sizeof(double);i++)
  29. {
  30. // Считываем значение и переходим к следующему
  31. d = bw.ReadDouble();
  32. if (d < min) min = d;
  33. }
  34. bw.Close();
  35. fs.Close();
  36. return min;
  37. }
  38. static void Main(string[] args)
  39. {
  40. SaveFunc("data.bin", -100, 100, 0.5);
  41. Console.WriteLine(Load("data.bin"));
  42. Console.ReadKey();
  43. }
  44. }
  45. }
Собственно не пойму как реализовать?
как превратить в делегат?

Решение задачи: «Модифицировать программу так, чтобы можно было передавать функцию в виде делегата»

textual
Листинг программы
  1. namespace DoubleBinary
  2. {
  3.     class Program
  4.     {
  5.         public delegate double function(double x);
  6.         public static double F1(double x)
  7.         {
  8.             return x * x - 50 * x + 10;
  9.         }
  10.  
  11.         public static double F2(double x)
  12.         {
  13.             return x * x - 10 * x + 50;
  14.         }
  15.         public static void SaveFunc(string fileName, double a, double b, double h, function F)
  16.         {
  17.             FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
  18.             BinaryWriter bw = new BinaryWriter(fs);
  19.             double x = a;
  20.             while (x <= b)
  21.             {
  22.                 bw.Write(F(x));
  23.                 x += h;// x=x+h;
  24.             }
  25.             bw.Close();
  26.             fs.Close();
  27.         }
  28.         public static double Load(string fileName)
  29.         {
  30.             FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
  31.             BinaryReader bw = new BinaryReader(fs);
  32.             double min = double.MaxValue;
  33.             double d;
  34.             for (int i = 0; i < fs.Length / sizeof(double); i++)
  35.             {
  36.                 // Считываем значение и переходим к следующему
  37.                 d = bw.ReadDouble();
  38.                 if (d < min) min = d;
  39.             }
  40.             bw.Close();
  41.             fs.Close();
  42.             return min;
  43.         }
  44.         static void Main(string[] args)
  45.         {
  46.             function[] F = {F1, F2};
  47.             Console.WriteLine("Сделайте выбор: 1 - функция F1, 2 - функция F2");
  48.             int index = int.Parse(Console.ReadLine());
  49.             SaveFunc("data.bin", -100, 100, 0.5, F[index-1]);
  50.             Console.WriteLine(Load("data.bin"));
  51.             Console.ReadKey();
  52.         }
  53.     }
  54. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы