Лабораторные работы ООП

    Задание к лабораторным работам по курсу "Программирование", раздел ООП.

    Лабораторная работа 1. Разработка основы класса.

    Разработать структуру элементов данных класса в виде динамической структуры данных (динамический массив, список, массив указателей). Разработать:

    • конструкторы для различных типов входных данных (без параметров, параметр-строка, параметр-массив), конструктор копирования (объект из объекта) и деструктор;

    • методы вывода и ввода содержимого объекта в поток (на экран), в текстовую строку (из строки);

    • получения ссылки на внутренние данные объекта (например, на коэффициент матрицы), либо чтение/запись отдельных компонент объекта.

    В конструкторе и деструкторе предусмотреть трассировку - вывод адреса текущего объекта и его содержимого. Проследить последовательность вызова конструкторов и деструкторов при определении глобальных, локальных и динамических объектов, а также их массивов, при передаче объекта в виде формального параметра по значению и возврате его по значению в качестве результата.

    1. Правильная дробь, представленная целой частью, числителем и  знаменателем.

    2. Целые числа, представленные в виде двух 32-разрядных переменных (int), хранящих 9 младших и старших десятичных цифр числа (т.е. части числа в диапазоне 0...999999999). Знак числа представлен отдельно.

    3. Целое число, представленное в виде массива байтов. .Каждый байт хранит 2 цифры числа (часть числа в диапазоне 0..99). Знак числа представлен отдельно.

    4. Целое положительное число, представленное в виде массива его простых множителей (произведение которых дает это число).

    5. Целое положительное число, представленное в виде массива остатков от деления на первые n <простых чисел (представление числа в остаточных классах). Диапазон представления равен произведению первых n простых чисел.

    6. Вектор на плоскости, представленный в полярной системе координат (длина, угол поворота).

    7. Вещественное число в эспоненциальной форме: нормализованная дробная часть (в диапазоне 0.99...0.1) - double и целый показатель степени - int.

    8. Матрица переменной размерности, представленная динамическим массивом указателей на строки матрицы (линейные динамические массивы).

    9. Матрица переменной размерности, представленная динамическим массивом, в котором строки матрицы расположены последовательно друг за другом.

    10. Разреженная матрица переменной размерности, ненулевые коэффициенты представлены динамическим массивом с элементами (x,y,v) координаты, значение.

    11. Разреженная матрица переменной размерности, ненулевые коэффициенты представлены односвязным списком с элементами (x,y,v) координаты, значение.

    12. Разреженная матрица переменной размерности, ненулевые коэффициенты представлены двусвязным циклическим списком с элементами (x,y,v) координаты, значение.

    13. Множество, элементами которого являются целые числа. Операции объединения и пересечения множеств, добавления элемента, проверки на вхождение, разности множеств. Для представления множества используется битовая карта. Принадлежность целого числа K множеству определяется  установкой в 1 K-го разряда битовой карты.

    14. Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в прямом коде. Знак представлен отдельным элементом данных.

    15. Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в прямом коде. Знак представлен старшей цифрой (0 /1).

    16. Целые произвольной длины со знаком во внешней форме представления в виде строки цифр в дополнительном коде.

    17. Целые произвольной длины во внутреннем двоичном представлении (динамический массив байтов) в прямом коде. Знак представлен отдельным элементом данных.

    18. Целые произвольной длины во внутреннем двоичном представлении (динамический массив байтов) в дополнительном коде.

    Лабораторная работа 2. Разработка арифметики класса

    Разработать и реализовать в виде методов операции над объектами класса: сложение, вычитание, умножение, сравнение, изменение отдельных частей и получение /изменение параметров объектов (арифметику класса). Результат выполнения -- в текущем объекте.

    Лабораторная работа 3. Переопределение операций

    Арифметику класса реализовать в виде стандартного набора  переопределенных операций с "арифметической" интерпретацией -- результат операции -- новый объект. Разработать конструктор копирования, переопределить арифметические операции, присваивание, сравнение, ввод/вывод в стандартные потоки.

    Лабораторная работа 4. Шаблон структуры данных

    Разработать шаблоны структуры данных в памяти.Тип хранимого элемента -- параметр шаблона. Шаблон может содержать указатель на объект, либо сам объект (в зависимости от варианта). Реализовать операции включения/удаления по заданному логическому номеру, поиск минимального/максимального, включение с сохранением порядка, сортировки выбором или вставками, загрузки хранимых элементов в структуру данных из последовательного потока. Проверить работу шаблона на разработанном классе, используя его как параметр шаблона. Структуры данных:

    1. динамический массив указателей на объекты;

    2. односвязный список, элемент списка хранит указатель на объект;

    3. двусвязный список, элемент списка хранит указатель на объект;

    4. циклический двусвязный список, элемент списка хранит указатель на объект;

    5. дерево с двумя потомками с данными в конечных вершинах. Конечная вершина хранит массив указателей на объекты и счетчик объектов. Промежуточная вершина хранит указатели на потомков и количество объектов в поддереве, включение по логическому номеру производится с использованием ветвления.

    6. дерево с двумя потомками. Вершина хранит объект и количество вершин в своем поддереве, включение по логическому номеру производится с использованием ветвления;

    7. двоичное дерево;

    8. циклическая очередь объектов в динамическом массиве. При переполнении очереди ее размерность увеличивается (с использованием realloc).

    9. односвязный список, элемент списка хранит непосредственно объект;

    10. двусвязный список, элемент списка хранит непосредственно объект;

    11. циклический двусвязный список, элемент списка хранит непосредственно объект

    12. циклическая очередь, представленная массивом указателей на динамические массивы хранимых объектов (при переполнении очередного массива заводится следующий, после выбора последнего объекта в массиве он освобождается).

    Лабораторная работа 5. Абстрактный базовый класс -- интерфейс объектов

    Разработать абстрактный базовый класс объектов object, для него предусмотреть виртуальные методы:

    1. загрузка объекта из текстовой строки (внешнего представления);

    2. выгрузка объекта в текстовую строку в динамической памяти;

    3. добавление объекта в последовательный двоичный файл;

    4. чтение объекта из последовательного двоичного файла;

    5. возврат уникального идентификатора класса;

    6. возврат указателя на строку с именем класса;

    7. сравнение двух объектов, если объекты принадлежат разным класса, то сравниваются имена или идентификаторы классов;

    8. «сложение» (объединение) и вычитание двух объектов в соответствующей классу интерпретации;

    9. создание динамической копии объекта (клонирование).

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

    Лабораторная работа 6. Класс структуры данных

    Разработать класс структуры данных в памяти.Тип хранимого элемента -- указатель на объект базового класса object*. Реализовать операции включения/удаления по заданному логическому номеру, поиск минимального/максимального, включение с сохранением порядка, сортировки выбором или вставками, загрузки хранимых элементов в структуру данных из последовательного потока, используя исключительно виртуальные функции базового класса. Проверить работу структуры данных на объектах разработанного класса. Вариант структуры данных взять из л.р.№4.

    Для сохранения и загрузки объектов различных типов в последовательный двоичный файл предусмотреть запись в него перед каждым объектом идентификатора его типа.

    Лабораторная работа 7. Двоичный и текстовый  последовательные файлы

    В разработанной структуре данных реализовать методы для ее работы с двоичным файлом:

    • в классах, разработанных в л.р.5, реализовать методы сохранения/загрузки объектов в последовательный текстовый и двоичный файл в саморазворачивающемся формате;

    • в классе структуры данных реализовать методы сохранения и загрузки хранимых объектов в последовательные текстовый и двоичный потоки (файлы) в формате -- количество объектов, для каждого объекта -- идентификатор (или имя) типа и сам объект (вызов виртуального метода), при загрузке объекта восстанавливаться тип объекта по считанному из файла идентификатору (имени).

    Лабораторная работа 8. Демонстрационная программа

    Демонстрационная программа должна иметь объект-структуру данных, содержимое которой (хранимые объекты двух типов) выводятся в виде списка (меню). Также должен быть задан набор операций в виде списка (меню): добавление объекта, удаление выбранного объекта, сохранение и загрузка объектов из двоичного и текстового файла, сортировка объектов и выбор минимального/максимального, а также сложение (объединение) двух любых выбранных объектов одного типа с сохранением результата в виде нового объекта. Все хранимые объекты -- динамические.