Перенос кода с С++ на С# (Машина Тюринга) - C#
Формулировка задачи:
Добрый день. Прошу помощи знающих людей
Взялся переносить простенький код Машины Тюринга с С++ на С#
Но, столкнулся с некими сложностями.
Например:
Вот код мой на С#:
Буду благодарен за помощь!
- Не знаю аналог функции "stoi" в С#.
- Столкнулся с такой проблемой (скриншот прикрепил)
#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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д