@lambardi

Правильно ли я написал программу?

По условию мне эту программу надо сделать под делегаты,а с делегатами туго, только начал изучать их.Расчет который я сделал в Main, необходимо выделить в отдельную функцию и в нее передать делегат как параметр,помогите с этим пожалуйста

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public delegate double Func(double x);
        static void Main(string[] args)
        {
            Func value = function;

            const double e = 0.001;
            double a, b;
            a = 0.5;
            b = 1.5;
            while (Math.Abs(b - a) > 2*e)
            {
                double c = (a + b) / 2;
                if (value(b) * value(c) < 0)
                {
                    a = c;
                }
                else
                {
                    b = c;
                }
            }
            Console.WriteLine((a + b) / 2);
            Console.ReadLine();
        }
        static double function(double x)
        {
            double tmp = Math.Pow(2, 0.5);
            return 4 * Math.Sin(3 * x - 1) - Math.Pow(x, tmp) + 1;
        }
    }
}
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
by_kapt0xa
@by_kapt0xa
Учу кресты катаюсь на велике
не очень ясно какой кусок кода надо вынести в отдельную функцию. стоит выделить комментариями начало и конец куска кода. но вот я что-то сделал. переменную value я переименова в procedure, так логичнее мне кажется
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public delegate double Func(double x);
        static void Main(string[] args)
        {
            Func procedure = function;

            double a, b;
            a = 0.5;
            b = 1.5;
            use_procedure_for_a_and_b(ref a, ref b, procedure);
            Console.WriteLine((a + b) / 2);
            Console.ReadLine();
        }
        static void use_procedure_for_a_and_b(ref double a, ref double b, Func procedure)
        {
            const double e = 0.001;
            while (Math.Abs(b - a) > 2 * e)
            {
                double c = (a + b) / 2;
                if (procedure(b) * procedure(c) < 0)
                {
                    a = c;
                }
                else
                {
                    b = c;
                }
            }
        }
        static double function(double x)
        {
            double tmp = Math.Pow(2, 0.5);
            return 4 * Math.Sin(3 * x - 1) - Math.Pow(x, tmp) + 1;
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы