Hjälp med simpel miniräknare i C#

Permalänk
Medlem

Hjälp med simpel miniräknare i C#

Är nybörjare i C# och håller på med en miniräknare som jag har kört fast med.

Just nu kan den enbart räkna ut +|-|*|/ av 2 positiva tal.

Saker som jag behöver hjälp med:

* Man ska kunna använda fler än 2 tal i varje beräkning.
* = ska göra att att svaret visas och att när nästa knapptryck görs så ska textboxen clearas, då jag i nuläget måste använda mig av en "C" knapp varje gång jag ska göra en ny uträkning.
* Man ska kunna använda negativa tal, ex -2 / -1.
* Minnesfunktion: mc = memory clear. m+ = sparar ett värde som i minnet blir negatict. m- = sparar ett värde som i minnet blir negativt. mr = memory read, vilket läser från minnet till displayen.
* Göra så den inte kraschar om man trycker in *, +, -, / i början eller flera ggr i följd.

Tacksam för all hjälp jag kan få, nedanför är koden.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace MiniKalkylatorn { public partial class Form1 : Form { double tal1 = 0; double tal2 = 0; double sum = 0; char räkneSätt; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "1"; } private void button2_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "2"; } private void button3_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "3"; } private void button4_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "4"; } private void button5_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "5"; } private void button6_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "6"; } private void button7_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "7"; } private void button8_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "8"; } private void button9_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "9"; } private void button0_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + "0"; } private void buttonKomma_Click(object sender, EventArgs e) { textBox1.Text = textBox1.Text + ","; } private void buttonPlus_Click(object sender, EventArgs e) { tal1 = double.Parse(textBox1.Text); räkneSätt = '+'; textBox1.Text = ""; } private void buttonMinus_Click(object sender, EventArgs e) { tal1 = double.Parse(textBox1.Text); räkneSätt = '-'; textBox1.Text = ""; } private void buttonGånger_Click(object sender, EventArgs e) { tal1 = double.Parse(textBox1.Text); räkneSätt = '*'; textBox1.Text = ""; } private void buttonDivision_Click(object sender, EventArgs e) { tal1 = double.Parse(textBox1.Text); räkneSätt = '/'; textBox1.Text = ""; } private void buttonSvar_Click(object sender, EventArgs e) { tal2 = double.Parse(textBox1.Text); textBox1.Text = textBox1.Text + "="; switch (räkneSätt) { case '+': sum = tal1 + tal2; break; case '-': sum = tal1 - tal2; break; case '*': sum = tal1 * tal2; break; case '/': sum = tal1 / tal2; break; } textBox1.Text = sum.ToString(); } private void buttonC_Click(object sender, EventArgs e) { textBox1.Text = ""; } } }

Permalänk
Medlem
Skrivet av Filatov:

Är nybörjare i C# och håller på med en miniräknare som jag har kört fast med.

Just nu kan den enbart räkna ut +|-|*|/ av 2 positiva tal.

Saker som jag behöver hjälp med:

* Man ska kunna använda fler än 2 tal i varje beräkning.
* = ska göra att att svaret visas och att när nästa knapptryck görs så ska textboxen clearas, då jag i nuläget måste använda mig av en "C" knapp varje gång jag ska göra en ny uträkning.
* Man ska kunna använda negativa tal, ex -2 / -1.
* Minnesfunktion: mc = memory clear. m+ = sparar ett värde som i minnet blir negatict. m- = sparar ett värde som i minnet blir negativt. mr = memory read, vilket läser från minnet till displayen.
* Göra så den inte kraschar om man trycker in *, +, -, / i början eller flera ggr i följd.

Tacksam för all hjälp jag kan få, nedanför är koden.

Är det en skoluppgift eller bara för att lära dig?

Jag har lite frågor om dina punkter.
Har jag rätt om jag säger om du vill att den ska fungera exakt som kalkylatorn i Windows?

Använd gärna [code]-taggen när du skriver kod i forumet.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Låt användaren skriva i en textbox.
Ta string[] delar = textbox1.text.split("/"); tills du har delat upp i alla tecken.
Konvertera första arrayplatsen till en talvariabel och kolla sedan vilken den andra operatorn är i en switch sats eller dylikt och slutligen konvertera tredje platsen till ett tal. Det du dock vill göra är att ta delat och gånger före plus och minus, så du får gå igenom arrayen först och kolla efter de tecknen. Bara att använda sig av en for slinga

Permalänk
Hedersmedlem

Om du vill göra något häftigare bör du kanske implementera denna: http://sv.wikipedia.org/wiki/J%C3%A4rnv%C3%A4gsalgoritmen

Permalänk
Medlem
Skrivet av Elgot:

Om du vill göra något häftigare bör du kanske implementera denna: http://sv.wikipedia.org/wiki/J%C3%A4rnv%C3%A4gsalgoritmen

Det finns enklare sätt att räkna ut infixnotation i C#, om man inte vill koda algoritmen/är lat/inte har något krav på extrem hastighet.

public static double Evaluate(string expression) { return (double)new System.Xml.XPath.XPathDocument (new StringReader("<r/>")).CreateNavigator().Evaluate (string.Format("number({0})", new System.Text.RegularExpressions.Regex(@([\+\-\*])) .Replace(expression, " ${1} ") .Replace("/", " div ") .Replace("%", " mod "))); }

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?