|
Yeah, I was saying that C# didn't have an equiv keyword to VB.NET's ReDim.
|
|
|
|
|
Just got back into writing code after 10 years. This is a infix to postfix converter. Can someone please critique this...
thanks
using System;
using System.Collections;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections.Generic;
namespace Infix2Postfix
{
public class Program
{
static void Main(string[] args)
{
#region variable declarations
String stringInfix = "a+b/c-d";
StringBuilder SbPostfix = new StringBuilder();
Stack<char> stackGeneral = new Stack<char>();
Stack<char> stackOperator = new Stack<char>();
char[] tempArray = stringInfix.ToCharArray();
Array.Reverse(tempArray);
Regex regexAlphaNum = new Regex("[a-zA-Z0-9]");
char temp;
#endregion
#region logic
foreach (char ch in tempArray)
stackGeneral.Push(ch);
foreach (char ch in stackGeneral)
{
if (regexAlphaNum.IsMatch(Convert.ToString(ch)))
SbPostfix.Append(ch);
else if (stackOperator.Count == 0)
stackOperator.Push(ch);
else if (stackOperator.Count != 0)
switch (ch)
{
case '+':
temp = stackOperator.Peek();
if (temp == '*' || temp == '/')
{
while (stackOperator.Count > 0)
SbPostfix.Append(stackOperator.Pop());
stackOperator.Push(ch);
}
else
stackOperator.Push(ch);
break;
case '-':
temp = stackOperator.Peek();
if (temp == '*' || temp == '/')
{
while (stackOperator.Count > 0)
SbPostfix.Append(stackOperator.Pop());
stackOperator.Push(ch);
}
else
stackOperator.Push(ch);
break;
case '*':
temp = stackOperator.Peek();
if (temp == '*' || temp == '/')
{
while (stackOperator.Count > 0)
SbPostfix.Append(stackOperator.Pop());
stackOperator.Push(ch);
}
else
stackOperator.Push(ch);
break;
case '/':
temp = stackOperator.Peek();
if (temp == '*' || temp == '/')
{
while (stackOperator.Count > 0)
SbPostfix.Append(stackOperator.Pop());
stackOperator.Push(ch);
}
else
stackOperator.Push(ch);
break;
}
}
while (stackOperator.Count > 0)
SbPostfix.Append(stackOperator.Pop());
#endregion
#region output to screen
Console.WriteLine("Equation in infix notation: {0}", stringInfix);
Console.Write("Equation in postfix/RPN notation: {0}", SbPostfix);
Console.ReadKey();
#endregion
}
}
}
|
|
|
|
|
I don't think you need tempArray.
How does it handle malformed input?
Here's[^] my infix-to-postfix code; there are others on here.
|
|
|
|
|
It only handles inputs in a*b-c/d format. The code is very basic, written in an non elegant way. I will look at your code, it might give me some insights.
|
|
|
|
|
Here I am criticizing it
It's too long and too late at night for me . Now it's joke time :cool
|
|
|
|
|
|
and i.push()
|
|
|
|
|
|
I would fire you on the spot for putting regions in a method and not maintaining consistent capitalization of variables.
|
|
|
|
|
lol...I know exactly which variable name you are referring to.
|
|
|
|
|
Why are regions in a method a bad idea? I ask this risking sounding like a fool.
|
|
|
|
|
Regions are intended to be used in GROUPING methods not splitting one method's body.
[EDIT]
Example:
#region Events//put here all/most of the event(s) handling code
#region Drawing//put here all the drawing methods
#region YouNameIt// put here all the...
[/EDIT]
|
|
|
|
|
Ahh...I understand.
Thanks!
|
|
|
|
|
|
Oh c'mon my friend...your statement helped me more than any other reading I did today
|
|
|
|
|
Ohh, well, in that case, glad that I could help
|
|
|
|
|
That may be only a personal or company standard. One can use regions wherever one darn well wants to.
I generally use them only to group methods and properties, but I may also use seperate files (partial classes) for that purpose if the code becomes large enough.
In my RPN transformer I use regions to mark off less-important code that the reader may not be interested in -- it should at least help with documentation and readability -- I don't want to read through a bunch of error-handling code when I'm trying to get a feel for the process flow of a method.
|
|
|
|
|
Also, if you are using a region in a method, it is a sure sign you should put some of your logic into another method and just call that method from your original method.
|
|
|
|
|
Thank you for your reply and the link!
|
|
|
|
|
You are welcome. FYI, the link is part of my generic signature and was not targeted at you specifically. Still, if you haven't read it yet, it is advisable that you do so.
|
|
|
|
|
Yes, but the additional method calls could become a bottleneck in a tight loop. And the resultant code could be even less readable. You need to examine each case on its own.
|
|
|
|
|
I'd say it's probably unlikely, as the JIT compiler is able to inline function calls. In any event, if it's a tight loop, it seems pretty weird that there would be a region in the code anyway, in which case a method call would also seem unnecessary to break out the logic. And my point was that if you are thinking of making a region in your method, it's probably because your are trying to compress a bunch of code into a smaller block and that is usually better done with a method call.
|
|
|
|
|
Hello,
I have building a download/update file for a C# desktop application in pieces. Now, I am at the following point; the application determines if the new file is required. If so, it forces a download to a local file folder inside the application that is already running (this works perfectly). NOW...how do I shut down the application and run the update and then restart the application, or can it be done without a restart? Can this all be done automatically and without user input? Or perhaps I should place the file in an external folder and force a restart and then force the program to run the file? If so, how is this done? I am confused. Any suggestions would be appreciated. Thank you....Pat
|
|
|
|
|
There are many possible solutions. One of the most elegant is to use a "plug-in" system.
At the other side a real easy way is to create a "SplahScreen" like app that checks for new
updates, installs them and starts the actual app. If no updates found, it just starts the app.
As for actual code especially for the elegant one is just too much to provide.
Google or search inside CP for "program/application updates".
|
|
|
|
|
If you had used ClickOnce the application could already be configured to download and install updates prior to starting. Of course you can do this by hand by using a starter app, like a splash screen, that performs the update.
Another way is to use shadow folders to run the app from and copy the updates to the installed location to be used the next time the app starts. Microsft uses this approach for .net framework assemblies to allow them to be updated while an application may be using them. I know the language. I've read a book. - _Madmatt
|
|
|
|