Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kurs_STP_13.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
70.43 Кб
Скачать

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

Инструкция пользователю:

Главное окно программы содержит поле для ввода операндов и отображения результатов, а также кнопки, необходимые для управления процессом вычислений.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]