daily pastebin goal
59%
SHARE
TWEET

Untitled

a guest Aug 10th, 2018 66 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top