Работаю над проблемой, когда мне нужно сделать программу, предлагающую вам выбрать одну из нескольких функций; предоставляет возможность устанавливать значения коэффициентов a, b и c, а также начальные и конечные значения и шаги аргумента x. После нажатия кнопки Таблица отображается таблица значений аргументов и функций.

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

У меня есть некоторые успехи, но я столкнулся с ошибкой: «Невызываемый элемент Form1.b не может использоваться как метод». и я не могу понять, хоть убей, что я делаю не так.

Код на данный момент:

namespace MD2._5
{
    public partial class Form1 : Form
    {
        int step;
        double xEnd, xBegin;
        double a, b, c;

        public Form1()
        {
            InitializeComponent();
        }



        public delegate double DY(double a, double b, double c, int x); //declares delegate



        public static double Y0(double a, double b, double c, int x) //function to calculate the result
        {
            return a * (x * x) + (b * x + c);
        }

        public static double Y1(double a, double b, double c, int x)
        {
            return (a / (x * x)) + (b / x + c);
        }

        public static double Y2(double a, double b, double c, int x)
        {
            return ((a * x) + b) / ((a * x) + c);
        }



        public DY[] Y = new DY[3] { Y0, Y1, Y2 }; //Creates a array of the functions above



        private void radioButton1_Click(object sender, EventArgs e)
        {
            int buttonPressed = Convert.ToInt32(((RadioButton)sender).Tag);
            DoTable(Y[buttonPressed]);
        }



        private void DoTable(DY y) //This will print the table
        {
            richTextBox1.Clear();
            richTextBox1.AppendText("    x      y ");

            double howmanylines = xEnd + xBegin;

            for (double x = howmanylines; x <= howmanylines; x += step)
            {
                richTextBox1.AppendText("\n    " + x.ToString() + "\t" + y(x).ToString()); //error appearing here
            }
        }





        private void step_TextChanged(object sender, EventArgs e) //sets the step int
        {
            step = Convert.ToInt32(stepText.Text);
        }

        private void x_end_TextChanged(object sender, EventArgs e)//Sets x end
        {
            xEnd = Convert.ToInt32(x_end.Text);
        }

        private void x_begin_TextChanged(object sender, EventArgs e) //sets x begin
        {
            xBegin = Convert.ToInt32(x_begin.Text);
        }

        private void textBoxA_TextChanged(object sender, EventArgs e) //sets a value
        {
            a = Convert.ToInt32(textBoxA.Text);
        }
        private void textBoxB_TextChanged(object sender, EventArgs e) //sets b value
        {
            b = Convert.ToInt32(textBoxB.Text);
        }
        private void textBoxC_TextChanged(object sender, EventArgs e) //sets c value
        {
            c = Convert.ToInt32(textBoxC.Text);
        }

Конечный результат должен выглядеть примерно так (цифры показаны, поскольку программа не запускается прямо сейчас):

enter image description here

Вторая часть - это создание графической версии таблицы, но это на потом, так как я пока не знаю, как это сделать.

Любые указатели, критика или предложения очень ценятся.

Спасибо

0
B. Baxter 24 Ноя 2019 в 16:36

1 ответ

Лучший ответ

«Невызываемый элемент Form1.b не может использоваться как метод».

Вы получаете эту ошибку, потому что в строке ниже

 richTextBox1.AppendText("\n    " + x.ToString() + "\t" + y(x).ToString()); 

Поскольку вы вызываете делегат DY как y (x), то есть передавая один параметр, но делегат DY ожидает 4 параметра a, b, c и x, поскольку он не смог найти b, он выдает эту ошибку.

1
Rishikesh 24 Ноя 2019 в 14:20