Skip to content

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

Notifications You must be signed in to change notification settings

SirlLizz/dotnet-1

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Промышленное программирование. Проект № 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.

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%