Современные технологии программирования
Лабораторные работы по теме "Калькулятор простых дробей"
назад

Выполните лабораторные работы с 1 по 6 по теме вашей курсовой работы "Калькулятор простых дробей".

Лабораторная работа №1 Тип простые дроби
Лабораторная работа №2 Тип память для простых дробей
Лабораторная работа №3 Тип данных процессор простых дробей
Лабораторная работа №4 Редактор простых дробей
Лабораторная работа №5 Управление калькулятором простых дробей
Лабораторная работа №6 Интерфейс калькулятора простых дробей

 

Лабораторная работа №1. Абстрактный тип данных простая дробь

Тема: Классы Object Pascal, С++

Цель: Сформировать практические навыки: реализации абстрактных типов данных с помощью классов Object Pascal, С++.

Задание

  1. Реализовать абстрактный тип данных “простая дробь”, используя классы
  2. Object Pascal,

    С++

    в соответствии с приведенной ниже спецификацией.

  3. Протестировать каждую операцию, определенную на типе данных одним из методов тестирования.

Спецификация типа данных “простые дроби”.

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’) = 6/3

КонструкторСтрока (‘0/3’) = 0/3

 

Копировать:

 

Вход:

Нет.

Предусловия:

Нет.

Процесс:

Создаёт копию самой дроби (тип TFrac) с числителем, и знаменателем такими же, как у самой дроби.

Выход:

Простая дробь (тип TFrac).

Например:

c = 6/3, Копировать(c) = 6/3

Постусловия:

Нет.

 

Сложить

 

Вход:

Простая дробь 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).

Постусловия:

Нет.

 

Обратное

 

Вход:

Нет.

Предусловия:

Числитель дроби (a/b) не равен нулю (a<>0).

Процесс:

Создаёт и возвращает простую дробь (тип TFrac), полученное делением единицы на саму дробь: 1/((a/b) = b/a.

Выход:

Простая дробь (тип TFrac)

Постусловия:

Нет.

 

Минус

 

Вход:

Простая дробь (q) (тип 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. Тип данных реализовать, используя класс.
  2. Для записи и считывания полей простой дроби использовать свойства (property).
  3. Тип данных реализовать в отдельном модуле UFrac.

Содержание отчета

  1. Задание.
  2. Текст программы.
  3. Тестовые наборы данных для тестирования типа данных.

Контрольные вопросы

  1. Что такое инкапсуляция?
  2. Как синтаксически представлено поле в описании класса?
  3. Как синтаксически представлен метод в описании класса?
  4. Как синтаксически представлено простое свойство в описании класса?
  5. Особенности описания методов класса?
  6. Особенности описания и назначение конструктора класса?
  7. Видимость идентификаторов в описании класса?
  8. Особенности вызова методов применительно к объектам класса?

 

Лабораторная работа №2. Абстрактный тип данных (ADT) “память для простых дробей”

Тема: Классы Object Pasca, С++l

Цель: Сформировать практические навыки: реализации абстрактного типа данных с помощью классов Object Pascal, С++

Задание

  1. В соответствии с приведенной ниже спецификацией реализовать абстрактный тип данных “память для простых дробей”, используя класс

  1. Протестировать каждую операцию, определенную на типе данных одним из методов тестирования.

Спецификация типа данных “память для простых дробей”.

ADT TMemory

Данные

Память для простых дробей (тип TMemory, в дальнейшем - память) - это память для хранения объекта “простая дробь” (тип TFrac) и значения “состояние памяти”. Объект “память для простых дробей” - изменяемый. Он имеет два состояния, обозначаемых значениями: “Включена” (_On), “Выключена” (_Off). Её изменяют операции: Записать (Store), Добавить (Add), Очистить (Clear).

Операции

Конструктор

 

Начальные значения:

Нет.

Процесс:

Создаёт объект “память” типа TMemory. Создаёт и записывает в поле “простая дробь” объекта “память” (тип TMemory) объект “простая дробь” (тип TFrac) со значением 0/1. Память устанавливается в состояние “Выключена”, в поле “состояние памяти” заносится значение (_Off).

Записать

 

Вход:

(E) – объект “простая дробь” (тип TFrac).

Предусловия:

Нет.

Процесс:

В объект “память” (тип TMemory) в поле “простая дробь” записывается копия объекта Е. Память устанавливается в состояние “Включена”, в поле “состояние памяти” заносится значение (_On).

Выход:

Нет.

Постусловия:

Состояние памяти – “Включена” (_On).

   

Взять

 

Вход:

Нет.

Предусловия:

Нет.

Процесс:

Создаёт и возвращает копию объекта хранящегося в объекте “память” (тип TMemory) в поле “простая дробь” (тип TFrac).

Выход:

Объект типа TFrac.

Постусловия:

Состояние памяти – “Включена” (_On).

   

Добавить

 

Вход:

(Е) – простая дробь (объект типа TFrac).

Предусловия:

Нет.

Процесс:

В поле “простая дробь” объекта “память” (тип TMemory) записывается объект “простая дробь” (тип TFrac), полученный в результате сложения числа (Е) и числа, хранящегося в памяти в поле “простая дробь”.

Выход:

Нет.

Постусловия:

Состояние памяти – “Включена” (_On).

   

Очистить

 

Вход:

Нет.

Предусловия:

Состояние памяти – “Включена” (_On).

Процесс:

В поле “простая дробь” объекта “память” (тип TMemory) записывается объект “простая дробь” (тип TFrac) со значением 0/1. Память устанавливается в состояние “Выключена” (_Off).

Выход:

Нет.

Постусловия:

Состояние памяти – “Выключена” (_Off).

   

ЧитатьСостояниеПамяти

 

Вход:

Нет.

Предусловия:

Нет.

Процесс:

Копирует и возвращает значение поля “состояние памяти” объекта “память” (тип TMemory) в формате строки.

Выход:

Значение поля “состояния памяти” (типа String).

Постусловия:

Нет.

   

ЧитатьЧисло

 

Вход:

Нет.

Предусловия:

Нет.

Процесс:

Копирует и возвращает значение поля “простая дробь” объекта “память” (тип TMemory) в формате строки.

Выход:

Значение объекта “простая дробь” (тип String).

Постусловия:

Нет.

end TCMemory

Рекомендации к выполнению

  1. Тип данных реализовать, используя класс Object Pascal, С++.
  2. Число храните в поле типа TFrac (см. лаб. Раб. Абстрактный тип данных - простые дроби).
  3. Для чтения состояния памяти и хранимого значения используйте свойство (property).
  4. Тип данных реализовать в отдельном модуле UMemory.

Ниже приведены диаграмма классов и состояний для класса память.

Рис. Диаграмма классов Память.

Рис. Диаграмма состояния Память

Содержание отчета

  1. Задание.
  2. Текст программы.
  3. Тестовые наборы данных для тестирования типа данных.

 

Лабораторная работа №3. Абстрактный тип данных: Процессор простых дробей

Тема: Классы Object Pascal, С++

Цель: Сформировать практические навыки: реализации абстрактного типа данных с помощью классов Object Pascal, С++.

Задание

  1. В соответствии с приведенной ниже спецификацией реализовать абстрактный тип данных “Процессор простых дробей”, используя класс

  1. Протестировать каждую операцию, определенную на типе данных одним из методов тестирования.

Спецификация типа данных “Процессор простых дробей”.

ADT TProc

Данные

Процессор простых дробей (тип TProc) выполняет двухоперандные операции TOprtn = (None, Add, Sub, Mul, Dvd) и однооперандные операции - функции TFunc = (Rev, Sqr). Если операция или функция не может быть выполнена, в поле Error типа String заносится сообщение об ошибке. Левый операнд и результат операции хранится в поле Lop_Res, правый - в поле Rop. Оба поля имеют тип TFrac. Процессор может находиться в состоянии “операция установлена”: поле Operation не равно None (значение типа TOprtn) или в состоянии операция не установлена: поле Operation = None. Значения типа TProc - изменяемые. Они изменяются операциями: Сброс операции (OprtnClear), Выполнить операцию (OprtnRun), Вычислить функцию (FuncRun), Установить операцию (OprtnSet), Установить левый операнд (Lop_Res_Set), Установить правый операнд (Rop_Set), Сброс калькулятора (ReSet).

Операции

Конструктор

 

Начальные значения:

Нет

Процесс:

Создаёт объект процессор простых дробей типа TProc. Поля Lop_Res, Rop инициализируются объектами (тип TFrac) со значением 0/1. В поле Error заносится пустая строка. Процессор устанавливается в состояние: “операция не установлена”: (Operation = None).

   

СбросПроцессора

 

Вход:

Нет.

Предусловия:

Нет.

Процесс:

Поля объекта процессор простых дробей: Lop_Res, Rop инициализируются объектами (тип TFrac) со значением 0/1. В поле Error заносится пустая строка. Процессор устанавливается в состояние: “операция не установлена”: (Operation = None).

Выход:

Нет

Постусловия:

Состояние процессора – “операция сброшена” (Operation = None).

   

СбросОперации

 

Вход:

Нет.

Предусловия:

Нет.

Процесс

Процессор устанавливается в состояние: “операция не установлена”: (Operation = None).

Выход:

Нет

Постусловия:

Состояние процессора – “операция сброшена” (Operation = None).

   

ВыполнитьОперацию

 

Вход:

Нет.

Предусловия:

Нет.

Процесс

Вызывает выполнение текущей операции (записанной в поле Operation). Операция (Operation) выполняется над значениями, хранящимися в полях Rop и Lop_Res. Результат сохраняется в поле Lop_Res. Если Operation = None, никакие действия не выполняются. Если операция не может быть выполнена, в поле Error заносится сообщение об ошибке. Состояние объекта не изменяется.

Выход:

Нет

Постусловия:

Состояние процессора не изменяется.

   

ВычислитьФункцию

 

Вход:

Вид функции (Func: TFunc).

Предусловия:

Нет

Процесс

Вызывает выполнение текущей функции (Func). Функция (Func) выполняется над значением, хранящимся в поле Rop. Результат сохраняется в нём же. Если операция не может быть выполнена, в поле Error заносится сообщение об ошибке. Состояние объекта не изменяется.

Выход:

Нет

Постусловия:

Состояние процессора не меняется.

   

ЧитатьЛевыйОперанд

 

Вход:

Нет.

Предусловия:

Нет.

Процесс

Создаёт и возвращает копию объекта, указатель на который хранится в Lop_Res.

Выход:

Объект типа TFrac.

Постусловия:

Состояние процессора не изменяется.

   

ЗаписатьЛевыйОперанд

 

Вход:

Переменная (Operand) типа TFrac.

Предусловия:

Нет.

Процесс

Создаёт копию объекта Operand и заносит указатель на него в поле Lop_Res.

Выход:

Нет.

Постусловия:

Состояние процессора не изменяется.

   

ЧитатьПравыйОперанд

 

Вход:

Нет.

Предусловия:

Нет.

Процесс

Создаёт и возвращает копию объекта, указатель на который хранится в Rop.

Выход:

Объект типа TFrac.

Постусловия:

Состояние процессора не меняется.

   

ЗаписатьПравыйОперанд

 

Вход:

Переменная (Operand) типа TFrac.

Предусловия:

Нет.

Процесс

Создаёт копию объекта Operand и заносит указатель на него в поле Rop.

Выход:

Нет.

Постусловия:

Состояние процессора не изменяется.

   

ЧитатьСостояние

 

Вход:

Нет.

Предусловия:

Нет.

Процесс

Копирует и возвращает значение поля Operation.

Выход:

Значение поля Operation.

Постусловия:

Состояние процессора не изменяется.

   

ЗаписатьСостояние

 

Вход:

Переменная (Oprtn) типа TOprtn.

Предусловия:

Нет.

Процесс

Заносит значение Oprtn в поле Operation.

Выход:

Нет.

Постусловия:

Состояние процессора изменяется на Oprtn.

   

ЧитатьОшибку

 

Вход:

Нет.

Предусловия:

Нет.

Процесс

Копирует и возвращает значение поля Error.

Выход:

Значение поля Error.

Постусловия:

Состояние процессора не изменяется.

   

СбросОшибки

 

Вход:

Нет.

Предусловия:

Нет.

Процесс

Очищает поле Error.

Выход:

Нет.

Постусловия:

Состояние процессора не изменяется.

Рекомендации к выполнению

  1. Тип данных TProc реализовать, используя класс Object Pascal, С++.
  2. Число храните как поле типа TFrac (см. лаб. Раб. Абстрактный тип данных – простые дроби).
  3. Для чтения состояния процессора, полей: “левый операнд-результат” (Lop_Res), “правый операнд” (Rop), “ошибка” ()Error используйте свойство (property).
  4. Тип данных реализовать в отдельном модуле UProc.
  5. В приведённой ниже таблице показана последовательность изменения состояния процессора при вычислении выражения:

2/1 + 3/1 * (4/1)2

Шаг

Вход

Метод

Rop

Lop_Res

Operation

0

 

Конструктор

0/1

0/1

None

1

2

 

0/1

0/1

None

2

+

Lop_Res_Set;

OprtnSet

0/1

2/1

Add

3

3

 

0/1

2/1

Add

4

*

Rop_Set;

OprtnRun;

OprtnSet;

3/1

2/1+3/1

Mul

5

4

 

4/1

2/1+3/1

Mul

6

Sqr

Rop_Set;

FuncRun

(4/1)^2

2/1+3/1

Mul

7

=

OprtnRun

(4/1)^2

2/1+3/1* (4/1)^2

Mul

8

C

ReSet

0/1

0/1

None

 

Содержание отчета

  1. Задание.
  2. Текст программы.
  3. Тестовые наборы данных для тестирования типа данных.

 

 

Лабораторная работа №4. Редактор простых дробей

Тема: Классы Object Pascal, С++

Цель: Сформировать практические навыки реализации классов средствами объектно-ориентированного программирования Object Pascal, С++.

Задание

  1. Разработать и реализовать класс TEditor “Ввод и редактирование простых дробей”, используя класс

На Унифицированном языке моделирования UML (Unified Modeling Language) наш класс можно обозначить следующим образом:

РедакторПростыхДробей

строка: String

дробьЕстьНоль: Boolean

добавитьЗнак: String

добавитьЦифру(a: Integer): String

добавитьНоль: String

забойСимвола: String

очистить: String

конструктор

читатьСтрокаВформатеСтроки: String (метод свойства)

писатьСтрокаВформатеСтроки(a: String) (метод свойства)

редактировать(a: Integer): String

Обязанность:

ввод, хранение и редактирование строкового представления простых дробей.

  1. Класс должен отвечать за посимвольный ввод, хранение и редактирование строкового представления простых дробей. Значение нуля - ‘0|1’. Класс должен обеспечивать:

  1. Протестировать каждый метод класса.

Рекомендации к выполнению

  1. В классе TEditor опишите следующие атрибуты:

  1. В классе опишите следующие операции:

  1. Класс реализуйте в отдельном модуле UEditor. В разделе описания констант опишите следующие константы:

Содержание отчета

  1. Задание.
  2. Текст программы.
  3. Тестовые наборы данных для тестирования класса.

Контрольные вопросы

  1. Что такое инкапсуляция?
  2. Как синтаксически представлено поле в описании класса?
  3. Как синтаксически представлен метод в описании класса?
  4. Как синтаксически представлено простое свойство в описании класса?
  5. Особенности описания методов класса?
  6. Особенности описания и назначение конструктора класса?
  7. Видимость идентификаторов в описании класса?
  8. Особенности вызова методов применительно к объектам класса?

 

Лабораторная работа №5. Управление калькулятором простых дробей

Тема: Классы Object Pascal, С++

Цель: Сформировать практические навыки реализации классов средствами объектно-ориентированного программирования Object Pascal, С++.

Задание

  1. Разработать и реализовать класс “Управление калькулятором простых дробей” тип TCtrl, используя класс

На Унифицированном языке моделирования UML (Unified Modeling Language) наш класс можно обозначить следующим образом:

УправлениеКалькуляторомПростыхДробей (тип TCtrl)

состояниеКалькулятора: TCtrlState

редактор: TEditor

процессор: TProc

память: TMemory

число: TFrac

выполнитьКомандуКалькулятора(a: Integer; var b, MState: String): String

выполнитьКомандуРедактора(a: Integer): String

выполнитьОперацию(a: Integer): String

выполнитьФункцию(a: Integer): String

вычислитьВыражение(a: Integer): String

установитьНачальноеСостояниеКалькулятора(a: Integer): String

выполнитьКомандуюПамяти(a: Integer; var MState: String): String

очиститьПамять(var MState: String): String

записатьВПамять(var MState: String): String

считатьИзПамяти(var MState: String): String

добавитьКЧислуВПамяти(var MState: String): String

читатьПисатьСостояниеКалькулятора: TCtrlState (свойство, опирающееся на поле)

выполнитьКомандуБуфераОбмена(a: Integer; var b: String): String

записатьВБуферОбмена(a: Integer; var b: String): String

читатьИзБуферОбмена(a: Integer; var b: String): String

сменитьОснованиеСистемыСчисления(b: integer; var s:String)

конструктор

деструктор

Обязанность:

управление выполнением команд калькулятора

  1. Класс должен отвечать за управление выполнением команд калькулятора. Класс должен обеспечивать:

  1. Протестировать каждый метод класса и класс в целом.

Рекомендации к выполнению

  1. Класс TCtrl реализуйте в отдельном модуле UControl.
  2. В модуле опишите перечисляемый тип TCtrlState = (cStart, cEditing, FunDone, cValDone, cExpDone, cOpChange, cError) для обозначения состояний калькулятора: cStart (Начальное), cEditing (Ввод и редактирование), cExpDone (Выражение вычислено), cOpDone (Операция выполнена), cValDone (Значение введено), cOpChange (Операция изменена),. cError (Ошибка).
  3. В классе опишите следующие атрибуты:

  1. Набор основных операций класса определяется набором команд калькулятора, заданных пользователем. Кроме того, в классе будут определены вспомогательные операции, обеспечивающие реализацию основных операций. В классе опишите следующие операции:

Рекомендации к выполнению

Логика работы объекта “управление калькулятором” класс TCtrl может быть описана с помощью таблицы переходов, которая отражает изменение состояния калькулятора и результат работы объекта под действием команд пользователя. Таблица переходов строится на основе анализа прецедентов (вариантов использования), приведённых в спецификации.

Для построения таблицы переходов необходимо:

  1. проанализировать спецификацию, приведённую в задании для калькулятора простых дробей и выделить состояния калькулятора, например: Start (Начальное), Editing (Ввод и редактирование), ExpDone (Выражение вычислено), FunDone (Функция выполнена), ValDone (Значение введено), OpChange (смена операрации), Error (ошибка);
  2. построить таблицу состояний следующего вида:

 

Состояние калькулятора: Start (Начальное – после запуска приложения или выполнения команды С)

Вход (команда пользователя)

Результирующее состояние

Действия

Примечание

Команды ввода и редактирования

Editing

Изменение состояния редактируемой строки. (Вызов редактора).

 

Операция (Op)

Start

Введённая операция становится текущей.

 

Функция (Fun)

Start

Действия отсутствуют.

 

Error

Команды памяти

Start

Действия отсутствуют.

 

Команды буфера обмена

Start

Действия отсутствуют.

 

Вычислить (=)

Start

Действия отсутствуют.

 

Новое выражение (С)

Start

Действия отсутствуют.

 

Состояние калькулятора: Editing (Редактирование)

Вход (команда пользователя)

Результирующее состояние

Действия

Примечание

Команды ввода и редактирования

     

Операция (Op)

 

 

 

 

Функция (Fun)

 

 

 

 

Взять из памяти (MR), (MS),(M+)

     

Вставить из буфера обмена, Копировать в буфер обмена

     

Вычислить (=)

 

 

 

 

Новое выражение (С)

     

 

Состояние калькулятора: OpChange (смена операрации)

Вход (команда пользователя)

Результирующее состояние

Действия

Примечание

Команды ввода и редактирования

     

Операция (Op)

     

Функция (Fun)

 

 

 

 

Взять из памяти (MR)

     

Вставить из буфера обмена

     

Вычислить (=)

 

 

 

 

Новое выражение (С)

     

Состояние калькулятора: ExpDone (Выражение вычислено)

Вход (команда пользователя)

Результирующее состояние

Действия

Примечание

Команды ввода и редактирования

     

Операция (Op)

     

Функция (Fun)

 

 

 

 

Взять из памяти (MR)

     

Копировать из буфера обмена (MR)

     

(MS),(MC),(M+), Вставить в буфер обмена

     

Вычислить (=)

 

 

 

 

Новое выражение (С)

     

Состояние калькулятора: FunDone (Функция вычислена),)

Вход (команда пользователя)

Результирующее состояние

Действия

Примечание

Команды ввода и редактирования

     

Операция (Op)

 

 

 

 

Функция (Fun)

 

 

 

 

Взять из памяти (MR)

     

Копировать из буфера обмена (MR)

     

(MS),(MC),(M+), Вставить в буфер обмена

     

Вычислить (=)

 

 

 

 

Новое выражение (С)

     

Состояние калькулятора: ValDone (Значение введено)

Вход (команда пользователя)

Результирующее состояние

Действия

Примечание

Команды ввода и редактирования

     

Операция (Op)

 

 

 

 

Функция (Fun)

 

 

 

 

Взять из памяти (MR)

     

Копировать из буфера обмена (MR)

     

(MS),(MC),(M+), Вставить в буфер обмена

     

Вычислить (=)

 

 

 

 

Новое выражение (С)

     

  1. На основе таблицы состояний постройте таблицу переходов для калькулятора.

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

 

Содержание отчета

  1. Задание.
  2. Текст программы.
  3. Тестовые наборы данных для тестирования класса.

Контрольные вопросы

  1. Что такое инкапсуляция?
  2. Как синтаксически представлено поле в описании класса?
  3. Как синтаксически представлен метод в описании класса?
  4. Как синтаксически представлено простое свойство в описании класса?
  5. Особенности описания методов класса?
  6. Особенности описания и назначение конструктора класса?
  7. Видимость идентификаторов в описании класса?
  8. Особенности вызова методов применительно к объектам класса?

 

Лабораторная работа №6. Интерфейс калькулятора простых дробей

Тема: Классы Object Pascal, С++

Цель: Сформировать практические навыки реализации классов средствами объектно-ориентированного программирования Object Pascal, С++.

Задание

  1. Разработать и реализовать класс “Интерфейс калькулятора простых дробей” тип TClcPnl наследник TForm, используя класс
  2. На Унифицированном языке моделирования UML (Unified Modeling Language) наш класс можно обозначить следующим образом:

    ИнтерфейсКалькулятораПростыхДробей

    строкаПростаяДробь: TStaticText

    состояниеПамяти: TStaticText

    кнопки ввода: TBitButton

    FormCreate(Sender: TObject)

    ButtonClick(Sender: TObject)

    FormKeyPress(Sender: TObject; var Key: Char)

    Методы для обработки команд меню

    Обязанность:

    Обеспечить пользователю возможность управления калькулятором через клавиатуру и командные кнопки для выполнения вычислений

    1. Класс должен отвечать:

      1. за ввод:

      1. отображение:

      1. класс должен обеспечить возможность:

      1. класс должен обеспечить настройки на один из следующих режимов:

    1. Протестировать каждый метод класса и класс в целом.

    Рекомендации к выполнению

    1. Класс TClcPnl реализуйте в отдельном модуле UClcPnl.
    2. Панель управления реализуйте как форму.
    3. В классе формы используйте следующие визуальные компоненты:

    1. В классе формы опишите следующие событийные процедуры:

    Содержание отчета

    1. Задание.
    2. Текст программы.
    3. Тестовые наборы данных для тестирования класса.

    Контрольные вопросы

    1. Что такое инкапсуляция?
    2. Как синтаксически представлено поле в описании класса?
    3. Как синтаксически представлен метод в описании класса?
    4. Как синтаксически представлено простое свойство в описании класса?
    5. Особенности описания методов класса?
    6. Особенности описания и назначение конструктора класса?
    7. Видимость идентификаторов в описании класса?
    8. Особенности вызова методов применительно к объектам класса?

    наверх

     


    назад