GtHoo Skrevet 20. september 2012 Del Skrevet 20. september 2012 Hei. Jeg prøver å lage en funskjon som som kan minus, gange og plusse. Det jeg tenkte var å få det til i samme line. Jeg har gjort det på måten under, og da må jeg ha det på 3 linjer. svar = tall1 - tall2; svar = tall1 * tall2; svar = tall1 + tall2; Jeg tenkte noe mer som dette, men vet ikke helt hvordan jeg skal få det til. string pluss = "+"; svar = tall1 pluss tall2; Kan noen hjelpe meg med å komme fram til det jeg prøver å oppnå? Lenke til kommentar
SkoMedHull Skrevet 20. september 2012 Del Skrevet 20. september 2012 (endret) Noe sånt? http://pastebin.com/ZCiwtrwQ Endret 20. september 2012 av SkoMedHull Lenke til kommentar
GtHoo Skrevet 20. september 2012 Forfatter Del Skrevet 20. september 2012 Jeg kan bruke den måte, men tenkte mer på å få det til å skje i en linje, men en form for variabel eller noe annet som kan brukes til endre hva den skal "gjøre". kan prøve med en eksempelkode. Den koden vil selvfølgelig ikke fungere. string tegn = "+"; svar = num1 tegn num 2; I den koden som jeg har over tenkte jeg at den skal ta num1 + num2. Hvis "tegn = "-";" så skal den gjøre "num1 - num2". Lenke til kommentar
Gitarplekter_ Skrevet 20. september 2012 Del Skrevet 20. september 2012 Jeg kan bruke den måte, men tenkte mer på å få det til å skje i en linje, men en form for variabel eller noe annet som kan brukes til endre hva den skal "gjøre". kan prøve med en eksempelkode. Den koden vil selvfølgelig ikke fungere. string tegn = "+"; svar = num1 tegn num 2; I den koden som jeg har over tenkte jeg at den skal ta num1 + num2. Hvis "tegn = "-";" så skal den gjøre "num1 - num2". Hei, veit ikke om jeg helt forstå spørsmålet ditt. Du kan skrive : var svar4 = 52.4m + 88; Eller hvis du vil ha en method som kan lese ett regnestykke fra en string kan du jo lage en extension method på string. eks: class Program { static void Main(string[] args) { var svar1 = "54+22".RegnUt(); var svar2 = "155- 25,5".RegnUt(); var svar3 = "12 * 12".RegnUt(); Console.WriteLine(svar1); Console.WriteLine(svar2); Console.WriteLine(svar3); Console.ReadLine(); } } public static class MyExtensions { public static string RegnUt(this string regneStykke) { regneStykke = regneStykke.Replace(" ", ""); string tall1 = ""; bool tall1Lest = false; string tall2 = ""; if (regneStykke.Contains("+")) { foreach (var item in regneStykke.ToCharArray()) { if (item == '+') { tall1Lest = true; continue; } if (!tall1Lest) tall1 += item.ToString(); else tall2 += item.ToString(); } return (decimal.Parse(tall1) + decimal.Parse(tall2)).ToString(); } if (regneStykke.Contains("-")) { foreach (var item in regneStykke.ToCharArray()) { if (item == ('-')) { tall1Lest = true; continue; } if (!tall1Lest) tall1 += item.ToString(); else tall2 += item.ToString(); } return (decimal.Parse(tall1) - decimal.Parse(tall2)).ToString(); } if (regneStykke.Contains("*")) { foreach (var item in regneStykke.ToCharArray()) { if (item == ('*')) { tall1Lest = true; continue; } if (!tall1Lest) tall1 += item.ToString(); else tall2 += item.ToString(); } return (decimal.Parse(tall1) * decimal.Parse(tall2)).ToString(); } return "???"; } } eller som en vanlig method. var svar = RegnUt("51+46"); static string RegnUt(string regneStykke) { //samme implementering som over } Lenke til kommentar
GtHoo Skrevet 20. september 2012 Forfatter Del Skrevet 20. september 2012 (endret) Takk for svar Gitarplekter_ Jeg tror jeg like gjerne kan poste koden. http://pastebin.com/FNXAcVnn Det er det at jeg har fått en skoleoppgave å lage en kalkulator, og nå har oppgaven blitt å gjøre regne delen med funksjon istede for if, else if, else. Funskjonen skal også gjøres på en kortest mulig måte som også er fornuftig. Som dere sikkert har skjønt er jeg ganske ny til programmering, så det er bare å spørre hvis dere mangler informasjon. Edit; Kalkulatoren er en Windows form application. Jeg har ikke lagt ut koden for den visuelle delen. Endret 20. september 2012 av GtHoo Lenke til kommentar
Gitarplekter_ Skrevet 20. september 2012 Del Skrevet 20. september 2012 Takk for svar Gitarplekter_ Jeg tror jeg like gjerne kan poste koden. http://pastebin.com/FNXAcVnn Det er det at jeg har fått en skoleoppgave å lage en kalkulator, og nå har oppgaven blitt å gjøre regne delen med funksjon istede for if, else if, else. Funskjonen skal også gjøres på en kortest mulig måte som også er fornuftig. Som dere sikkert har skjønt er jeg ganske ny til programmering, så det er bare å spørre hvis dere mangler informasjon. Edit; Kalkulatoren er en Windows form application. Jeg har ikke lagt ut koden for den visuelle delen. Ok, hvis du legger inn overnevnte extension method så trenger du egentlig bare så mye kode: Da reduserer du kraftig mye kode og du gjør jo utregningen på en method. extension methoden kan du også legge i en klasse for seg sjøl og kan brukes i samme namespace. public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button_Click(object sender, EventArgs e) { Button btn = (Button)sender; if (btn.Text == "=") { var svar = textBox1.Text.RegnUt(); textBox1.Text = "= " + svar; return; } textBox1.Text += btn.Text; } } Forutsett at du har har satt teksten til alle knappene til 1,2,3,+,-,= osv.. og alle click events rettet til samme eventhandler. Lenke til kommentar
GeirGrusom Skrevet 20. september 2012 Del Skrevet 20. september 2012 System.Linq.Expressions Lenke til kommentar
GeirGrusom Skrevet 21. september 2012 Del Skrevet 21. september 2012 (endret) Regular expressions komplett eksempel: using System; using System.Numerics; using System.Text.RegularExpressions; namespace TestConsole { class Program { private static readonly Regex operationRegex = new Regex(@"^\s*(?<OperandA>[0-9]+)\s*(?<Operator>[*/+-])\s*(?<OperandB>[0-9]+)\s*$", RegexOptions.Compiled); /// <summary> Calculates the result of a string with two operators, using +, -, * or / as operator.</summary> public static BigInteger Calculate(string input) { if (input == null) throw new ArgumentNullException("input"); var match = operationRegex.Match(input); if (!match.Success) throw new ArgumentException("Input was not in a correct format.", "input"); var a = BigInteger.Parse(match.Groups["OperandA"].Value); var b = BigInteger.Parse(match.Groups["OperandB"].Value); string op = match.Groups["Operator"].Value; switch (op) { case "+": return a + b; case "-": return a - b; case "*": return a * b; case "/": if (b == BigInteger.Zero) throw new DivideByZeroException(); return a / b; default: throw new InvalidOperationException(string.Format("Operator {0} not supported. There is probably a mismatch between the regular expression used and the functional specification for this method.", op)); } } static void Main(string[] args) { string expression = Console.ReadLine(); try { BigInteger result = Calculate(expression); Console.WriteLine(result.ToString()); } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); } } } Endret 21. september 2012 av GeirGrusom Lenke til kommentar
GtHoo Skrevet 22. september 2012 Forfatter Del Skrevet 22. september 2012 Takker for svar. Driver å leser og prøver meg litt fram med måten Lenke til kommentar
Hayer Skrevet 15. november 2012 Del Skrevet 15. november 2012 Ville valgt en annen fremgangs måte enn det jeg fikk med meg fra de første postene. TL;DR@resten Først dele alle delene opp i stykker; 4 + 4 * (5 + 5) Blir til, i prioritert rekke følge [0] : (5 + 5) [1] : 4 * [0] [2] : 4 + [1] Da kan du bare bruke "RegnUt" som noen introduserte lengre oppe for å gå nedover tréet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå