Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Машина Тьюринга

Ответить
Настройки темы
C/C++ - Машина Тьюринга

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

[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

Код: Выделить весь код
// ---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <cstring>
#include <string>
#include <iostream>
#include "Unit1.h"
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TMemo *Memo1;
TMemo *Memo2;
using namespace std;
// ---------------------------------------------------------------------------
__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

Код: Выделить весь код
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Mask.hpp>
#include <ComCtrls.hpp>
#include <string.h>
#include <cstring>
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------
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;
                // ***********************************
            case 3:
                switch(Read()) {
                case '2':
                    Write('\0');
                    MoveLeft();
                    Write('\0');
                    state = 6;
                    continue;
                case '+':
                    Write('\0');
                    state = 5;
                    MoveLeft();
                    continue;
                case '#':
                    Write('\0');
                    state = 10;
                    continue;
                case '/':
                    Write('\0');
                    state = 4;
                    MoveLeft();
                    continue;
                }

                break;
                // ***********************************
            case 4:
                switch(Read()) {
                case '\0':
                    Write('/');
                    state = 2;
                    continue;
                default:
                    MoveLeft();
                    break;
                }
                break;
                // ***********************************
            case 5:
                switch(Read()) {
                case '\0':
                    Write('+');
                    state = 2;
                    continue;
                default:
                    MoveLeft();
                    break;
                }
                break;
                // ***********************************
            case 6:
                switch(Read()) {
                case '\0':
                    MoveLeft();
                    state = 7;
                    continue;
                default:
                    MoveRight();
                    break;
                }
                break;
                // ***********************************
            case 7:
                switch(Read()) {
                case '9':
                    Write('8');
                    state = 8;
                    continue;

                case '8':
                    Write('7');
                    state = 8;
                    continue;

                case '7':
                    Write('6');
                    state = 8;
                    continue;

                case '6':
                    Write('5');
                    state = 8;
                    continue;

                case '5':
                    Write('4');
                    state = 8;
                    continue;

                case '4':
                    Write('3');
                    state = 8;
                    continue;

                case '3':
                    Write('2');
                    state = 8;
                    continue;

                case '2':
                    Write('1');
                    state = 8;
                    continue;

                case '1':
                    Write('\0');
                    state = 8;
                    MoveLeft();
                    continue;

                case '-':
                    Write('\0');
                    state = 9;
                    MoveLeft();
                    continue;
                }
                break;
                // ***********************************
            case 8:
                switch(Read()) {
                case '\0':
                    Write('/');
                    MoveLeft();
                    Write('/');
                    state = 6;
                    continue;
                default:
                    MoveLeft();
                    break;
                }
                break;
                // ***********************************
            case 9:
                switch(Read()) {
                case '\0':
                    Write('-');
                    state = 2;
                    continue;
                default:
                    MoveLeft();
                    break;
                }
                break;
                // ***********************************
            case 10:
                switch(Read()) {
                case '\0':
                    MoveLeft();
                    Write('\0');
                    MoveLeft();
                    state = 11;
                    continue;
                default:
                    MoveRight();
                    break;
                }
                break;
                // ***********************************
            case 11:
                switch(Read()) {
                case '/':
                    MoveLeft();
                    break;
                case '+':
                    Write('/');
                    MoveRight();
                    state = 12;
                    continue;
                }
                break;
                // ***********************************
            case 12:
                switch(Read()) {
                case '/':
                    MoveRight();
                    break;
                case '-':
                    state = 17;
                    continue;
                case '\0':
                    MoveLeft();
                    Write('\0');
                    MoveLeft();
                    state = 13;
                    continue;
                }
                break;
                // ***********************************
            case 13:
                switch(Read()) {
                case '/':
                    MoveLeft();
                    break;
                case '-':
                    MoveLeft();
                    break;
                case '\0':
                    MoveRight();
                    state = 14;
                    continue;
                }
                break;
                // ***********************************
            case 14:
                switch(Read()) {
                case '/':
                    Write('\0');
                    MoveRight();
                    state = 15;
                    continue;
                case '-':
                    Write('\0');
                    MoveRight();
                    state = 16;
                    continue;
                }
                break;
                // ***********************************
            case 15:
                switch(Read()) {
                case '/':
                    MoveRight();
                    break;
                case '-':
                    MoveRight();
                    break;
                case '\0':
                    MoveLeft();
                    state = 12;
                    continue;
                }
                break;
                // ***********************************
            case 16:
                switch(Read()) {
                case '/':
                    MoveRight();
                    break;

                case '\0':
                    Write('/');
                    state = 0;
                    continue;
                }
                break;
                // ***********************************
            case 17:
                switch(Read()) {
                default:
                    Write('\0');
                    MoveLeft();
                    break;

                case '\0':
                    MoveRight();
                    state = 0;
                    continue;
                }
                break;
            }
        }
    }

Отправлено: 13:05, 18-06-2013

 

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Разобрался!

Еще вопрос

Бралось из исходников на C#, и тут какое-то значение маски:

this.StartConf.Mask = "&&&&&&&&&&+2*0-&&&&&&&&&&";
Для последующего
this.StartConf.Text = "//////////3///////";

Как это преобразовать на C++? Подскажите пожалуйста :wacko

И еще один:

Сейчас программа запускается, но выдает ошибку Violation при нажатии кнопки расчета.
Сделал преобразование из string в UnicodeString, но не пойму что же ему не нравится =\



В коде вот что:

Unit1.h
Код: Выделить весь код
class TuringMachine
{
	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);
		string str(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;
		//AnsiString anstr = str.c_str();

		UnicodeString unstr = str.c_str();
		Memo2->Lines->Add(unstr);
	}
//...
//...
Unit1.cpp

Код: Выделить весь код
TForm1 *Form1;
TMemo *Memo1;
TMemo *Memo2;
using namespace std;
TuringMachine machine("//////////3///////"); //startconf
////////////+2*3-///////
//this.StartConf.Mask = "&&&&&&&&&&+2*0-&&&&&&&&&&";

// ---------------------------------------------------------------------------
__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("- : урезанная разница");
	Memo2->Text="";
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	machine.DecimalToUnary();
	machine.UnaryToDecimal();
	//richTextBox1.Text = machine.tb.Text;
	//Memo2->Text = machine.Read();
}

Отправлено: 14:39, 18-06-2013 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Машина Тьюринга

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - Виртуальная машина Viper Программное обеспечение Windows 11 11-11-2009 19:08
Разное - Виртуальная машина nda24 Microsoft Windows 2000/XP 0 21-03-2008 14:07
Машина времени Arrest О сайте и форуме 1 29-03-2006 03:27
машина будущего Guest Непонятные проблемы с Железом 14 08-10-2003 11:04




 
Переход