
- •Курсовая работа
- •На тему: Проектирование и реализация программ в технологии «абстрактных типов данных»
- •Задание
- •Общие требования
- •Тип числа – «Калькулятор простых дробей». Требования.
- •Необходимо предусмотреть следующие варианты использования (прецеденты) калькулятора:
- •Спецификация типа данных «простые дроби».
- •Спецификация типа данных «память».
- •Операции
- •Спецификация типа данных «Процессор».
- •Form1.H
- •InitializeComponent();
- •If (components)
- •Void InitializeComponent(void)
- •Void SetOperation(tOprtn toprtn) {
- •Void SetFunction(tFunc tfunc) {
- •Interface class Operation {
- •Int countOp;
- •Void Run() {
- •Void PrepareMemoryFunction() {
- •Void PostAction() {
- •Void ResetController() {
- •Void set(bool onPrepare) {
- •Void set(bool onOperationClicked) {
- •Поле ввода
- •Управление вычислением
- •Дополнительные возможности
Interface class Operation {
void Make(TProc<T>^%, TMemory<T>^%, T^%, T^%);
};
FunctionOperation.cpp
#pragma once
#include "stdafx.h"
#include "Operation.cpp"
template <class T>
ref class FunctionOperation: public Operation<T> {
public:
virtual void Make(TProc<T>^% processor, TMemory<T>^% memory, T^% resOperand, T^% nullTFrac) {
processor->SetRop(resOperand);
processor->DoFunc();
resOperand = processor->GetLop_Res();
}
};
ArithmeticOperation.cpp
#pragma once
#include "stdafx.h"
#include "Operation.cpp"
template <class T>
ref class ArithmeticOperation: public Operation<T> {
public:
virtual void Make(TProc<T>^% processor, TMemory<T>^% memory, T^% rightOperand, T^% nullTFrac) {
processor->SetLop_Res(memory->getNumber());
processor->SetRop(rightOperand);
processor->DoOprtn();
memory->setFnumber(processor->GetLop_Res());
}
};
Controller.cpp
#pragma once
#include "stdafx.h"
#include "Operation.cpp"
template<class T>
ref class Controller
{
private:
TMemory<T>^ memory;
TProc<T>^ processor;
T^ operand;
T^ stored;
Operation<T>^ operation;
Operation<T>^ oldOperation;
bool onPrepare;
bool onOperationClicked;
Int countOp;
public:
Controller() {
memory = gcnew TMemory<T>();
processor = gcnew TProc<T>();
operand = gcnew T();
stored = gcnew T();
onPrepare = false;
onOperationClicked = false;
countOp = 0;
}
Void Run() {
countOp = 0;
this->operation->Make(processor, memory, operand, stored);
}
void PrepareOperation(T^ value, TOprtn tOprtn) {
if (onOperationClicked && countOp == 0) {
processor->SetLop_Res(memory->read_fNumber());
processor->SetRop(value);
processor->DoOprtn();
value = processor->GetLop_Res();
++countOp;
}
memory->setFnumber(value);
processor->SetOprtn(tOprtn);
}
void PrepareFunction(T^ operand, TFunc tfunc) {
this->operand = operand;
oldOperation = operation;
this->processor->SetFunc(tfunc);
}
Void PrepareMemoryFunction() {
oldOperation = operation;
}
Void PostAction() {
operation = oldOperation;
}
Void ResetController() {
processor->ResetProc();
memory->clearM();
operand = gcnew T();
stored = gcnew T();
onPrepare = true;
onOperationClicked = false;
}
property T^ Operand {
T^ get() {
return operand;
}
void set(T^ operand) {
this->operand = operand;
}
}
property T^ Stored {
T^ get() {
return stored;
}
void set(T^ stored) {
this->stored = stored;
}
}
property Operation<T>^ CurOperation {
Operation<T>^ get() {
return operation;
}
void set(Operation<T>^ operation) {
this->operation = operation;
}
}
property bool OnPrepare {
bool get() {
return onPrepare;
}
Void set(bool onPrepare) {
this->onPrepare = onPrepare;
}
}
property T^ Result {
T^ get() {
return memory->read_fNumber();
}
}
property bool OnOperationClicked {
bool get() {
return onOperationClicked;
}
Void set(bool onOperationClicked) {
this->onOperationClicked = onOperationClicked;
}
}
static System::String^ StdToSys(std::string StdStr) {
return gcnew System::String(StdStr.c_str());
}
static const std::string SysToStd(System::String^ SysStr) {
using namespace Runtime::InteropServices;
char *v = (char*)(Marshal::StringToHGlobalAnsi(SysStr)).ToPointer();
std::string result = std::string(v);
return result;
}
}
Тестовые наборы данных
(Sqr(6\1) + Sqr(2\1))/10\1 + 6\1 = 10\1
5\1 + 2\1 = 7\1
5\1 += 10\1 += 20\1
5\1 += 10\1 = 15\1
Инструкция пользователю:
Главное окно программы содержит поле для ввода операндов и отображения результатов, а также кнопки, необходимые для управления процессом вычислений.