Машина Тьюринга
Добавлено: 18 июн 2013, 11:03
Доброго времени суток.
Есть программа которая реализует на МТ Небольшое вычисление, приведение из унарной в десятичную.
Никак не могу разобраться с ошибками, пожалуйста помогите поисправлять.
Выдает ошибки:
[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
Unit.h
Есть программа которая реализует на МТ Небольшое вычисление, приведение из унарной в десятичную.
Никак не могу разобраться с ошибками, пожалуйста помогите поисправлять.
Выдает ошибки:
[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;
}
// ---------------------------------------------------------------------------
Код: Выделить всё
//...
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;
// ***********************************
...