Перенос кода с С++ на С# (Машина Тюринга) - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Прошу помощи знающих людей Взялся переносить простенький код Машины Тюринга с С++ на С# Но, столкнулся с некими сложностями. Например:
  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);
}
Вот код мой на С#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication35
{
    class Program
    {
        static void Main(string[] args)
        {
            int num, i = 0;
            string fun, operation;
            Console.WriteLine("Input function: ");
            string f = Console.ReadLine();
            fun = convert(f);
            Console.WriteLine(fun);
            q1(ref fun, ref i);
            Console.WriteLine("Resulte = " + fun);
            Console.WriteLine("Resulte(10) = " + unconverte(fun));
        }
        int unconvert(string f)
        {
            int n = 0,i=0;
            for (i = 0; i < f.Length; i++)
            {
                if (f[i] == '1') n++;
            }
            return n;
        }
        string convert(int num){
    string res=null;
    while (num >= 0){
        res+='1';
        num--;
    }
    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(ref string fun, ref int i){
    if (fun[i] == '+'){
        q6(ref fun, ref i);
        return;
    }
    else if (fun[i] == '-'){
        q7(ref fun, ref i);
        return;
    }
    else if (i >= fun.Length){
        return;
    }
    i++;
    q1(ref fun, ref i);
}
void q2(ref string fun, ref int i){
    i--;
    if (fun[i] == '1') {
        i++;
        q9(ref fun, ref i);
        return;
    }
    q2(ref fun, ref i);
}
void q3(ref string fun, ref int i){
    i++;
    if (fun[i] == '1'){
        fun[i] = ' ';
        Console.WriteLine(fun);
        q2(ref fun, ref i);
        return;
    }
    else if (fun[i] == '+'){
        q6(ref fun, ref i);
        return;
    }
    else if (fun[i] == '-'){
        q7(ref fun, ref i);
        return;
    }
    else if (i >= fun.Length){
        return;
    }
    q3(ref fun, ref i);
}
void q4(ref string fun, ref int i){
    i--;
    if (fun[i] == '1') {
        fun[i] = ' ';
        Console.WriteLine(fun);
        q5(ref fun, ref i);
        return;
    }
    q4(ref fun, ref i);
}
void q5(ref string fun, ref int i){
    i++;
    if (fun[i] == '1'){
        fun[i] = ' ';
        Console.WriteLine(fun);
        q4(ref fun, ref i);
        return;
    }
    else if (fun[i] == '+'){
        q6(ref fun, ref i);
        return;
    }
    else if (fun[i] == '-'){
        q7(ref fun, ref i);
        return;
    }
    else if (i >= fun.Length){
        return;
    }
    q5(ref fun, ref i);
}
void q6(ref string fun, ref int i){
    fun[i] = ' ';
    i++;
    q10(ref fun, ref i);
}
void q7(ref string fun, ref int i){
    fun[i] = ' ';
    i++;
    q8(ref fun, ref i);
}
void q8(ref string fun, ref int i){
    fun[i] =' ';
    Console.WriteLine(fun);
    q4(ref fun, ref i);
}
void q9(ref string fun, ref int i){
    fun[i] = '1';
    Console.WriteLine(fun);
    q3(ref fun, ref i);
}
void q10(ref string fun, ref int i){
    fun[i] = ' ';
    Console.WriteLine(fun);
    q2(ref fun, ref i);
}
    }
}
Буду благодарен за помощь!

Решение задачи: «Перенос кода с С++ на С# (Машина Тюринга)»

textual
Листинг программы
var symbols = fun.ToCharArray();
if(fun[i]=='1')
   symbols[i]=' ';
fun = new string(symbols);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы