Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

Язык программирования C#

  1. В начало
  2. Курсы
  3. Весенний семестр
  4. Магистратура
  5. Язык программирования C#
  6. Объектно-ориентированное программирование
  7. Лабораторная работа №12. Решение уравнения

Лабораторная работа №12. Решение уравнения

Требуемые условия завершения
Открыто с: четверг, 16 мая 2019, 11:55
Срок сдачи: четверг, 16 мая 2019, 15:30
Цель работы - создать приложение Windows, которое решает уравнение и графически отображает процесс решения.
  1. Первый шаг - создание кода для решения уравнения. Создаём интерфейс IEquationSolver со свойствами
            Func<double, double> Equation { get; } // уравнение
            double Epsilon { get; }                // погрешность решения 
            double A { get; }                      // аппроксимации решения 
            double B { get; }
            double C { get; } // корень
    
    и открытым методом
    void SolveTheEquation(); 
    
    Этот интерфейс реализуется классами, которые решают уравнение относительно одной вещественной переменной при помощи двухшаговых итерационных методов.
  2. Создаём абстрактный класс AbstractSolver, реализующий IEquationSolver. Добавляем свойство

            public int Iterations { get; protected set; } // счётчик итераций
    
    и конструктор (обратите внимание на модификатор доступа)
            protected AbstractSolver(Func<double, double> equation, double a, double b,
                double epsilon = 0.1e-6)
    
    Добавляем абстрактный метод (он не имеет реализации)
            public abstract void OneStep();
    
    Делаем реализацию метода SolveTheEquation: в цикле, пока модель разности A и B превышает Epsilon, вызываем метод OneStep и увеличиваем cчётчик итераций на единицу.
  3. Создаём класс Dichotomia - наследник AbstractSolver, который имеет два закрытых вещественных поля
            private double fa; // значение Equation(a)
            private double fb; // значение Equation(b)
    
    Создайте конструктор, обращающийся к конструктору базового класса и инициализирующий все поля. Он должен бросать исключение ArgumentException, если a>b или fa и fb имеют один знак.
    Перегрузите OneStep() так, чтобы метод SolveEquation выполнял метод половинного деления.
  4. Тестируем класс Dichotomia. Создайте Unit-тесты и в тест конструктора добавьте код

                var solver = new Dichotomia(Math.Sin, 1, 4, 0.1e-6);
                solver.SolveTheEquation();
                Assert.IsTrue(Math.Abs(solver.C) - Math.PI< 0.1e-6);
    

    Придумайте несколько своих тестов.
  5. Создаём пользовательский интерфейс приложения
    Размещаем на форме элементы Label, TextBox и Button следующим образом:


    Задайте свойство (Name) первого сверху поля для ввода (TextBox) - leftBoundary, второго - rightBoundary, третьего - epsilon, третьего - solution, четвертого - iterations. Для двух последних полей установите свойство ReadOnly - True. Установите свойство Text окна для ввода epsilon в значение "0.1e-6" (возможно, придётся вместо точки использовать запятую).

  6. Добавьте в класс Form1 закрытое поле

    private Func Equation = Math.Sin;
    

    Дважды щелкните по кнопке "Решить уравнение". Напишите код в методе 

    private void button1_Click(object sender, EventArgs e)
    
    Создайте переменные
                var a = double.Parse(leftBoundary.Text);
                var b = double.Parse(rightBoundary.Text);
                var eps = double.Parse(epsilon.Text);
    
    Создаём объект класса Dichotomia и вызываем его метод SolveTheEquation()
    Отображаем результаты
                solution.Text = solver.C.ToString();
                iterations.Text = solver.Iterations.ToString();
    
  7. Добавьте на форму элемент Chart (назовите его plot) и создайте закрытый метод класса Form1
  8. private void Plot(int points)
    
    Код метода начинаем с
    plot.Series.Clear(); // очищаем диаграмму
    
    Создаем и инициализируем переменные для границ отрезка
    Добавляем новую кривую
    var series = new Series {ChartType = SeriesChartType.Spline, Color = Color.Red, BorderWidth = 3};
    plot.Series.Add(series);
    
    Для того, чтобы построить график, вызываем в цикле AddXY
    series.Points.AddXY(x, Equation(x));
    
    Добавляем вызов Plot в код метода button2_Click. Количество точек либо задайте в программе, либо позвольте задавать его пользователю.
  9. Добавьте ещё один класс - InformativeDichotomia (наследник Dichotomia). Он имеет открытое свойство
    public Chart Plot { get; }
    
    и конструктор
    public InformativeDichotomia(Func<double, double> equation, double a, double b, Chart plot, double epsilon = 0.1e-6)
    
    который обращается к методам базового класса и задает значения полей. Перегрузите метод OneStep таким образом, чтобы он добавлял на график точку с отметкой, которая включает номер итерации и новое значение корня. Измените метод button1_Click так, чтобы после нажатия кнопки на форме появился график с отметками итераций примерно следующего вида.


Сдавать в виде архива, заархивируйте всю папку с проектом.

◄ Домашнее задание № 10. Крестики-нолики
Домашнее задание №12 ►
Пропустить Навигация
Навигация
  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Весенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

          • Научные вычисления - 2025

          • ИАБолДанн

          • История инф

          • Data Scince и АД

          • МО (маг ИИ)

          • NLP

          • M1. Artificial Intelligence

          • CSm2Research

          • Мат. модели в МСС

          • НИС

          • Свертки

          • Язык программирования C#

            • Общее

            • Основы языка C#

            • Объектно-ориентированное программирование

              • ЗаданиеЛабораторная работа №9. Классы и объекты

              • ЗаданиеДомашнее задание №8

              • ЗаданиеЛабораторная работа №10

              • ЗаданиеДомашнее задание №9. Интерфейсы, сортировка с комп...

              • ЗаданиеЛабораторная работа №11. Наследование, виртуальные...

              • ЗаданиеДомашнее задание № 10. Крестики-нолики

              • ЗаданиеЛабораторная работа №12. Решение уравнения

              • ЗаданиеДомашнее задание №12

              • ЗаданиеЛабораторная работа №13. Исключения

            • Индивидуальное задание

        • Аспирантура

        • Вечернее отделение

        • Другое

        • ОИИ

      • Осенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ - 24

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Служба поддержки сайта
Вы используете гостевой доступ (Вход)
Язык программирования C#
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика