Advertisement
Fishker59

Untitled

Feb 25th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.35 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace MT
  8. {
  9. class Program
  10. {
  11. static string input(char[] alphabet)
  12. {
  13. int i = 0;
  14. bool k = false;
  15. string st = "";
  16.  
  17. do
  18. {
  19.  
  20. do
  21. {
  22.  
  23. st = Console.ReadLine();
  24. if ((st.Length != 1) | (st == " "))
  25. Console.WriteLine("Ошибка.Повторите ввод.");
  26. } while ((st.Length!=1)|(st==" "));
  27.  
  28. for (i = 0; i < alphabet.Length; i++)
  29. if (st.IndexOf(alphabet[i]) > -1)
  30. {
  31. k = true;
  32. break;
  33. }
  34. else
  35. k = false;
  36. if (!k)
  37. {
  38. Console.WriteLine("Введённый Вами символ не принадлежит алфавиту!");
  39. Console.WriteLine("Пожалуйста, замените этот символ!");
  40. }
  41. } while (!k);
  42. return st;
  43. }
  44. static string input(char[] alphabet, int sw)
  45. {
  46. bool l = false, k = false;
  47. int i = 0;
  48. bool result;
  49. string new1 = input(alphabet) + " ";
  50. do
  51. {
  52. do
  53. {
  54. Console.WriteLine("Ввести ещё один символ? 1(да)/2(нет)");
  55. result = Int32.TryParse(Console.ReadLine(), out sw);
  56. if (result == false)
  57. Console.WriteLine("Ошибка. Повторите ввод");
  58.  
  59. } while (result != true);
  60. switch (sw)
  61. {
  62. case 1:
  63. {
  64. Console.WriteLine("Введите символ");
  65. char st = Convert.ToChar(input(alphabet));
  66. char[] dop = new char[new1.Length];
  67. dop = new1.ToCharArray(0, new1.Length);
  68. for (i = 0; i < dop.Length; i++)
  69. if (st == dop[i])
  70. {
  71.  
  72. do
  73. {
  74. Console.WriteLine("Введены одинаковые символы! Замените символ!");
  75. st = Convert.ToChar(input(alphabet));
  76. } while (st == dop[i]);
  77. }
  78. new1 += st + " ";
  79. break;
  80. }
  81. case 2:
  82. {
  83. l = true;
  84. break;
  85. }
  86. default:
  87. {
  88. Console.WriteLine("Такого пункта нет в условии.Повторите ввод");
  89. l = false;
  90. break;
  91. }
  92. }
  93. } while (!l);
  94. char[] dop1 = new1.ToCharArray(0, new1.Length);
  95. k = false;
  96. for (i = 0; i < new1.Length; i++)
  97. if (dop1[i] == 'E')
  98. k = true;
  99. if (!k)
  100. {
  101. Console.WriteLine("Вы забыли ввести символ, отвечающий за пустоту - Е.");
  102. Console.WriteLine("Добавьте этот символ!");
  103. Console.WriteLine("Введите символ");
  104. char st = Convert.ToChar(input(alphabet));
  105. char[] dop = new char[new1.Length];
  106. dop = new1.ToCharArray(0, new1.Length);
  107. for (i = 0; i < dop.Length; i++)
  108. if (st == dop[i])
  109. {
  110.  
  111. do
  112. {
  113. Console.WriteLine("Введены одинаковые символы! Замените символ!");
  114. st = Convert.ToChar(input(alphabet));
  115. } while (st == dop[i]);
  116. }
  117. new1 += st + " ";
  118. }
  119. return new1;
  120. }
  121. static void print2(string new1, int sost,out string[,] table1)
  122. {
  123. new1 = new1.Trim(' ');
  124. string[] simv = new1.Split(' ');
  125. int i = 0, j = 0, t = 0, p = 0;
  126. string[,] table = new string[simv.Length + 1, sost + 1];
  127. for (i = 1; i <= simv.Length; i++)
  128. table[i, 0] = simv[i - 1];
  129. for (j = 1; j <= sost; j++)
  130. table[0, j] = " q" + j;
  131. bool K = false;
  132. string head = "", c = "";
  133. for (t = 0; t < (sost-1); t++)
  134. {
  135. Console.WriteLine("Работаем с " + (t + 1) + " состоянием:");
  136. for (p = 0; p < simv.Length; p++)
  137. {
  138. Console.WriteLine("Работаем с ячейкой, расположенной на пересечении состояния q" + (t + 1) + " и символа " + simv[p]);
  139. Console.WriteLine("На какой символ заменить?");
  140. do
  141. {
  142. K = false;
  143. Console.WriteLine("Пожалуйста, введите символ");
  144. c = Console.ReadLine();
  145. for (i = 0; i < simv.Length; i++)
  146. if (simv[i] == c)
  147. {
  148. K = true;
  149. break;
  150. }
  151. if (!K)
  152. {
  153. Console.WriteLine("Можно заменять только на символы, используемые для решения данной задачи!");
  154. Console.WriteLine("Введите другой символ!");
  155. }
  156. } while (!K);
  157.  
  158. int newsost = 0;
  159. do
  160. {
  161. K = true;
  162. bool result;
  163. do
  164. {
  165. Console.WriteLine("В какое состояние перейти? (укажите номер)");
  166. result = Int32.TryParse(Console.ReadLine(), out newsost);
  167. if (result == false)
  168. Console.WriteLine("Ошибка. Повторите ввод");
  169. } while (result != true);
  170. if ((newsost <= 0) || (newsost > sost))
  171. {
  172. Console.WriteLine("Невозможно перейти в сотояние, номер которого больше, чем общее количество состояний!");
  173. K = false;
  174. }
  175.  
  176. } while (!K);
  177. do
  178. {
  179. Console.WriteLine("Куда сдвигается головка? (Введите R - вправо, L - влево, S - на месте)");
  180. head = Console.ReadLine();
  181. K = true;
  182. if ((head != "R") && (head != "L") && (head != "S"))
  183. {
  184. Console.WriteLine("Пожалуйста, укажите корректно, куда сдвигается головка!(Введите R - вправо, L - влево, S - на месте)");
  185. K = false;
  186. }
  187. } while (!K);
  188. table[p + 1, t + 1] = c + Convert.ToString(newsost) + head;
  189. }
  190.  
  191.  
  192. }
  193. table1 = table;
  194. for (i = 0; i < simv.Length + 1; i++)
  195. {
  196. for (j = 0; j < sost + 1; j++)
  197. Console.Write("{0,4} ",table[i, j]);
  198. Console.WriteLine();
  199. }
  200.  
  201.  
  202. }
  203. static void Main(string[] args)
  204. {
  205. string[,] table1 = new string[1000, 1000];
  206. bool result = false;
  207. string s = "abcdefghijklmnopqrstuvwxyz1234567890E";//E - пустота
  208. char[] alphabet = new char[s.Length];
  209. alphabet = s.ToCharArray(0, s.Length);
  210. int sw = 0;
  211. int sost;
  212. Console.WriteLine("Пожалуйста,введите первый символ алфавита, используемый в Вашей задаче");
  213. string new1 = input(alphabet, sw);
  214. Console.WriteLine("В задаче используются символы: " + new1);
  215.  
  216. do
  217. {
  218. Console.WriteLine("Пожалуйста, введите количество состояний, необходимое для Вашей задачи");
  219. result = Int32.TryParse(Console.ReadLine(), out sost);
  220. if (result == false)
  221. Console.WriteLine("Ошибка. Повторите ввод");
  222. if (sost<=0)
  223. {
  224. result = false;
  225. Console.WriteLine("Ошибка. Повторите ввод");
  226. }
  227. } while ((result != true));
  228.  
  229. do
  230. {
  231. Console.WriteLine("Конечное состояние входит во введённое вами количество состояний? 1(нет)/2(да)");
  232. result = Int32.TryParse(Console.ReadLine(), out sw);
  233. if (result == false)
  234. Console.WriteLine("Ошибка. Повторите ввод");
  235. if ((sw > 2) || (sw <= 0)) result = false;
  236. } while ((result != true));
  237. switch (sw)
  238. {
  239. case 1:
  240. {
  241. Console.WriteLine("Конечное состояние не входит во введённое количество");
  242. //нет
  243. print2(new1, ++sost, out table1);
  244. break;
  245. }
  246. case 2:
  247. {
  248. Console.WriteLine("Конечное состояние входит во введённое количество");
  249. //да
  250. print2(new1, sost, out table1);
  251. break;
  252. }
  253.  
  254.  
  255. }
  256.  
  257. //тут закончился ручной ввод.
  258. //ввод ленты
  259. string lenta = "";
  260. int i;
  261. int F;
  262. int j;
  263. bool ok = false;
  264. bool oks = false;
  265. char[] c;
  266. do
  267. {
  268. Console.WriteLine("Введите ленту для работы с программой");
  269. lenta = Console.ReadLine();
  270. c = lenta.ToCharArray();
  271. ok = true;
  272. oks = false;
  273. if (lenta.Length <= 17)
  274. {
  275. for (i = 0; i < lenta.Length; i++)
  276. {
  277.  
  278. for (j = 0; j < new1.Length; j++)
  279. {
  280.  
  281. if (lenta[i] == new1[j]) //чекаем на совпадение в алфавите
  282. oks = true;
  283. else
  284. if (lenta[i] == ' ')
  285. {
  286. oks = true;
  287. c[i] = 'E';
  288. }
  289.  
  290. }
  291. if (oks == false)
  292. {
  293. ok = false;
  294. Console.WriteLine("Обнаружен недопустимый символ - {0}.Повторите ввод", lenta[i]);
  295. }
  296. oks = false;
  297. }
  298. }
  299. else
  300. {
  301. Console.WriteLine("Строка слишком большая.Программа рассчитана на работу с лентами длинны от -8 до 8");
  302. ok = false;
  303. }
  304. } while (ok != true);
  305. Console.WriteLine("Лента синтаксически верна");
  306. for (i = 0; i < lenta.Length; i++)
  307. {
  308. Console.Write(c[i]);
  309. Console.Write(" ");
  310. }
  311. Console.WriteLine();
  312. do
  313. {
  314. Console.WriteLine("Пожалуйста,введите номер с которого необходимо поместить вашу ленту");
  315. result = Int32.TryParse(Console.ReadLine(), out F);
  316. if (result == false)
  317. Console.WriteLine("Ошибка. Повторите ввод");
  318. else
  319. if (Math.Abs(F) > 8)
  320. {
  321. Console.WriteLine("Введите другой номер. Программа защищена от зацикливания на 8 символе.");
  322. result = false;
  323. }
  324. else
  325. if ((F + lenta.Length) >9)
  326. {
  327. Console.WriteLine("Невозможно поместить ленту. Повторите ввод.");
  328. result = false;
  329. }
  330. } while ((result != true));
  331. char[] roll = new char[17];
  332. j = 0;
  333. for (i = 0; i < 17; i++)
  334. roll[i] = 'E';
  335. for (i = F + 8; i < (F + 8 + lenta.Length); i++)
  336. roll[i] = lenta[j++];
  337. for (i = 0; i < 17; i++)
  338. {
  339. if (roll[i] == ' ')
  340. roll[i] = 'E';// roll- массив с ячейками в ленте 0 символ - это -8;
  341.  
  342. }
  343. Console.WriteLine("Лента имеет следующий вид:");
  344. for (i = 0; i < 17; i++)
  345. Console.Write("{0,3}", i - 8);
  346. Console.WriteLine();
  347. for (i = 0; i < 17; i++)
  348. Console.Write("{0,3}", roll[i]);
  349. Console.WriteLine();
  350.  
  351. int car = 0;
  352. do
  353. {
  354. Console.WriteLine("Введите положение каретки. Программа будет автоматически запущена после ввода.");
  355. result = Int32.TryParse(Console.ReadLine(), out car);
  356. if (result == false)
  357. Console.WriteLine("Ошибка. Повторите ввод");
  358. else
  359. if (Math.Abs(car) > 8)
  360. {
  361. Console.WriteLine("Невозможно поставить каретку в этой позиции");
  362. result = false;
  363. } //car- положение каретки
  364.  
  365. } while ((result != true));
  366. char[] rollcar = new char[17];
  367. for (i = 0; i < 17; i++)
  368. rollcar[i] = ' ';
  369. car += 8;
  370. rollcar[car] = '#';
  371. Console.WriteLine("Программа запущена:");
  372. for (i = 0; i < 17; i++)
  373. Console.Write("{0,3}", i - 8);
  374. Console.WriteLine();
  375. for (i = 0; i < 17; i++)
  376. Console.Write("{0,3}", roll[i]);
  377. Console.WriteLine();
  378. for (i = 0; i < 17; i++)
  379. Console.Write("{0,3}", rollcar[i]);
  380. Console.WriteLine();
  381. char currsost;
  382. int currstr;
  383. int currcol;
  384. char currsymbol;
  385. string ActionTur = "";
  386. string checksost = " ";
  387. currsost = '1';
  388. currstr = 1;
  389. currcol = 1;
  390. j = 0;
  391.  
  392. string cancel_str = "q" + sost;
  393. while ((checksost!=cancel_str) & (Math.Abs(car) < 16))
  394. {
  395. int prob = 0;
  396. currsymbol = roll[car];
  397. ActionTur = null;
  398. Console.WriteLine("Начальный символ {0}", currsymbol);
  399. j = 0;
  400. for (i = 0; i < new1.Length; i++)
  401. {
  402. j++;
  403. if (new1[i] == ' ')
  404. {
  405. j--;
  406. }
  407. if (currsymbol == new1[i])
  408. {
  409. currstr = j;
  410. }
  411. }
  412. Console.WriteLine("В таблице правил в {0} строке", currstr);
  413. checksost = "q" + currsost;
  414. Console.WriteLine("Текущее состояние - {0}", checksost);
  415.  
  416. //}
  417.  
  418. currcol = Convert.ToInt32(currsost) - 48;
  419.  
  420. Console.WriteLine("В таблице правил в {0} столбце ", currcol);
  421. //
  422. try
  423. {
  424. Console.WriteLine("Необходимо применить правило {0}", table1[currstr, currcol]);
  425. ActionTur = table1[currstr, currcol];
  426. roll[car] = ActionTur[0];
  427. currsost = ActionTur[1];
  428. if (ActionTur[2] == 'R')
  429. car++;
  430. if (ActionTur[2] == 'L')
  431. car--;
  432. for (i = 0; i < 17; i++)
  433. rollcar[i] = ' ';
  434. rollcar[car] = '#';
  435. for (i = 0; i < 17; i++)
  436. Console.Write("{0,3}", i - 8);
  437. Console.WriteLine();
  438. for (i = 0; i < 17; i++)
  439. Console.Write("{0,3}", roll[i]);
  440. Console.WriteLine();
  441. for (i = 0; i < 17; i++)
  442. Console.Write("{0,3}", rollcar[i]);
  443. Console.WriteLine();
  444. if ((Math.Abs(car) >= 16))
  445.  
  446. {
  447. Console.WriteLine("Невозможно перетащить каретку");
  448. Console.WriteLine("Программа завершена");
  449. }
  450. } catch(NullReferenceException)
  451. {
  452. checksost = cancel_str;
  453. Console.WriteLine("которое завершает программу");
  454. Console.WriteLine("Программа звершена");
  455. }
  456. }
  457. Console.ReadKey();
  458. }
  459. }
  460. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement