Лабораторная работа1-2
.rtfЛабораторная работа №1
Разрабатываемый класс должен содержать следующие элементы: скрытые поля, конструкторы с параметрами и без параметров, методы, свойства. Методы и свойства должны обеспечивать непротиворечивый, полный, минимальный и удобный интерфейс класса. При возникновении ошибок должны выбрасываться исключения.
1. Класс «Десятичный счетчик»
Объявите класс «Десятичный счетчик», который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Предусмотреть инициализацию счетчика значениями по умолчанию и произвольными значениями. Счетчик имеет два метода: увеличения и уменьшения, и свойство, позволяющее получить его текущее состояние.
2. Класс «Комплексное число»
Объявите класс «Комплексное число», полями которого являются действительная и мнимая части числа, а методами — сложение и умножение на другое комплексное число, определение модуля и вывод на экран. Рассмотрите различные варианты методов сложения и умножения.
3. Класс «Прямоугольник»
Объявите класс «Прямоугольник» с полями: x1, y1, x2, y2 (координаты левого верхнего и правого нижнего углов) и методами: пересечься с другим прямоугольником, проверить, попадает ли точка в данный прямоугольник, масштабировать при условии неподвижности верхнего левого угла, передвинуть по плоскости без вращения.
4. Класс «Вектор»
Объявите класс «Вектор», полем которого является массив чисел в свободной памяти, а методами — очистить вектор, добавить элемент в конец, вставить элемент в i-ю позицию, вставить элемент перед числом со значением n, удалить i-й элемент, удалить элемент со значением n, вывести на экран. Проверяйте допустимость значений параметров перед выполнением кода методов.
5. Класс «Односвязный список»
Объявите класс, который реализует односвязный рекурсивный список строк в свободной памяти. Список представляется двумя указателями: указателем на строку в свободной памяти (поле info) и указателем на список же, только более короткий (поле tail). В частном случае одноэлементного списка этот указатель равен null. Методы такие же как и у класса «Вектор».
На оценку «Удовлетворительно» решить задание 1, 2
На оценку «Хорошо» решить задание 3, 4
На оценку «Отлично» решить задание 4, 5
Во время защиты необходимо обьяснить решение, ответить на вопросы (в том числе по теории).
При защите на оценку «Хорошо» или «Отлично» может быть выдано дополнительное практическое задание.
Лабораторная работа №2
Разработать систему классов для геометрических фигур
-
Определите систему классов:
(выбор варианта – остаток от деления номера по журналу на 4)
Вариант 1. Различные общие типы фигур:
«Фигура», «Точка», «Прямоугольник», «Эллипс», «Квадрат», «Окружность», «Треугольник», «Многоугольник», «Параллелепипед», «Куб», «Тетраэдр», «Цилиндр», «Конус», «Пирамида», «Призма», «Шар» и т.п.
Вариант 2. Фигуры, состоящие из отрезков:
«Фигура», «Точка», «Отрезок», «Прямоугольник», «Квадрат», «Параллелепипед», «Куб», «Параллелограмм», «Многоугольник», «Октаэдр», «Призма», «Наклонная призма», «Пирамида», «Усеченная пирамида», и т.п.
Вариант 3. Фигуры, так или иначе связанные с дугами и окружностями:
«Фигура», «Точка», «Окружность», «Дуга», «Сектор», «Сегмент», «Круг», «Эллипс», «Сфера», «Шар», «Цилиндр», «Наклонный цилиндр», «Конус», «Усеченный конус», «Наклонный усеченный конус», «Кольцо», «Тор», и т.п.
Вариант 4(0). Различнейшие «n-угольные» фигуры на плоскости:
«Фигура», «Точка», «Треугольник», «Четырехугольник», «Правильный треугольник», «Прямоугольный треугольник», «Прямоугольник», «Квадрат», «Ромб», «Трапеция», «Параллелограмм», «Пятиугольник», «Правильный 5-угольник», «Многоугольник», и т.п.
Исправление: Варианты 4 и 0 суть одно и то же.
Выбор фигур на ваше усмотрение.
Можете для удобства добавлять дополнительные классы, например: «Объемная фигура» или «правильный n-угольник»
_________
* на «тройку» достаточно первые четыре класса
-
Определите в этих классах методы, которые:
• перемещают фигуру по плоскости (на заданное расстояние или в нужную позицию)
• масштабируют фигуру
• вычисляют и возвращают площадь фигуры, периметр, отношение площади к периметру
• возвращают строку символов, отражающую имя класса и состояние объекта
• рисуют фигуру в консоли или на форме (для объемных фигур достаточно проекции)
• и т.п.
_________
* на «тройку» достаточно реализовать три метода
-
Определите в ваших классах свойства и индексаторы (там, где это имеет смысл)
-
Классы должны быть связаны отношением наследования (там, где это имеет смысл)
Некоторые классы необходимо сделать абстрактными, а некоторые методы — виртуальными
Должен быть хотя бы один полиморфный класс.
Максимально исключите дублирование кода (поля, методы, реализация).
-
Объявите класс «Изображение», имеющий свое положение на плоскости и владеющий коллекцией различных фигур
Элементами коллекции имеет смысл сделать базовый полиморфный класс (таким образом в одной коллекции можно будет сохранить все фигуры изображения)
-
В классе «Изображение» определите методы:
• возвращающие суммарную площадь фигур, суммарный периметр
• сдвигающие все фигуры
• масштабирующие все фигуры
• возвращающие полное состояние изображения в виде строки
• объединяющие два изображения
• рисующие все фигуры в консоли или на форме (для объемных фигур достаточно проекции)
• сохраняют и загружают изображения из файла (добавлено)
• и т.п.
_________
* на «тройку» достаточно реализовать три метода
** На «пятерку» необходимо выполнить дополнительное задание повышенной сложности.
Некоторые примеры заданий: (добавлено)
- проверка пересечения каждой фигуры с каждой (придумать разумный подход)
- подсчет общей площади, занимаемой фигурами (не просто сумма, а еще учет общих площадей, их нужно считать конечно только один раз)
- удобный редактор изображений, позволяющий добавлять, менять фигуры, сохранять изображение и прочее
- и т.п.