Skip to content

Latest commit

 

History

History
133 lines (69 loc) · 17.3 KB

labs-oop.md

File metadata and controls

133 lines (69 loc) · 17.3 KB
title metaDescription metaTitle
Лабораторные работы ООП
Лабораторные работы ООП
Лабораторные работы ООП

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

Лабораторная работа 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. Демонстрационная программа

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