Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2015, 15:54   #1
Konark
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 27
Восклицание Проблема с переносом кода с С++ на С# (Машина Тьюринга)

Добрый день. Прошу помощи знающих людей
Взялся переносить простенький код Машины Тюринга с С++ на С#
Но, столкнулся с некими сложностями.
Например:
  1. Не знаю аналог функции "stoi" в С#.
  2. Столкнулся с такой проблемой (скриншот прикрепил)
Вот код на С++:
Код:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
 
int unconvert(string f){
    int n=0,i=0;
    for (int i = 0; i < f.length(); i++){
        if (f[i] == '1') n++;
    }
    return n;
}
string convert(int num){
    string res;
    while (num--,num >= 0){
        res += '1';
    }
    return res;
}
string convert(string f){
    string s_num, res;
    int num,i= 0;
    while ( i < f.length()) {
        if ((f[i] =='+') || (f[i] == '-')){
            num = stoi(s_num); 
            res += convert(num);
            res+=f[i];
            s_num = "";
            i++;
        }
        s_num += f[i];
        i++;
    }
    num = stoi(s_num); 
    res += convert(num);
    return res;
};
void q1(string &fun, int &i);
void q2(string &fun, int &i);
void q3(string &fun, int &i);
void q4(string &fun, int &i);
void q5(string &fun, int &i);
void q6(string &fun, int &i);
void q7(string &fun, int &i);
void q8(string &fun, int &i);
void q9(string &fun, int &i);
void q10(string &fun, int &i);
int _tmain(int argc, 
           _TCHAR* argv[])
{
    int num,i = 0;
    string fun,f,operation;
    cout<< "Input function: ";
    cin>>f;
    fun = convert(f);
    cout<<fun<<endl;
    q1(fun,i);
    cout<<"Result = "<<fun<<endl<<"Result(10) = "<<unconvert(fun)<<endl;
    system("pause");
 
return 0;
}
 
void q1(string &fun, int &i){
    if (fun[i] == '+'){
        q6(fun,i);
        return;
    }
    else if (fun[i] == '-'){
        q7(fun,i);
        return;
    }
    else if (i >= fun.length()){
        return;
    }
    i++;
    q1(fun,i);
};
void q2(string &fun, int &i){
    i--;
    if (fun[i] == '1') {
        i++;
        q9(fun,i);
        return;
    }
    q2(fun,i);
};
void q3(string &fun, int &i){
    i++;
    if (fun[i] == '1'){
        fun[i] = ' ';
        cout<<fun<<endl;
        q2(fun,i);
        return;
    }
    else if (fun[i] == '+'){
        q6(fun,i);
        return;
    }
    else if (fun[i] == '-'){
        q7(fun,i);
        return;
    }
    else if (i >= fun.length()){
        return;
    }
    q3(fun,i);
};
void q4(string &fun, int &i){
    i--;
    if (fun[i] == '1') {
        fun[i] = ' ';
        cout<<fun<<endl;
        q5(fun,i);
        return;
    }
    q4(fun,i);
};
void q5(string &fun, int &i){
    i++;
    if (fun[i] == '1'){
        fun[i] = ' ';
        cout<<fun<<endl;
        q4(fun,i);
        return;
    }
    else if (fun[i] == '+'){
        q6(fun,i);
        return;
    }
    else if (fun[i] == '-'){
        q7(fun,i);
        return;
    }
    else if (i >= fun.length()){
        return;
    }
    q5(fun,i);
};
void q6(string &fun, int &i){
    fun[i] = ' ';
    i++;
    q10(fun,i);
};
void q7(string &fun, int &i){
    fun[i] = ' ';
    i++;
    q8(fun,i);
};
void q8(string &fun, int &i){
    fun[i] =' ';
    cout<<fun<<endl;
    q4(fun,i);
}
void q9(string &fun, int &i){
    fun[i] = '1';
    cout<<fun<<endl;
    q3(fun,i);
}
void q10(string &fun, int &i){
    fun[i] = ' ';
    cout<<fun<<endl;
    q2(fun,i);
}
Вот мой код на C#:
http://ideone.com/RXd6ah (выкладываю так, так как стоит ограничение на символы)

Буду благодарен за помощь!
Изображения
Тип файла: jpg problem-mash-tur.jpg (40.4 Кб, 83 просмотров)
Konark вне форума Ответить с цитированием
Старый 17.02.2015, 16:15   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

1) Int32.Parse()
2) Строки в C# неизменяемы, вместо строки вам придется передавать массив символов (char[]). Получить его из строки fun можно так:
Код:
char[] c = fun.ToCharArray(); // из строки в массив
string s = new string(c); // обратно из массива в строку
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 19.02.2015, 16:51   #3
DimDimich
Пользователь
 
Регистрация: 10.12.2013
Сообщений: 18
По умолчанию

"Не знаю аналог функции "stoi" в С#."
можна еще Convert.ToInt32("10");

Последний раз редактировалось DimDimich; 19.02.2015 в 17:01.
DimDimich вне форума Ответить с цитированием
Старый 19.02.2015, 17:26   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
можна еще Convert.ToInt32("10");
Догадайтесь, какой метод в итоге будет вызван для перевода строки в число
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Машина Тьюринга, алгоритм Маркова, РАМ-машина Irinabrik Фриланс 10 21.03.2014 13:19
Машина Тьюринга, алгоритм Маркова, РАМ-машина Irinabrik Помощь студентам 4 16.03.2014 22:59
Машина тьюринга!!!!! Лапенко_А Помощь студентам 2 22.05.2012 13:42
Машина Тьюринга и алгоритмы Маркова. Машина Поста. MarkForMath Помощь студентам 0 27.04.2011 21:55