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

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

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

 

Лабораторная работа №1. Абстрактный тип данных “комплексное число”

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

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

Задание

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

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

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

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

ADT TComplex

Данные Комплексное число TComplex - это неизменяемая пара вещественных чисел, представляющие действительную и мнимую части комплексного числа (a + i*b).

Операции

Операции могут вызываться только объектом комплексное число (тип TComplex), указатель на который в них передаётся по умолчанию. При описании операций этот объект называется “само число”.

КонструкторЧисло

 

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

Пара вещественных чисел (a) и (b).

Процесс:

Создаёт комплексное число (тип TComplex) с действительной частью (a) и мнимой (b).

Например:

КонструкторЧисло (6,3)=6 + i*3

КонструкторЧисло (3,0)=3 + i*0

КонструкторЧисло (0,0)=0 + i*0

 

КонструкторСтрока

 

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

Строка, представляющая комплексное число.

Процесс:

Создаёт комплексное число (тип TComplex), представленное строкой f = ’a + i*b’, с действительной частью (a) и комплексной частью (b).

Например:

КонструкторСтрока(‘6+i*3’) = 6+i*3

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

 

Копировать:

 

Вход:

Нет.

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

Нет.

Процесс

Создаёт и возвращает собственную копию - комплексное число (тип TComplex) с действительной и мнимой частями такими же как у самого числа.

Выход:

Комплексное число (тип TComplex).

Например:

c = 6+i3, Копировать(c) = 6+i3

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

Нет.

 

Сложить

 

Вход:

Комплексное число d (тип TComplex).

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

Нет.

Процесс

Создаёт и возвращает комплексное число, полученное сложением самого числа q = a1+i*b1 с числом d = a2+i*b2: ((a1+i*b1)+(a2+i*b2)=(a1+a2)+i*(b1+b2)).

Например:

q = (2 +i*1), d = (2 +i*1),

q.Сложить(d) = (4 +i*2).

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Умножить

 

Вход:

Комплексное число d (тип TComplex).

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

Нет.

Процесс

Создаёт и возвращает комплексное число, полученное умножением самого числа q = a1+i*b1 на число d = a2+i*b2: ((a1+i*b1)*(a2+i*b2)=(a1*a2 - b1*b2)+i*(a1*b2+ a2*b1)).

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Квадрат

 

Вход:

Нет.

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

Нет.

Процесс

Создаёт и возвращает комплексное число (тип TComplex), полученное умножением числа на самого себя: ((a1+i*b1)*(a1+i*b1)=(a1*a1 - b1*b1)+i*(a1*b1+ a1*b1)).

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Обратное

 

Вход:

Нет.

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

Нет.

Процесс

Создаёт и возвращает комплексное число (тип TComplex), полученное делением единицы на само число 1/((a1+i*b1) = a1/(a1**2 + b1**2) - i* b1/( a1**2 + b1**2 )).

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Вычесть

 

Вход:

Комплексное число d (тип TComplex)..

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

Нет.

Процесс

Создаёт и возвращает комплексное число (тип TComplex), полученное вычитанием d = a2 + i b2 из самого себя q = (a1+i*b1): (a1+i*b1)-(a2+i*b2)=(a1-a2)+i*(b1-b2).

Например:

q = (2 +i*1), d = (2 +i*1))

q.Вычесть(d) = (0 + i0).

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Делить

 

Вход:

Комплексное число (d).

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

Нет.

Процесс

Создаёт и возвращает комплексное число (тип TComplex), полученное делением самого числа (q) на число (d) ((a1+i*b1)/(a2+i*b2)=(a1*a2 + b1*b2)/(a2**2 + b2**2)+i*(a2*b1 – a1*b2)/(a2**2 + b2**2)).

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Минус

 

Вход:

Нет.

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

Нет.

Процесс

Создаёт и возвращает комплексное число (тип TComplex), являющееся разностью комплексных чисел z и и самого числа, где z – комплексное число (0+i0).

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Модуль

 

Вход:

Нет.

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

Нет.

Процесс

Вычисляет и возвращает модуль самого комплексного числа (q). Например:

q = (2 +i*1), q. Модуль = Ö (2*2+1*1).

q = (i*17), q. Модуль = Ö (0*0+17*17).

Выход:

Вещественное число.

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

Нет.

 

УголРад

 

Вход:

Нет.

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

Нет.

Процесс

Возвращает аргумент fi самого комплексного числа q (в радианах). fi = (arcTg(b/a), a>0; pi/2, a = 0, b > 0; arcTg(b/a) + pi, a < 0; -pi/2, a = 0, b <0 ).

Например:

q = (1 +i*1), q. УголРад = 0,79.

Выход:

Вещественное число.

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

Нет.

 

УголГрад

 

Вход:

Нет.

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

Нет.

Процесс

Возвращает аргумент самого комплексного числа q (в градусах).

Например:

q = (1 +i*1), q. Град = 45.

Выход:

Вещественное число.

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

Нет.

 

Степень

 

Вход:

Целое (n).

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

Нет.

Процесс

Возвращает целую положительную степень n самого комплексного числа q. qn = rn(cos (n*fi)+ i* sin (n*fi)).

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Корень

 

Вход:

Целое (n), целое (i).

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

Нет.

Процесс

Возвращает i-ый корень целой положительной степени n самого комплексного числа q. Ö n(q) = Ö n(r)* (cos ((fi + 2*k*pi)/n)+ i* sin ((fi + 2*k*pi)/n)). При этом коофициенту k придается последовательно n значений: k = 0,1,2…, n - 1 и получают n значений корня, т.е. ровно столько, каков показатель корня.

Выход:

Комплексное число (тип TComplex).

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

Нет.

 

Равно

 

Вход:

Комплексное число (d).

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

Нет.

Процесс

Сравнивает само комплексное число с числом (d). Возвращает значение True, если они - тождественные комплексные числа, и значение False - в противном случае.

Выход:

Булевское значение.

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

Нет.

 

НеРавно

 

Вход:

Комплексное число (d).

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

Нет.

Процесс

Сравнивает само комплексное число с числом (d). Возвращает значение True, если само число <> d, - значение False - в противном случае.

Выход:

Булевское значение.

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

Нет.

 

ВзятьReЧисло

 

Вход:

Нет

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

Нет.

Процесс

Возвращает значение действительной части самого комплексного числа в числовом формате.

Выход:

Вещественное значение.

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

Нет.

 

ВзятьImЧисло

 

Вход:

Нет.

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

Нет.

Процесс

Возвращает значение мнимой части самого комплексного числа в числовом формате.

Выход:

Вещественное значение.

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

Нет.

 

ВзятьReСтрока

 

Вход:

Нет.

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

Нет.

Процесс

Возвращает значение вещественной части самого комплексного числа в строковом формате.

Выход:

Строка.

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

Нет.

 

ВзятьImСтрока

 

Вход:

Нет.

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

Нет.

Процесс

Возвращает значение мнимой части самого комплексного числа в строковом формате.

Выход:

Строка.

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

Нет.

 

ВзятьКомплексноеСтрока

 

Вход:

Нет.

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

Нет.

Процесс

Возвращает значение самого комплексного числа в строковом формате.

Выход:

Строка.

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

Нет.

end TComplex

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

  1. Тип данных реализовать, используя класс.
  2. Для описания полей комплексного числа использовать свойства (property).
  3. Тип данных реализовать в отдельном модуле UComplex.

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

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

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

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

 

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

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

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

Задание

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

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

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

ADT TMemory

Данные

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

Операции

Конструктор

 

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

Нет.

Процесс:

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

Записать

 

Вход:

(E) – объект “комплексное число” (тип TComplex).

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

Нет.

Процесс

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

Выход:

Нет.

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

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

   

Взять

 

Вход:

Нет.

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

Нет.

Процесс

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

Выход:

Объект (тип TComplex).

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

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

   

Добавить

 

Вход:

(Е) – комплексное число (объект типа TComplex).

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

Нет.

Процесс

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

Выход:

Нет.

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

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

   

Очистить

 

Вход:

Нет.

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

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

Процесс

В поле “комплексное число” объекта “память” (тип TMemory) записывается объект “комплексное число” (тип TComplex) со значением 0+i*0. Память устанавливается в состояние “Выключена” (_Off).

Выход:

Нет.

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

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

   

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

 

Вход:

Нет.

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

Нет.

Процесс

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

Выход:

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

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

Нет.

   

ЧитатьЧисло

 

Вход:

Нет.

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

Нет.

Процесс

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

Выход:

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

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

Нет.

end TCMemory

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

  1. Тип данных реализовать, используя класс Object Pascal, С++.
  2. Число храните как поле типа TComplex (см. лаб. Раб. Абстрактный тип данных - комплексные числа).
  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. Оба поля имеют тип TComplex. Процессор может находиться в состоянии “операция установлена”: поле Operation не равно None (значение типа TOprtn) или в состоянии операция не установлена: поле Operation = None. Значения типа TProc - изменяемые. Они изменяются операциями: Сброс операции (OprtnClear), Выполнить операцию (OprtnRun), Вычислить функцию (FuncRun), Установить операцию (OprtnSet), Установить левый операнд (Lop_Res_Set), Установить правый операнд (Rop_Set), Сброс калькулятора (ReSet).

Операции

Конструктор

 

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

Нет

Процесс:

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

   

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

 

Вход:

Нет.

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

Нет.

Процесс:

Поля объекта процессор простых дробей: Lop_Res, Rop инициализируются объектами (тип TComplex) со значением 0+i0. В поле 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.

Выход:

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

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

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

   

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

 

Вход:

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

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

Нет.

Процесс

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

Выход:

Нет.

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

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

   

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

 

Вход:

Нет.

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

Нет.

Процесс

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

Выход:

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

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

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

   

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

 

Вход:

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

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

Нет.

Процесс

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

Выход:

Нет.

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

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

   

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

 

Вход:

Нет.

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

Нет.

Процесс

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

Выход:

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

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

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

   

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

 

Вход:

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

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

Нет.

Процесс

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

Выход:

Нет.

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

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

   

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

 

Вход:

Нет.

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

Нет.

Процесс

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

Выход:

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

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

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

   

СбросОшибки

 

Вход:

Нет.

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

Нет.

Процесс

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

Выход:

Нет.

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

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

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

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

2 + 3 * 42

Шаг

Вход

Метод

Rop

Lop_Res

Operation

0

 

Конструктор

0+i0

0+i0

None

1

2

 

0+i0

0+i0

None

2

+

Lop_Res_Set;

OprtnSet

0+i0

2

Add

3

3

 

0+i0

2

Add

4

*

Rop_Set;

OprtnRun;

OprtnSet;

3

2+3

Mul

5

4

 

4

2+3

Mul

6

Sqr

Rop_Set;

FuncRun

4^2

2+3

Mul

7

=

OprtnRun

4^2

2+3* 4^2

Mul

8

C

ReSet

0+i0

0+i0

None

 

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

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

 

 

Лабораторная работа №4. Редактор комплексных чисел

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

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

Задание

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

    РедакторКомплексныхЧисел

    строка: String

    комплексноеЧислоЕстьНоль: Boolean

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

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

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

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

    очистить: String

    конструктор

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

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

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

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

    ввод, хранение и редактирование строкового представления комплексных чисел

  3. Класс должен отвечать за посимвольный ввод, хранение и редактирование строкового представления комплексных чисел. Значение комплексного нуля - ‘0, i* 0,’. Класс должен обеспечивать:
  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

число: TComplex

выполнитьКомандуКалькулятора(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, используя класс

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

ИнтерфейсКалькулятораКомплексныхЧисел

строкаКомплексноеЧисло: TStaticText

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

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

FormCreate(Sender: TObject)

ButtonClick(Sender: TObject)

FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

наверх

 


назад