Лабораторные работы ООП
Задание к лабораторным работам по курсу "Программирование", раздел ООП.
Лабораторная работа 1. Разработка основы класса.
Разработать структуру элементов данных класса в виде динамической структуры данных (динамический массив, список, массив указателей). Разработать:
конструкторы для различных типов входных данных (без параметров, параметр-строка, параметр-массив), конструктор копирования (объект из объекта) и деструктор;
методы вывода и ввода содержимого объекта в поток (на экран), в текстовую строку (из строки);
получения ссылки на внутренние данные объекта (например, на коэффициент матрицы), либо чтение/запись отдельных компонент объекта.
В конструкторе и деструкторе предусмотреть трассировку - вывод адреса текущего объекта и его содержимого. Проследить последовательность вызова конструкторов и деструкторов при определении глобальных, локальных и динамических объектов, а также их массивов, при передаче объекта в виде формального параметра по значению и возврате его по значению в качестве результата.
Правильная дробь, представленная целой частью, числителем и знаменателем.
Целые числа, представленные в виде двух 32-разрядных переменных (int), хранящих 9 младших и старших десятичных цифр числа (т.е. части числа в диапазоне 0...999999999). Знак числа представлен отдельно.
Целое число, представленное в виде массива байтов. .Каждый байт хранит 2 цифры числа (часть числа в диапазоне 0..99). Знак числа представлен отдельно.
Целое положительное число, представленное в виде массива его простых множителей (произведение которых дает это число).
Целое положительное число, представленное в виде массива остатков от деления на первые n <простых чисел (представление числа в остаточных классах). Диапазон представления равен произведению первых n простых чисел.
Вектор на плоскости, представленный в полярной системе координат (длина, угол поворота).
Вещественное число в эспоненциальной форме: нормализованная дробная часть (в диапазоне 0.99...0.1) - double и целый показатель степени - int.
Матрица переменной размерности, представленная динамическим массивом указателей на строки матрицы (линейные динамические массивы).
Матрица переменной размерности, представленная динамическим массивом, в котором строки матрицы расположены последовательно друг за другом.
Разреженная матрица переменной размерности, ненулевые коэффициенты представлены динамическим массивом с элементами (x,y,v) координаты, значение.
Разреженная матрица переменной размерности, ненулевые коэффициенты представлены односвязным списком с элементами (x,y,v) координаты, значение.
Разреженная матрица переменной размерности, ненулевые коэффициенты представлены двусвязным циклическим списком с элементами (x,y,v) координаты, значение.
Множество, элементами которого являются целые числа. Операции объединения и пересечения множеств, добавления элемента, проверки на вхождение, разности множеств. Для представления множества используется битовая карта. Принадлежность целого числа K множеству определяется установкой в 1 K-го разряда битовой карты.
Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в прямом коде. Знак представлен отдельным элементом данных.
Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в прямом коде. Знак представлен старшей цифрой (0 /1).
Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в дополнительном коде.
Целые произвольной длины во внутреннем двоичном представлении (динамический массив байтов) в прямом коде. Знак представлен отдельным элементом данных.
Целые произвольной длины во внутреннем двоичном представлении (динамический массив байтов) в дополнительном коде.
Лабораторная работа 2. Разработка арифметики класса
Разработать и реализовать в виде методов операции над объектами класса: сложение, вычитание, умножение, сравнение, изменение отдельных частей и получение /изменение параметров объектов (арифметику класса). Результат выполнения -- в текущем объекте.
Лабораторная работа 3. Переопределение операций
Арифметику класса реализовать в виде стандартного набора переопределенных операций с "арифметической" интерпретацией -- результат операции -- новый объект. Разработать конструктор копирования, переопределить арифметические операции, присваивание, сравнение, ввод/вывод в стандартные потоки.
Лабораторная работа 4. Шаблон структуры данных
Разработать шаблоны структуры данных в памяти.Тип хранимого элемента -- параметр шаблона. Шаблон может содержать указатель на объект, либо сам объект (в зависимости от варианта). Реализовать операции включения/удаления по заданному логическому номеру, поиск минимального/максимального, включение с сохранением порядка, сортировки выбором или вставками, загрузки хранимых элементов в структуру данных из последовательного потока. Проверить работу шаблона на разработанном классе, используя его как параметр шаблона. Структуры данных:
динамический массив указателей на объекты;
односвязный список, элемент списка хранит указатель на объект;
двусвязный список, элемент списка хранит указатель на объект;
циклический двусвязный список, элемент списка хранит указатель на объект;
дерево с двумя потомками с данными в конечных вершинах. Конечная вершина хранит массив указателей на объекты и счетчик объектов. Промежуточная вершина хранит указатели на потомков и количество объектов в поддереве, включение по логическому номеру производится с использованием ветвления.
дерево с двумя потомками. Вершина хранит объект и количество вершин в своем поддереве, включение по логическому номеру производится с использованием ветвления;
двоичное дерево;
циклическая очередь объектов в динамическом массиве. При переполнении очереди ее размерность увеличивается (с использованием realloc).
односвязный список, элемент списка хранит непосредственно объект;
двусвязный список, элемент списка хранит непосредственно объект;
циклический двусвязный список, элемент списка хранит непосредственно объект
циклическая очередь, представленная массивом указателей на динамические массивы хранимых объектов (при переполнении очередного массива заводится следующий, после выбора последнего объекта в массиве он освобождается).
Лабораторная работа 5. Абстрактный базовый класс -- интерфейс объектов
Разработать абстрактный базовый класс объектов object, для него предусмотреть виртуальные методы:
загрузка объекта из текстовой строки (внешнего представления);
выгрузка объекта в текстовую строку в динамической памяти;
добавление объекта в последовательный двоичный файл;
чтение объекта из последовательного двоичного файла;
возврат уникального идентификатора класса;
возврат указателя на строку с именем класса;
сравнение двух объектов, если объекты принадлежат разным класса, то сравниваются имена или идентификаторы классов;
«сложение» (объединение) и вычитание двух объектов в соответствующей классу интерпретации;
создание динамической копии объекта (клонирование).
Сделать разработанный класс производным от абстрактного базового класса object. Взять любой другой простой класс (например, класс целых чисел) и также сделать его производным от абстрактного базового класса object. Создать статическую структуру данных, содержащую указатели object* на объекты обоих классов, например массив указателей. Показать возможность одновременной работы с объектами обоих классов при просмотре структуры данных через виртуальные функции.
Лабораторная работа 6. Класс структуры данных
Разработать класс структуры данных в памяти.Тип хранимого элемента -- указатель на объект базового класса object*. Реализовать операции включения/удаления по заданному логическому номеру, поиск минимального/максимального, включение с сохранением порядка, сортировки выбором или вставками, загрузки хранимых элементов в структуру данных из последовательного потока, используя исключительно виртуальные функции базового класса. Проверить работу структуры данных на объектах разработанного класса. Вариант структуры данных взять из л.р.№4.
Для сохранения и загрузки объектов различных типов в последовательный двоичный файл предусмотреть запись в него перед каждым объектом идентификатора его типа.
Лабораторная работа 7. Двоичный и текстовый последовательные файлы
В разработанной структуре данных реализовать методы для ее работы с двоичным файлом:
в классах, разработанных в л.р.5, реализовать методы сохранения/загрузки объектов в последовательный текстовый и двоичный файл в саморазворачивающемся формате;
в классе структуры данных реализовать методы сохранения и загрузки хранимых объектов в последовательные текстовый и двоичный потоки (файлы) в формате -- количество объектов, для каждого объекта -- идентификатор (или имя) типа и сам объект (вызов виртуального метода), при загрузке объекта восстанавливаться тип объекта по считанному из файла идентификатору (имени).
Лабораторная работа 8. Демонстрационная программа
Демонстрационная программа должна иметь объект-структуру данных, содержимое которой (хранимые объекты двух типов) выводятся в виде списка (меню). Также должен быть задан набор операций в виде списка (меню): добавление объекта, удаление выбранного объекта, сохранение и загрузка объектов из двоичного и текстового файла, сортировка объектов и выбор минимального/максимального, а также сложение (объединение) двух любых выбранных объектов одного типа с сохранением результата в виде нового объекта. Все хранимые объекты -- динамические.