Last active
November 7, 2015 18:21
-
-
Save RobertPaulson90/22aaa3209f8554d797d8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// nu med c# stack | |
using System; | |
using System.Collections; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
namespace Reverse_Polish_Notation | |
{ | |
internal class Program | |
{ | |
// Alt er meget nemmere at visualiserer hvis du samtidigt kigger på opgavens billede | |
private static void Main(string[] args) | |
{ | |
string newYork = "(A+B)/(C-D)"; | |
string california = ""; | |
Stack texasStack = new Stack(); | |
texasStack.Push("@"); | |
for (int i = 0; i < newYork.Length; i++) //hovedløkken der gentager sig for hvert char i newYork | |
{ | |
char newYorkTemp = newYork[i]; //det char der kommer til switch | |
if (char.IsLetterOrDigit(newYorkTemp)) //tjek om switch char er et bogstav/tal eller ej | |
{ | |
california += newYork[i]; //alle bogstaver/tal er nemme - de skal bare direkte til californien, ellers skal CheckOperator bruges til at finde de 5 forskellige muligheder der er. | |
} | |
else // Her er de 5 muligheder: | |
{ | |
if (CheckOperator(newYorkTemp, Convert.ToChar(texasStack.Peek())) == 1) // 1: Nemt, din char skal bare lægges til texas | |
{ | |
texasStack.Push(newYorkTemp); | |
} | |
else if (CheckOperator(newYorkTemp, Convert.ToChar(texasStack.Peek())) == 2) // 2: Lidt tricky, din seneste char i Texas skal fjernes fra texas og lægges til californien | |
{ | |
california += Convert.ToString(texasStack.Pop()); | |
i--; | |
} | |
else if (CheckOperator(newYorkTemp, Convert.ToChar(texasStack.Peek())) == 3) // 3: Både newYorkTemp (altså den char i switchen), og det seneste Texas char skal forsvinde | |
{ | |
texasStack.Pop(); | |
// man behøver ikke "fjerne" newYorkTemp da den alligevel forsvinder næste gang vores hovedløkke køre | |
} | |
else if (CheckOperator(newYorkTemp, Convert.ToChar(texasStack.Peek())) == 4) // 4: Færdigt! | |
{ | |
Console.WriteLine("The Reverse Polish Notation of your input is: {0}", california); | |
} | |
else if (CheckOperator(newYorkTemp, Convert.ToChar(texasStack.Peek())) == 5) // 5: Selvsigende at noget gik galt. | |
{ | |
Console.WriteLine("An error has occurred. The original formula was not correctly balanced."); | |
} | |
} | |
} | |
//spejlvende det færdige stack/texas og lægge det til den nu færdige sætning(california) | |
for (int i = texasStack.Count; i > 1; i--) | |
{ | |
california += texasStack.Pop().ToString(); | |
} | |
Console.WriteLine("The Reverse Polish Notation of your input is: {0}", california); | |
Console.ReadLine(); | |
} | |
// Her er CheckOperator metoden, der ved hjælp af texasTemp og newYorkTemp, kan afgøre hvad der skal ske i switchen. | |
// Den returnere enten 1,2,3,4 eller 5 | |
public static int CheckOperator(char texasTemp, char newYorkTemp) | |
{ | |
int[,] instruction = | |
{ | |
{4,1,1,1,1,1,5}, | |
{2,2,2,1,1,1,2}, | |
{2,2,2,1,1,1,2}, | |
{2,2,2,2,2,1,2}, | |
{2,2,2,2,2,1,2}, | |
{5,1,1,1,1,1,3}, | |
}; | |
int x = 0; // 7 hen, new york | |
int y = 0; // 6 ned, texas | |
//new york char | |
if (texasTemp == '@') | |
{ x = 0; } | |
else if (texasTemp == '+') | |
{ x = 1; } | |
else if (texasTemp == '-') | |
{ x = 2; } | |
else if (texasTemp == '*') | |
{ x = 3; } | |
else if (texasTemp == '/') | |
{ x = 4; } | |
else if (texasTemp == '(') | |
{ x = 5; } | |
else if (texasTemp == ')') | |
{ x = 6; } | |
// texas char | |
if (newYorkTemp == '@') | |
{ y = 0; } | |
else if (newYorkTemp == '+') | |
{ y = 1; } | |
else if (newYorkTemp == '-') | |
{ y = 2; } | |
else if (newYorkTemp == '*') | |
{ y = 3; } | |
else if (newYorkTemp == '/') | |
{ y = 4; } | |
else if (newYorkTemp == '(') | |
{ y = 5; } | |
int checkOperatorReturn = instruction[y, x]; | |
return checkOperatorReturn; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment