СибГУТИ Лабораторная работа 3 Современные технологии программирования (часть 1) скачать бесплатно
Лабораторная работа 3. Абстрактный тип данных (ADT) p-ичное число
Цель: Сформировать практические навыки реализации абстрактного типа данных с помощью классов С++.
Задание
1. Реализовать абстрактный тип данных «р-ичное число», используя класс, в соответствии с приведенной ниже спецификацией.
2. Протестировать каждую операцию, определенную на типе данных, одним из методов тестирования.
Спецификация типа данных «р-ичное число».
ADT TPNumber
Данные Р-ичное число TPNumber - это действительное число (n) со знаком в системе счисления с основанием (b) (b в диапазоне 2..16), содержащее целую и дробную части. Точность представления числа c (c >= 0). Р-ичные числа изменяемые.
Операции
Операции могут вызываться только объектом р-ичное число (тип TPNumber), указатель на который в них передаётся по умолчанию. При описании операций этот объект называется «само число».
Операция Описание
Конструктор
Начальные значения: Вещественное число (a) во внутреннем формате, система счисления (b), точность представления числа (c)
Процесс: Инициализирует поля p-ичного числа: система счисления (b), точность представления (c). В поле (n) созданного числа заносится (a).
Например:
Конструктор(a,3,3) = число a в системе счисления 3 с тремя разрядами после троичной точки.
Конструктор(a,3,2) = число a в системе счисления 3 с двумя разрядами после троичной точки.
Конструктор
Начальные значения: Строковое представление р–ичного числа (a), система счисления (b), точность представления числа (c)
Процесс: Инициализирует поля p-ичного числа: система счисления (b), точность представления (c). В поле (n) созданного числа заносится результат преобразования строки (a) в числовое представление. b-ичное число (a) и основание системы счисления (b) представлены в формате строки.
Например:
Конструктор(‘20’,’3’,’6’) = 20 в системе счисления 3, точность 6 знаков после запятой.
Конструктор(‘0’,’3’,’8’) = 0 в системе счисления 3, точность 8 знаков после запятой.
Копировать:
Вход: Нет.
Предусловия: Нет.
Процесс: Создаёт копию самого числа (тип TPNumber).
Выход: р-ичное число.
Постусловия: Нет.
Сложить
Вход: Р-ичное число d с основанием и точностью такими же, как у самого числа.
Предусловия: Нет.
Процесс: Создаёт и возвращает р-ичное число (тип TPNumber), полученное сложением полей (n) самого числа и числа d.
Выход: р-ичное число.
Постусловия: Нет
Умножить
Вход: Р-ичное число d с основанием и точностью такими же, как у самого числа.
Предусловия: Нет.
Процесс: Создаёт и возвращает р-ичное число (тип TPNumber), полученное умножением полей (n) самого числа и числа d.
Выход: Р-ичное число (тип TPNumber).
Постусловия: Нет.
Вычесть
Вход: Р-ичное число d с основанием и точностью такими же, как у самого числа.
Предусловия: Нет.
Процесс: Создаёт и возвращает р-ичное число (тип TPNumber), полученное вычитанием полей (n) самого числа и числа d.
Выход: Р-ичное число (тип TPNumber).
Постусловия: Нет.
Делить
Вход: Р-ичное число d с основанием и точностью такими же, как у самого числа.
Предусловия: Поле (n) числа (d) не равно 0.
Процесс: Создаёт и возвращает р-ичное число (тип TPNumber), полученное делением полей (n) самого числа на поле (n) числа d.
Выход: Р-ичное число (тип TPNumber).
Постусловия: Нет.
Обратить
Вход: Нет.
Предусловия: Поле (n) самого числа не равно 0.
Процесс: Создаёт р-ичное число, в поле (n) которого заносится значение, полученное как 1/(n) самого числа.
Выход: Р-ичное число (тип TPNumber).
Постусловия: Нет.
Квадрат
Вход: Нет.
Предусловия: Нет.
Процесс: Создаёт р-ичное число, в поле (n) которого заносится значение, полученное как квадрат поля (n) самого числа.
Выход: Р-ичное число (тип TPNumber).
Постусловия: Нет.
ВзятьРЧисло
Вход: Нет.
Предусловия: Нет.
Процесс: Возвращает значение поля (n) самого числа.
Выход: Вещественное значение.
Постусловия: Нет.
ВзятьРСтрока
Вход: Нет.
Предусловия: Нет.
Процесс: Возвращает р-ичное число (q) в формате строки, изображающей значение поля (n) самого числа в системе счисления (b) с точностью (c).
Выход: Строка.
Постусловия: Нет.
ВзятьОснованиеЧисло
Вход: Нет.
Предусловия: Нет.
Процесс: Возвращает значение поля (b) самого числа (q).
Выход: Целочисленное значение
Постусловия: Нет.
ВзятьОснованиеСтрока
Вход: Нет.
Предусловия: Нет.
Процесс: Возвращает значение поля (b) самого числа в формате строки, изображающей (b) в десятичной системе счисления.
Выход: Строка.
Постусловия: Нет.
ВзятьТочностьЧисло
Вход: Нет.
Предусловия: Нет.
Процесс: Возвращает значение поля (c) самого числа .
Выход: Целое значение.
Постусловия: Нет.
ВзятьТочностьСтрока
Вход: Нет.
Предусловия: Нет.
Процесс: Возвращает значение поля (c) самого числа в формате строки, изображающей (c) в десятичной системе счисления.
Выход: Строка.
Постусловия: Нет.
УстановитьОснованиеЧисло
Вход: Целое число (newb).
Предусловия: 2 <= newb <= 16.
Процесс: Устанавливает в поле (b) самого числа значение (newb).
Выход: Нет.
Постусловия: Нет.
УстановитьОснованиеСтрока
Вход: Строка (bs), изображающая основание (b) p-ичного числа в десятичной системе счисления.
Предусловия: Допустимый диапазон числа, изображаемого строкой (bs) - 2,,16.
Процесс: Устанавливает значение поля (b) самого числа значением, полученным в результате преобразования строки (bs).
Выход: Строка.
Постусловия: Нет.
УстановитьТочностьЧисло
Вход: Целое число (newc).
Предусловия: newc >= 0.
Процесс: Устанавливает в поле (c) самого числа значение (newc).
Выход: Нет.
Постусловия: Нет.
УстановитьТочностьСтрока
Вход: Строка (newc).
Предусловия: Строка (newc) изображает десятичное целое >= 0.
Процесс: Устанавливает в поле (c) самого числа значение, полученное преобразованием строки (newc).
Выход: Нет.
Постусловия: Нет.
end TPNumber
Рекомендации к выполнению
1. Тип данных реализовать, используя класс С++.
2. Число храните как поле вещественного типа.
3. Основание системы счисления храните как поле целочисленного типа.
4. Тип данных реализовать в отдельном модуле UPNumber в режиме консольного приложения.
Решение:
...
Листинг модуля UPNumber - файл UPNumber.h.
...
Тест программы:
Рисунок 1.
Контрольные вопросы
1. Что такое инкапсуляция?
Правило объектно-ориентированного программирования (ООП) утверждает, что для обеспечения надёжности нежелателен прямой доступ к полям объекта: чтение и обновление их содержимого должно производиться посредством вызова соответствующих методов. Это правило и называется инкапсуляций.
2. Как синтаксически представлено поле в описании класса?
При объявлении имен полей принято к названию поля добавлять заглавную букву F (FSomeField).
3. Как синтаксически представлен метод в описании класса?
В описании класса как типа данных методы представлены своими заголовками.
4. Как синтаксически представлено простое свойство в описании класса?
Обычно свойство определяется тремя своими элементами: полем и двумя методами, которые осуществляют его чтение и запись.
5. Особенности описания методов класса?
Полное описание методов осуществляется в разделе подпрограмм. Если класс описан в разделе типов раздела интерфейса (interface) модуля, то полное описание методов приводится в разделе описания подпрограмм раздела реализации (implementation) модуля.
От обычных подпрограмм методы отличаются, во-первых, тем что, в заголовке полного описания метода идентификатору метода предшествует идентификатор класса, отделённый от него точкой, во-вторых, тем, что им при вызове передаётся (неявно) указатель на тот объект, который их вызвал.
6. Особенности описания и назначение конструктора класса?
Конструктор является классовым методом, поэтому может быть вызван до создания объекта. Для его вызова используется идентификатор типа. В Object Pascal у класса может быть несколько конструкторов. Принято называть конструктор Create. Для уничтожения объектов (освобождения памяти из под объектов) используют деструкторы. Типичное название деструктора – Destroy. В документации рекомендуется использовать для уничтожения экземпляра объекта метод Free, который первоначально проверяет указатель (не равен ли он nil) и затем уж вызывает Destroy.
7. Видимость идентификаторов в описании класса?
В заголовке полного описания метода идентификатору метода предшествует идентификатор класса, отделённый от него точкой, во-вторых, тем, что им при вызове передаётся (неявно) указатель на тот объект, который их вызвал.
8. Особенности вызова методов применительно к объектам класса?
Для доступа к внутреннему элементу объекта класса должно быть два метода с одинаковым названием, обычный и константный. Обычный метод возвращает ссылку или указатель на элемент объекта, константный метод - константную ссылку или константный указатель.