Coder Social home page Coder Social logo

dotnet-1's Introduction

Промышленное программирование. Проект № 1

Аннотация

Проект дублирует одну из последних лабораторных работ по C++. Основные цели:

  • Изучение синтаксиса языка программирования C#, основных терминов и понятий
  • Изучение и реализация объектно-ориентированной модели данных
  • Изучение базовых паттернов проектирования
  • Реализация CLI для работы с данными
  • Повторение/изучение работы с системами контроля версий (git, GitHub)

Схема сдачи

  1. Получить задание
  2. Сделать форк данного репозитория
  3. Выполнить задание согласно полученному варианту
  4. Сделать PR (pull request) в данный репозиторий
  5. Исправить замечания после code review
  6. Получить approve
  7. Прийти на занятие и защитить работу

Критерии оценивания

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

  1. Скорость разработки
  2. Качество разработки
  3. Полнота выполнения задания

Быстрее делаете PR - у вас преимущество перед остальными с тем же вариантом.

Быстрее получаете Approve - у вас преимущество перед остальными с тем же вариантом.

Выполните нечто немного выходящее за рамки проекта - у вас преимущество перед остальными.

Преимущество будет выражаться в уменьшении сложности вопросов при очной защите проекта.

Задание. Общая часть

Целевая платформа: .NET 5

Необходимые пакеты:

Пакет Документация Назначение
Microsoft.Extensions.DependencyInjection Dependency injection in .NET DI-контейнер
Spectre.Console https://spectreconsole.net CLI-фреймворк
xunit
xunit.runner.visualstudio
https://xunit.net Модульное тестирование (опционально)

Сериализация данных: System.Xml.Serialization

  1. Реализовать иерархию классов согласно варианту.
  2. Независимо от варианта, в базовом классе должны быть предоставлены: методы сравнения объектов на равенство и перегружен метод ToString() получения строкового представления объекта.
  3. Реализовать основное меню приложения. Предоставить пользователю в дополнение к функционалу, требуемого согласно варианту, следующие пункты меню:
    • cоздание объекта указанного типа из иерархии классов с его последующей вставкой в коллекцию по указанному пользователем индексу (в качестве коллекции использовать подходяющую из System.Collections.Generic);
    • удаление объекта из коллекции по индексу;
    • удаление всех объектов из коллекции;
    • сравнение двух объектов по указанным индексам;
    • вывод контейнера на экран (выводить не более 10 первых объектов; если объектов больше 10, для обозначения оставшихся использовать ...).
  4. Хранение объектов реализовать в файле формата XML. Для сериализации/десериализации данных использовать System.Xml.Serialization.XmlSerializer.
  5. CRUD-операции с данными осуществлять с использованием паттерна Repository. Репозиторий подключать в основном теле функции Main c использованием Dependency Injection.
  6. Операции с данными реализовать с использованием паттерна Command.

Варианты заданий

Варианты распределяются случайным образом преподавателем.

Вариант 1: Плоские фигуры Минимальный интерфейс:
  • вычисление периметра;
  • вычисление площади;
  • получение минимального обрамляющего прямоугольника;

Минимальный набор классов:

  • точка на плоскости (структура);
  • прямоугольник;
  • треугольник;
  • круг.

Предоставить возможность вычисления суммарной площади всех фигур в контейнере (считать, что фигуры не накладываются друг на друга). Вычисление организовать двумя способами: своим кодом и с использованием System.Linq.

Вариант 2: Объёмные фигуры Минимальный интерфейс:
  • вычисление площади поверхности;
  • вычисление объёма;
  • получение минимального обрамляющего прямоугольного параллелепипеда;

Минимальный набор классов:

  • точка в пространстве (структура);
  • прямоугольный параллелепипед;
  • шар;
  • цилиндр.

Предоставить возможность вычисления суммарного объёма всех фигур в контейнере (считать, что фигуры не пересекаются друг с другом). Вычисление организовать двумя способами: своим кодом и с использованием System.Linq.

Вариант 3: Функции от одной переменной Минимальный интерфейс:
  • вычисление значения функции при заданном аргументе;
  • получение функции, являющейся производной от текущей.

Минимальный набор классов:

  • константа;
  • линейная функция;
  • квадратичная функция;
  • синус;
  • косинус.

Предоставить возможность определения функции в контейнере, производная которой для заданного аргумента принимает наименьшее значение. Если таких функций несколько, вывести первую из них. Вычисление организовать двумя способами: своим кодом и с использованием System.Linq.

Вариант 4: Функции от одной переменной Минимальный интерфейс:
  • вычисление значения функции при заданном аргументе;
  • получение функции, являющейся производной от текущей.

Минимальный набор классов:

  • константа;
  • степенная функция;
  • показательная функция;
  • логарифм.

Предоставить возможность определения функции в контейнере, которая для заданного аргумента принимает наибольшее значение. Если таких функций несколько, вывести последнюю из них. Вычисление организовать двумя способами: своим кодом и с использованием System.Linq.

Вариант 5: Бинарные арифметические операции над целыми числами Минимальный интерфейс:
  • вычисление значения по заданным аргументам.

Минимальный набор классов:

  • сложение;
  • вычитание;
  • умножение;
  • целочисленное деление;
  • остаток от деления.

Предоставить возможность определения операции в контейнере, которая для заданных операндов принимает наименьшее значение. Если таких операций несколько, вывести первую из них. Вычисление организовать двумя способами: своим кодом и с использованием System.Linq.

Вариант 6: Вещественные матрицы Обеспечить, как минимум, следующее общее поведение:
  • получение размеров матрицы;
  • получение значения по указанным индексам;
  • установка значения по указанным индексам.

Минимальный набор классов:

  • BufferedMatrix, который хранит все элементы матрицы в массиве (оперативной памяти);
  • SparseMatrix, который хранит в оперативной памяти только ненулевые элементы матрицы.

Предоставить возможность определения матрицы с наименьшей нормой максимума модуля: image

Если таких матриц несколько, вывести последнюю из них. Вычисление организовать двумя способами: своим кодом и с использованием System.Linq.

dotnet-1's People

Contributors

kolyanch avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.