Advertisement
Guest User

Untitled

a guest
Aug 10th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.10 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. using System.Collections;
  7.  
  8. namespace balancing
  9. {
  10. class Program
  11. {
  12. public static int caunter = 0;
  13. public static int rightElements = 0;
  14. static void Main(string[] args)
  15. {
  16. SortedList elemK = new SortedList();
  17. SortedList right = new SortedList();
  18. int[] number = new int[50];
  19. int[] koeff = new int[50];
  20. string tempstring;
  21. char plus = '+', equal = '=', star = '*';
  22. List<List<int>> Mas = new List<List<int>>();
  23. List<int> row = new List<int>();
  24. Fourth:
  25. int j, temp, tempEq = 0, koef = 1, colomns = 0;
  26. bool k;
  27. Console.Clear();
  28. Console.WriteLine("Введите уравнение.\n\nВсе формулы должны быть введены в нормальном виде (например CaSO4*0.5H2O) и не должны содержать больше 1 пары круглых и 1 пары квадратных скобок, а так же одного символа «*». Вещества разделяются знаками «+» или «=». Допустимо любое число пробелов.");
  29. string eq = Console.ReadLine();
  30. eq = eq.Replace(" ", string.Empty);
  31. for (int i = 0; i < eq.Length; i++)
  32. {
  33. if (eq[i].ToString() == equal.ToString())
  34. tempEq++;
  35. }
  36. if (tempEq > 1)
  37. {
  38. Console.WriteLine("Введено два знака равно. Перепроверьте уравнение и нажмите Enter для повторого ввода.\n");
  39. ConsoleKeyInfo clr = Console.ReadKey();
  40. goto Fourth;
  41. }
  42.  
  43. for (int i = 0; i < eq.Length; i++)
  44. {
  45. Third:
  46. bool y = Int32.TryParse(eq[i].ToString(), out koeff[i]);
  47. //KOEFF___________________________________________________________________________________________________________
  48. if (y && i + 1 < eq.Length && caunter == 0)
  49. {
  50. for (j = i + 1; j < eq.Length; j++)
  51. {
  52. y = Int32.TryParse(eq[j].ToString(), out koeff[j]);
  53. if (y == false)
  54. goto First;
  55. }
  56.  
  57. First:
  58. koef = koeff[i];
  59. for (int g = i + 1; g < j; g++)
  60. {
  61. koef = Int32.Parse(koef.ToString() + koeff[g].ToString());
  62. }
  63. caunter++;
  64. }
  65.  
  66. //ELEMENTS________________________________________________________________________________________________
  67.  
  68. else if (System.Char.IsUpper(eq[i]) == true)
  69. {
  70.  
  71. if (i + 1 < eq.Length)
  72. {
  73. bool l = Int32.TryParse(eq[i + 1].ToString(), out number[i]);
  74.  
  75. //TWO LETTERS__________________________________________________________________________________________________
  76. if (System.Char.IsLower(eq[i + 1]) == true)
  77. {
  78. Console.WriteLine("Two letters.");
  79. tempstring = eq[i].ToString() + eq[i + 1].ToString();
  80. if (i + 2 < eq.Length && Int32.TryParse(eq[i + 2].ToString(), out number[i]) == true)
  81. {
  82. for (j = i + 3; j < eq.Length; j++)
  83. {
  84. k = Int32.TryParse(eq[j].ToString(), out number[j - 2]);
  85. if (k == false)
  86. goto Second;
  87. }
  88.  
  89. Second:
  90. temp = number[i];
  91. for (int g = i + 3; g < j; g++)
  92. {
  93. temp = Int32.Parse(temp.ToString() + number[g - 2].ToString());
  94. }
  95. if (elemK.ContainsKey(eq[i].ToString() + eq[i + 1].ToString()) == false)
  96. {
  97. if (caunter > 0)
  98. {
  99. if (rightElements > 0)
  100. {
  101. right.Add(eq[i].ToString() + eq[i + 1].ToString(), koef * temp);
  102. }
  103. else
  104. {
  105. elemK.Add(eq[i].ToString() + eq[i + 1].ToString(), koef * temp);
  106. }
  107.  
  108. }
  109. else if (rightElements > 0)
  110. right.Add(eq[i].ToString() + eq[i + 1].ToString(), temp);
  111. else
  112. elemK.Add(eq[i].ToString() + eq[i + 1].ToString(), temp);
  113. }
  114. else
  115.  
  116.  
  117. Console.WriteLine("caunter: {0}, koeff: {1}", caunter, koef);
  118. }
  119. else
  120. {
  121. if (caunter > 0)
  122. {
  123. if (rightElements > 0)
  124. {
  125. Console.WriteLine("add to the right");
  126. right.Add(eq[i].ToString() + eq[i + 1].ToString(), koef);
  127. }
  128. else
  129. {
  130. elemK.Add(eq[i].ToString() + eq[i + 1].ToString(), koef);
  131. }
  132.  
  133. }
  134. else if (rightElements > 0)
  135. right.Add(eq[i].ToString() + eq[i + 1].ToString(), 1);
  136. else
  137. elemK.Add(eq[i].ToString() + eq[i + 1].ToString(), 1);
  138.  
  139. Console.WriteLine("caunter: {0}, koeff: {1}", caunter, koef);
  140. }
  141. }
  142.  
  143. //ONE LETTERS AND KOEFF_____________________________________________________________________________________
  144. else if (l)
  145. {
  146. Console.WriteLine("One letter + koeff - {0}.", eq[i]);
  147. for (j = i + 2; j < eq.Length; j++)
  148. {
  149. l = Int32.TryParse(eq[j].ToString(), out number[j - 1]);
  150. if (l == false)
  151. goto Second;
  152. }
  153.  
  154. Second:
  155. temp = number[i];
  156. for (int g = i + 2; g < j; g++)
  157. {
  158. temp = Int32.Parse(temp.ToString() + number[g - 1].ToString());
  159. }
  160.  
  161. if (caunter > 0)
  162. {
  163. if (rightElements > 0)
  164. {
  165. Console.WriteLine("add to the right");
  166. right.Add(eq[i].ToString(), koef * temp);
  167. }
  168. else
  169. {
  170. Console.WriteLine("add to the left");
  171. elemK.Add(eq[i].ToString(), koef * temp);
  172. }
  173.  
  174. }
  175. else if (rightElements > 0)
  176. right.Add(eq[i].ToString(), temp);
  177. else
  178. {
  179. Console.WriteLine("add to the left");
  180. elemK.Add(eq[i].ToString(), temp);
  181. }
  182. }
  183.  
  184. //ONE LETTER_________________________________________________________________________________________________
  185. else
  186. {
  187. Console.WriteLine("One letter - {0}.", eq[i]);
  188. if (caunter > 0)
  189. {
  190. if (rightElements > 0)
  191. {
  192. Console.WriteLine("add to the right");
  193. right.Add(eq[i].ToString(), koef);
  194. }
  195. else
  196. {
  197. Console.WriteLine("add to the left");
  198. elemK.Add(eq[i].ToString(), koef);
  199. }
  200.  
  201. }
  202. else if (rightElements > 0)
  203. right.Add(eq[i].ToString(), 1);
  204. else
  205. {
  206.  
  207. Console.WriteLine("add to the left");
  208. elemK.Add(eq[i].ToString(), 1);
  209. }
  210.  
  211. Console.WriteLine("caunter: {0}, koeff: {1}", caunter, koef);
  212. }
  213. }
  214. }
  215.  
  216. //SIGNS_________________________________________________________________________________________________
  217. else if (eq[i].ToString() == plus.ToString() || eq[i].ToString() == star.ToString())
  218. {
  219. colomns++;
  220. ++i;
  221. caunter--;
  222. goto Third;
  223. }
  224. else if (eq[i].ToString() == equal.ToString())
  225. {
  226. colomns++;
  227. ++rightElements;
  228. ++i;
  229. caunter--;
  230. goto Third;
  231. }
  232. }
  233.  
  234.  
  235. for (int u = 0; u < elemK.Count; u++)
  236. {
  237. Console.WriteLine("\t{0}:\t{1}", elemK.GetKey(u), elemK.GetByIndex(u));
  238. }
  239.  
  240. for (int u = 0; u < right.Count; u++)
  241. {
  242. Console.WriteLine("the right side");
  243. Console.WriteLine("\t{0}:\t{1}", right.GetKey(u), right.GetByIndex(u));
  244. }
  245.  
  246. }
  247. }
  248. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement