Служба спасения студентов
Служба спасения для студентов

СибГУТИ Лабораторная работа 1 Современные технологии программирования (часть 1) скачать бесплатно

Скачать бесплатно
Лабораторная работа 1. Абстрактный тип данных простая дробь
Цель 
Сформировать практические навыки реализации абстрактных типов данных в соответствии с заданной спецификацией с помощью классов С++.
Задание
1. Реализовать абстрактный тип данных «простая дробь», используя класс С++, в соответствии с приведенной ниже спецификацией. 
2. Протестировать каждую операцию, определенную на типе данных одним из методов тестирования
Спецификация типа данных «простые дроби».
ADT TFrac
Простая дробь (тип TFrac) - это пара целых чисел: числитель и знаменатель (a/b). Простые дроби изменяемые.
Операции
Операции могут вызываться только объектом простая дробь (тип TFrac), указатель на который в них передаётся по умолчанию. При описании операций этот объект называется «сама дробь».
Конструктор  
         Начальные значения: Пара целых чисел (a) и (b).
         Процесс: Инициализирует поля простой дроби (тип TFrac): числитель значением a,  знаменатель - (b). В случае необходимости дробь предварительно сокращается.
Например:
Конструктор(6,3) = (2/1)
Конструктор(0,3) = (0/3).
Конструктор  
         Начальные значения: Строковое представление простой дроби . Например: ‘7/9’.
         Процесс: Инициализирует поля простой дроби  (тип TFrac) строкой f =’a/b’. Числитель значением a, знаменатель - b. В случае необходимости дробь предварительно сокращается.
Например:
Конструктор(‘6/3’) = 2/1
Конструктор (‘0/3’) = 0/3
Копировать:  
         Вход: Нет.
         Предусловия: Нет.
         Процесс: Создаёт копию самой дроби (тип TFrac) с числителем, и знаменателем такими же, как у самой дроби.
         Выход: Простая дробь (тип TFrac).
Например:
c = 2/1, Копировать(c) = 2/1
         Постусловия: Нет.
Сложить  
         Вход: Простая дробь d (тип TFrac).
         Предусловия: Нет.
         Процесс: Создаёт и возвращает простую дробь (тип TFrac), полученную сложением самой дроби q = a1/b1 с d =a2/b2: ((a1/b1)+(a2/b2)=(a1*b2 + a2*b1)/( b1* b2)).
Например:
q = 1/2, d = -3/4
q.Сложить(d) = -1/4.
         Выход: Простая дробь (тип TFrac).
         Постусловия: Нет.
Умножить  
         Вход: Простая дробь d (тип TFrac).
         Предусловия: Нет.
         Процесс: Создаёт простую дробь (тип TFrac), полученную умножением самой дроби q = a1/b1 на d = a2/b2 ((a1/b1)*(a2/b2)=(a1* a2)/( b1* b2)).
         Выход: Простая дробь (тип TFrac).
         Постусловия: Нет.
Вычесть  
         Вход: Простая дробь d (тип TFrac).
         Предусловия: Нет.
         Процесс: Создаёт и возвращает простую дробь (тип TFrac), полученную вычитанием d = a2/b2 из самой дроби q = a1/b1: ((a1/b1)-(a2/b2)=(a1* b2-a2*b1)/(b1*b2)).
Например:
q = (1/2), d = (1/2)
q.Вычесть(d) = (0/1).
         Выход: Простая дробь (тип TFrac).
         Постусловия: Нет
Делить  
         Вход: Простая дробь d (тип TFrac).
         Предусловия: Числитель числа d не равно 0.
         Процесс: Создаёт и возвращает простую дробь (тип TFrac), полученное делением самой дроби q = a1/b1 на дробь d = a2/b2: ((a1/b1)/(a2/b2)=(a1* b2)/( a2*b1)).
         Выход: Простая дробь (тип TFrac).
         Постусловия: Нет.
Квадрат  
         Вход: Нет.
         Предусловия: Нет.
         Процесс: Создаёт и возвращает простую дробь (тип TFrac), полученную умножением самой дроби на себя: ((a/b)*(a/b)=(a* a)/( b* b)).
         Выход: Простая дробь (тип TFrac).
         Постусловия: Нет.
Обратное  
         Вход: Нет.
         Предусловия: Нет.
         Процесс: Создаёт и возвращает простую дробь (тип TFrac), полученное делением единицы на саму дробь: 1/((a/b) = b/a.
         Выход: Простая дробь (тип TFrac)
        Постусловия: Нет.
Минус  
         Вход: Нет.
         Предусловия: Нет.
         Процесс: Создаёт простую дробь, являющуюся разностью простых дробей z и q, где z - простая дробь (0/1), дробь, вызвавшая метод.
         Выход: Простая дробь (тип TFrac).
         Постусловия: Нет.
Равно  
         Вход: Простая дробь d (тип TFrac).
         Предусловия: Нет
         Процесс: Сравнивает саму простую дробь q и d. Возвращает значение True, если q и d - тождественные простые дроби, и значение False - в противном случае.
         Выход: Булевское значение.
         Постусловия: Нет.
Больше  
         Вход: Простая дробь d (тип TFrac).
         Предусловия: Нет.
         Процесс: Сравнивает саму простую дробь q и d. Возвращает значение True, если q > d, -  значение False - в противном случае.
         Выход: Булевское значение.
         Постусловия: Нет.
ВзятьЧислительЧисло  
         Вход:  
         Предусловия: Нет.
         Процесс: Возвращает значение числителя дроби в числовом формате.
         Выход: Вещественное значение.
         Постусловия: Нет.
ВзятьЗнаменательЧисло  
         Вход: Нет. 
         Предусловия: Нет.
         Процесс: Возвращает значение знаменателя дроби в числовом формате.
         Выход: Вещественное значение.
        Постусловия: Нет.
ВзятьЧислительСтрока  
         Вход: Нет.
         Предусловия: Нет.
         Процесс: Возвращает значение числителя дроби в строковом формате.
         Выход: Строка.
         Постусловия: Нет.
ВзятьЗнаменательСтрока  
         Вход: Нет. 
         Предусловия: Нет.
         Процесс: Возвращает значение знаменателя дроби в строковом формате.
         Выход: Строка.
         Постусловия: Нет.
ВзятьДробьСтрока  
         Вход: Нет.
         Предусловия: Нет.
         Процесс: Возвращает значение простой дроби, в строковом формате.
         Выход: Строка.
         Постусловия: Нет.
end TFracRatio
Рекомендации к выполнению
1. Тип данных реализовать, используя класс C++.
2. Тип данных реализовать в отдельном модуле UFrac.

Решение:
Листинг проекта PFrac - файл PFrac.cpp.
...
 
Листинг модуля UFrac - файл UFrac.h.
...
Тест программы:
Рисунок 1.
Контрольные вопросы
1. Особенности описания методов класса?
Полное описание методов осуществляется в разделе подпрограмм. Если класс описан в разделе типов раздела интерфейса (interface) модуля, то полное описание методов приводится в разделе описания подпрограмм раздела реализации (implementation) модуля.
От обычных подпрограмм методы отличаются, во-первых, тем что, в заголовке полного описания метода идентификатору метода предшествует идентификатор класса, отделённый от него точкой, во-вторых, тем, что им при вызове передаётся (неявно) указатель на тот объект, который их вызвал.
2. Особенности описания и назначение конструктора класса?
Конструктор является классовым методом, поэтому может быть вызван до создания объекта. Для его вызова используется идентификатор типа. В Object Pascal у класса может быть несколько конструкторов. Принято называть конструктор Create. Для уничтожения объектов (освобождения памяти из под объектов) используют деструкторы. Типичное название деструктора – Destroy. В документации рекомендуется использовать для уничтожения экземпляра объекта метод Free, который первоначально проверяет указатель (не равен ли он nil) и затем уж вызывает Destroy.
3. Видимость идентификаторов в описании класса?
В заголовке полного описания метода идентификатору метода предшествует идентификатор класса, отделённый от него точкой, во-вторых, тем, что им при вызове передаётся (неявно) указатель на тот объект, который их вызвал.
4. Особенности вызова методов применительно к объектам класса?
Внутри метода он доступен под зарезервированным именем self.
5. Что такое абстрактный тип данных?
Абстрактный тип данных – это набор объектов и набор операций, характеризующих поведение этих объектов.
Заявка на расчет