Страница 1 из 1

Машина Тьюринга

Добавлено: 18 июн 2013, 11:03
mego4ell
Доброго времени суток.
Есть программа которая реализует на МТ Небольшое вычисление, приведение из унарной в десятичную.

Никак не могу разобраться с ошибками, пожалуйста помогите поисправлять.

Выдает ошибки:

[BCC32 Error] Unit1.h(54): E2285 Could not find a match for 'string::basic_string(const string&)'
Full parser context
Unit1.cpp(7): #include Unit1.h
Unit1.h(31): class TuringMachine
Unit1.h(564): decision to instantiate: void TuringMachine::WriteLog()
--- Resetting parser context for instantiation...
Unit1.h(53): parsing: void TuringMachine::WriteLog()
[BCC32 Error] Unit1.h(65): E2451 Undefined symbol 'Memo2'
Full parser context
Unit1.cpp(7): #include Unit1.h
Unit1.h(31): class TuringMachine
Unit1.h(564): decision to instantiate: void TuringMachine::WriteLog()
--- Resetting parser context for instantiation...
Unit1.h(53): parsing: void TuringMachine::WriteLog()
[BCC32 Error] Unit1.cpp(29): E2285 Could not find a match for 'TuringMachine::TuringMachine()'
Full parser context
Unit1.cpp(16): parsing: _fastcall TForm1::TForm1(TComponent *)
[BCC32 Error] Unit1.cpp(39): E2451 Undefined symbol 'StartConf'
Full parser context
Unit1.cpp(37): parsing: void _fastcall TForm1::Button1Click(TObject *)

Код таков:

Unit.cpp

Код: Выделить всё

//...
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
	Memo1->Lines->Clear();
	Memo1->Lines->Add("1..9 : десятичные цифры");
	Memo1->Lines->Add("/ : унарная цифра");
	Memo1->Lines->Add("+ : сложение");
	Memo1->Lines->Add("^ : местонахождение головки");
	Memo1->Lines->Add("* : умножение");
	Memo1->Lines->Add("- : урезанная разница");

	// TuringMachine * machine = new TuringMachine();
	//AnsiString s = ;
	//string str = AnsiString(s.c_str());

	TuringMachine machine;


	//TuringMachine("//////////3///////"); //StartConf
}

// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	if (machine == null)
		machine = new TuringMachine(StartConf.Text);
	machine.DecimalToUnary();
	machine.UnaryToDecimal();
	//richTextBox1.Text = machine.tb.Text;
}
// ---------------------------------------------------------------------------
Unit.h

Код: Выделить всё

//...
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TLabel *Label1;
	TEdit *Edit1;
	TMemo *Memo1;
	TMemo *Memo2;
	TButton *Button1;
	void __fastcall Button1Click(TObject *Sender);
private:	// User declarations
public:		// User declarations
	__fastcall TForm1(TComponent* Owner);
};
// ---------------------------------------------------------------------------
class TuringMachine : public TForm
{
	short state; // состояние q
	char * tape; // = new char[512] длина ленты
	int pointer; // головка, или указатель позиции на ленте

	public:
	TuringMachine(string _configuration)
	{
		tape = new char[512]; // выделяем память, задаем начальную конфигурацию
		pointer = 250; //256
		for (short i = 0; i < _configuration.length(); i++)
		{
			// собираем начальную конфигурацию(опускаем пробелы)
			if (_configuration[i] != 32)
				tape[pointer++] = _configuration[i];
		}
		//переводим обратно в нач состояние, после сборки
		pointer = 250;
		// tb = new RichTextBox(); -- Memo2
	}

	void WriteLog()
	{
		string str = new string('_',2);
		for (int i = 220; i < 330; i++)
			if (tape[i] != '\0')
			{
				if (i == pointer)
					str += (char)94; // записываем ^
				str += tape[i];
			}
		str += "__\n";
		// tb.Text += str;
		//Memo2->Text += str;
		Memo2->Lines->Add(str);
	}

	// инверсное движение - имитируем движение ленты, а не головки
	void MoveLeft(){pointer++; WriteLog();}
	void MoveRight(){pointer--; WriteLog();}

	char Read() {return tape[pointer];}

	void Write(char _inp) {
		tape[pointer] = _inp;
		WriteLog();
	}

	void DecimalToUnary() {
		state = 1; // q1 разрешение на выполнение
		while (state != 0) {
			switch(state) {
			case 1:
				switch(Read()) {
				default:
					MoveLeft();
					break;
				case '\0':
					Write('#');
					state = 2;
					continue; // окончание итерации произойдет вместе со сменой режима
				}
				break;
				// ***********************************
			case 2:
				switch(Read()) {
				default:
					MoveRight();
					break;
				case '\0':
					MoveLeft();
					state = 3;
					continue;
				}
				break;
				// ***********************************
...