Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 3

Функции как параметры метода. (реализация с помощью делегатов)

23.11.2011, 02:04. Показов 3614. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть две функции, с разными количествами параметров и с разными типами этих параметров и есть метод который генерирует график каждой функции.
Нужно передать эти две функции как параметры методу который отрисовывает график.
Исходник:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//функции F(x), G(x)
public static double F(double x, List<PointFunc> points, int degree)
{...}
public static double G(double x, double [] output)
{...}
 
//метод изображающий график
public void GenerateGraph(double xScale, double yScale, double xOffset, double yOffset, double xLabelIncrement, double yLabelIncrement, int width, int height)
{
.....
y = Counter.G(x, Counter.converter(polynomcoeffs.Coefficients)) ;//1 вариант реализации: функция G(x)
.....
y = Counter.F(x, Counter.converter(points), a) ;//2 вариант реализации: функция F(x)
.....
}
 
//обработчики кнопок
private void DrawGraphFButton_Click(object sender, EventArgs e)
        {
            GenerateGraphF(0.1, 0.1, 0, 0, 100, 100, panel1.Width, panel1.Height);
        }
        
        private void DrawGraphGButton_Click(object sender, EventArgs e)
        {
            GenerateGraphG(0.1, 0.1, 0, 0, 100, 100, panel1.Width, panel1.Height);
        }
С механизмом делегатов пока не сильно дружу, с функциями где число и типы параметров одинаковы, такую задачку сделал бы, а тут что-то пока не разберусь. Буду благодарен за помощь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.11.2011, 02:04
Ответы с готовыми решениями:

Необходимо уравнения оформить как функции параметры и решить с помощью метода итераций
Необходимо уравнения оформить как функции параметры и решить с помощью метода итераций на СИ. Для одного уравнения, без передачи функции,...

Как построить график функции к нелинейным уравнениям с помощью элемента управления Chart и с использованием делегатов?
У меня задание: Создать приложение позволяющее решать методом Ньютона и методом половинного деления нелинейные уравнения, а также выполнять...

Передать метод как параметр в конструктор с помощью делегатов
Необходимо передать функцию как параметр в конструктор. Я прочитал про делегаты и описал его: using System; using...

4
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
23.11.2011, 11:20
Что это за метод GenerateGraphF? Он нигде не описан.

Добавлено через 2 часа 40 минут
Я вопроса немного не понял, передать методу функции с возвращаемым значением не сложно.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
 
 
        private static int A()
        {
 
            return 1;
        }
 
        private static int B()
        {
 
            return 2;
        }
 
        private static int sum(int a, int b)
        {
            int c = a + b;
            return c;
        }
 
        public static void Main()
        {
            int h = 0;
            h = sum(A(), B());
            Console.WriteLine(h.ToString());
            Console.ReadLine();
 
        }
    }
}
Если методы принимают разные параметры можно использовать перегруженный метод.
Также можно использовать и делегаты и свойства.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.11.2011, 11:22
Если разные параметры и типы возвращаемых значений, значит нужны разные делегаты.
0
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 3
24.11.2011, 22:43  [ТС]
Ну вот смотрите, если поконкретней, моя ситуация(код привожу в общем случае):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Counter
{
    public static double F(double x, List<T> points, int degree)//метод-параметр
     {...}
}
 
public partial class Form1 : Form
{
public delegate double FDelegate(double x, List<T> points, int degree);//обьявил делегат
FDelegate fdelegate = new FDelegate(Counter.F);//создал экземпляр делегата
 
public void GenerateGraphF(FDelegate function)//метод в котором параметром выступает делегат
{
y = function;//ошибка CS0030: Преобразование типа "WindowsFormsExp.Form1.FDelegate" в "double" невозможно
}
 
private void button1_Click(object sender, EventArgs e)
  {
      GenerateGraphF(fdelegate);//вызов метода
  }
 
}
в чем моя ошибка?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.11.2011, 23:24
Цитата Сообщение от aminals Посмотреть сообщение
в чем моя ошибка?
Вот в этом:
C#
1
y = function();
Делегат вызывается как метод.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2011, 23:24
Помогаю со студенческими работами здесь

Реализация аналога делегатов из C#
я люблю писать велосипеды и я люблю c# и вот мне приспичило написать в c++ нечто по типу шарповых делегатов :) в принципе это оказалось...

Программная реализация метода эквивалентных преобразований функции на С++
Сократить мою функцию методом эквивалентных преобразований. Сначала записал ее в виде СДНФ (f(x,y,z)=(\bar{x}y\bar{z} V x\bar{y}\bar{z} V...

Оценить с помощью метода Ньютона корень функции
В лабораторной работе по matlab необходимо оценить с помощью метода Ньютона корень f(x)=0 функции f(x)=sqrt(2*x+1)-sqrt(x+4), который лежит...

Вычислить y=cos(x) с помощью делегатов
Требуется написать программу для вычисления y=cos(x) с помощью делегатов. Требуется сделать в форме...

С помощью метода дихотомии найти максимум для функции
С помощью метода дихотомии найти точку максимума для функции F(x)=4sin(3x-1)-(x в степени корень квадратный из 2)+1 на интервале . ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru