Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2019, 20:17   #1
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию Метод Ньютона переделать с консоли на формы

Есть код Метода Ньютона на консоли, возникли трудности с переводом на формы
Консоль
Код:
class Program
    {
        static void Main(string[] args)
        {
            int i = 0;
            double x, pr;
            Console.Write("Введите начальное значение точки: ");
            double x0 = double.Parse(Console.ReadLine());
            Console.Write("Введите погрешность, используя запятую: ");
            double epsilon = double.Parse(Console.ReadLine());
            Console.Write("Введите количество итераций:");
            int a = Convert.ToInt32(Console.ReadLine());
            do
            {
                x = x0;
                x0 = x - f(x) / f1(x);
                i++;
                if (x0 == 0)
                {
                    pr = Math.Abs(x - x0);
                }
                else
                {
                    pr = Math.Abs(x - x0) / Math.Max(x,x0);
                }

            }
            while ((pr >= epsilon) && (i != a));
            double y = f(x0);
            Console.WriteLine();
            if (pr <= epsilon)
            {
                Console.WriteLine("Найденные значения уравнения:");
                Console.WriteLine("Корень уравнения x = {0}", x);
                Console.WriteLine("Погрешность pr = {0}", pr);
                Console.WriteLine("Значение функции y = {0}", y);
                Console.WriteLine("Количество итераций i = {0}", i);
            }
            else
            {
                Console.WriteLine("Корень уравнения не найден, приближенное значение x0 = {0}",x0);
                Console.WriteLine("Значение функции y = {0}", y);
            }
            Console.ReadKey();

        }
        static double f(double x)
        {
            return Math.Sin(x);
        }
        static double f1(double x)
        {
            return Math.Cos(x);

        }
    }
}
Начала переводить на формы, но возникли вопросы, в правильном ли направлении иду,куда вообще вставить функцию и ее производную, и как вызвать окно, чтобы оно писало корень уравнения не найден
Код:
public partial class Form1 : Form
    {
        double x0 = 0;
        double epsilon = 0;
        double a = 0;
        double x;
        double pr;
        int i = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            double x0 = Convert.ToDouble(textBox1.Text);
            double epsilon = Convert.ToDouble(textBox2.Text);
            double a = Convert.ToDouble(textBox3.Text);
            do
            {
                x = x0;
                x0 = x - f(x) / f1(x);
                i++;
                if (x0 == 0)
                {
                    pr = Math.Abs(x - x0);
                }
                else
                {
                    pr = Math.Abs(x - x0) / Math.Max(x, x0);
                }

            }
            while ((pr >= epsilon) && (i != a));
            double y = f(x0);
            if (pr <= epsilon)
            {
                textBox4.Text = Convert.ToString(x);
                textBox5.Text = Convert.ToString(pr);
                textBox6.Text = Convert.ToString(i);
                textBox7.Text = Convert.ToString(y);
            }
            else 


        }
    }
plktre вне форума Ответить с цитированием
Старый 23.10.2019, 20:20   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Цитата:
Сообщение от plktre Посмотреть сообщение
куда вообще вставить функцию и ее производную
Куда угодно. Почему вдруг функции должны поменяться?
p51x вне форума Ответить с цитированием
Старый 23.10.2019, 20:33   #3
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

ну запись же другая нужна, скорее всего
plktre вне форума Ответить с цитированием
Старый 23.10.2019, 21:00   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Какая? def func->param?
p51x вне форума Ответить с цитированием
Старый 23.10.2019, 21:06   #5
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

Код:
public partial class Form1 : Form
    {

        double x;
        double pr;
        int i = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            double x0;
            double epsilon;
            double a;
            x0 = Convert.ToDouble(textBox1.Text);
            epsilon = Convert.ToDouble(textBox2.Text);
            a = Convert.ToDouble(textBox3.Text);
            do
            {
                x = x0;
                x0 = x - f(x) / f1(x);
                i++;
                if (x0 == 0)
                {
                    pr = Math.Abs(x - x0);
                }
                else
                {
                    pr = Math.Abs(x - x0) / Math.Max(x, x0);
                }

            }
            while ((pr >= epsilon) && (i != a));
            double y = f(x0);
            if (pr <= epsilon)
            {
                textBox4.Text = Convert.ToString(x);
                textBox5.Text = Convert.ToString(pr);
                textBox6.Text = Convert.ToString(i);
                textBox7.Text = Convert.ToString(y);
            }
            else
            {
                MessageBox.Show("Корень уравнения не найден, приближенное значение x0  =" + x0);
                MessageBox.Show("Значение функции y =" + y);
            }
        }
            static double f(double x)
            {
                return Math.Sin(x);
            }
            static double f1(double x)
            {
                return Math.Cos(x);
            }
    }
Так, выдает ошибку входная строка имела неверный формат(x0 = Convert.ToDouble(textBox1.Text) Ввожу просто числа, нажимаю на кнопку и переносит в код на эту строку
plktre вне форума Ответить с цитированием
Старый 23.10.2019, 22:03   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от plktre Посмотреть сообщение
Так, выдает ошибку входная строка имела неверный формат(x0 = Convert.ToDouble(textBox1.Text) Ввожу просто числа, нажимаю на кнопку и переносит в код на эту строку
В TextBox1 что за число вносите? Дробное? Разделитель точка или запятая?
Попробуйте целое число указать (без десятичной точки).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.10.2019, 06:22   #7
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

Целое число я туда прописываю
Я нашла ошибку, у меня текстбоксы в приложении в разнобой стоят

Последний раз редактировалось plktre; 24.10.2019 в 06:33.
plktre вне форума Ответить с цитированием
Старый 24.10.2019, 06:46   #8
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

Как сделать, чтобы при каждом нажатии на кнопку данные обнулялись, а то я нажимаю несколько раз на кнопку и у меня количество итераций увеличивается
Сделала, вопрос закрыт

Последний раз редактировалось plktre; 24.10.2019 в 06:53.
plktre вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод итераций и метод Ньютона Gordan007 Microsoft Office Excel 3 09.06.2013 18:29
Метод простой итерации. Метод Ньютона. woltoe Общие вопросы C/C++ 2 05.06.2013 13:47
Метод касательных(Метод Ньютона) Fat_Tony Помощь студентам 0 22.01.2013 22:30
Методы оптимизации: метод Ньютона и метод наискорейшего спуска ruslanGacurap Помощь студентам 0 30.01.2012 13:54