Default90 Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 Hallo, Leute Bin neu hier und hab noch wenig Erfahrung im Programmieren. Ich benutze Microsoft Visual Studio und wollte in C# einen Standard- Taschenrechner programmieren. Bis jetzt bin ich so weit das man Zahlen eintippen und wieder löschen kann. Aber wie bring ich dem Ding bei das er addieren, subtrahieren, multiplizieren und dividieren soll? Ich hoffe ihr könnt mir helfen. Wär voll toll. Gruß "der Neue" PS: Ich muss ihn bis Freitag fertig haben, wär also schön wenn ihr schnell antwortet. Aber keinen Stress wegen mir machen:) . Zitieren
n0va_ Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 hm also zu Beginn solltest du erstmal die variablen deklarieren.. Z.B. float fZahl1; float fZahl2; flot fGesamt; char cRechenart; void main (void) { cout << "Bitte wählen Sie eine Rechenart (+,-,/,*) \n"; cin >> cRechenart; cout << "Bitte geben SIe eine Zahl ein: \n"; cin >> fZahl1; cout << "Bitte geben SIe eine zweite Zahl ein: \n"; cin >> fZahl2; switch (cRechenart) { case '+': { fGesamt = fZahl1 + fZahl2; cout << "Das Ergebnis lautet: " << fGesamt; } case '-': { fGesamt = fZahl1 - fZahl2; } } } so oder so ähnlich musste das funktionieren! Zitieren
Default90 Geschrieben 19. Oktober 2006 Autor Geschrieben 19. Oktober 2006 Hallo Nova, danke für die Antwort, aber bei meinem Rechner sollen die Zahlen über Buttons eingegeben werden, die dann in einer Textbox erscheinen soll. Die Rechenzeichen werden ebenfalls über Buttons eingegeben werden.Das Ergebnis soll auch dort angezeigt werden. Kannst du mir da auch helfen? Wär echt net:). PS: Nutze Microsoft Visual Studio 2005. Zitieren
bigredeyes Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 du musst hlat hinter jeden button eine funktion legen. bei + z.b. public class calc{ TextBox box; double zwischenerg = 0; //beispiel addieren private void Add(double zahl){ zwischenerg+=zahl; box.Text = zwischenerg; } //beispiel minus private void minus(double zahl){ zwischerg-=zahl; box.Text = zwischenerg; } ...... } so in der art... alten inhalt der textbox merken, neuen inhalt der textBox merken, button welcher gedrückt worde durchrechenen, in die textbox schreiben und wieder von vorne. bigredeyes Zitieren
Default90 Geschrieben 19. Oktober 2006 Autor Geschrieben 19. Oktober 2006 Hallo Bigredeyes, danke für die Antwort, aber wenn ich das so eingebe zeigt er folgende Fehler an: Fehler 1 Invalid expression term 'private' Fehler 2 ; expected Fehler 3 Keyword 'void' cannot be used in this context Fehler 4 Expected ; or ( cannot spezify constructor arguments in declaration) Zitieren
n0va_ Geschrieben 22. Oktober 2006 Geschrieben 22. Oktober 2006 Hallo Bigredeyes, danke für die Antwort, aber wenn ich das so eingebe zeigt er folgende Fehler an: Fehler 1 Invalid expression term 'private' Fehler 2 ; expected Fehler 3 Keyword 'void' cannot be used in this context Fehler 4 Expected ; or ( cannot spezify constructor arguments in declaration) *g* Fehler genau lesen ))) DU hast ";" am Ende der Zeile vergessen! Zitieren
Default90 Geschrieben 23. Oktober 2006 Autor Geschrieben 23. Oktober 2006 Danke für die Tipps. Hab den Taschenrechner erfolgreich programmiert:) . Zitieren
Default90 Geschrieben 24. Oktober 2006 Autor Geschrieben 24. Oktober 2006 Sorry, das ich ich hier ein Doppelposting mach, hab aber noch ne kleine Frage. wie gibt man ein das der Rechner keine zwei Kommas in einer Zahl zulässt? :confused: Zitieren
bigredeyes Geschrieben 24. Oktober 2006 Geschrieben 24. Oktober 2006 deine stichwörter bei goolge heißen "textbox validating". heute empfiehlt der chef: http://www.codeproject.com/cs/miscctrl/validatingtextbox.asp bigredeyes p.s. codeproject ist eh immer ein klick wert... Zitieren
Default90 Geschrieben 25. Oktober 2006 Autor Geschrieben 25. Oktober 2006 :confused: :confused: :confused: Und wie hilft mir das?:confused: :confused: :confused: Zitieren
fuxi Geschrieben 12. Februar 2008 Geschrieben 12. Februar 2008 Hallo, ich habe diesen TR programmiert wo die Grundfkt fkt(+ - * /) Jetzt möchte Vorzeichenregeln hinzufügen weiß nur nicht wie ...das habe ich bereits... BITTE UM SCHNELLE ANT...DANKE!!!! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace taschenrechnerneu { public partial class Form1 : Form { double zahl; double zahl1; double zahl2; double verfahren; double zahl3; double wert; double wert1; public Form1() { InitializeComponent(); } private void plus_Click(object sender, EventArgs e) { zahl1 = zahl; verfahren = 1; } private void minus_Click(object sender, EventArgs e) { zahl1 = zahl; verfahren = 2; } private void mal_Click(object sender, EventArgs e) { zahl1 = zahl; verfahren = 3; } private void dividieren_Click(object sender, EventArgs e) { zahl1 = zahl; verfahren = 4; } private void box_TextChanged(object sender, EventArgs e) { zahl = Convert.ToDouble(box.Text); } private void ergebnis_Click(object sender, EventArgs e) { zahl2 = zahl; zahl3 = zahl; //plus if (verfahren == 1) { zahl = zahl1 + zahl2; } //minus if (verfahren == 2) { zahl = zahl1 - zahl2; } //mal if (verfahren == 3) { zahl = zahl1 * zahl2; } //durch if (verfahren == 4) { zahl = zahl1 / zahl2; } box.Text = Convert.ToString(zahl); } private void Form1_Load(object sender, EventArgs e) { } private void picture_Click(object sender, EventArgs e) { } private void klammerr_Click(object sender, EventArgs e) { wert = 1; } } } Zitieren
Gertbert Geschrieben 12. Februar 2008 Geschrieben 12. Februar 2008 Hallo, ich bin ganz neu in C# und wollte mich mal ins Formular-Programmieren einarbeiten. Die 9 Buttons, die Textbox, die Rechenzeichen und den "C-Button" hab ich erstellt. Doch wie und wo binde ich nun folgenden Ansatz ein? Und wie lese ich einen Text aus der Box und wie schreibe ich einen hinein? du musst hlat hinter jeden button eine funktion legen. bei + z.b. public class calc{ TextBox box; double zwischenerg = 0; //beispiel addieren private void Add(double zahl){ zwischenerg+=zahl; box.Text = zwischenerg; } //beispiel minus private void minus(double zahl){ zwischerg-=zahl; box.Text = zwischenerg; } ...... } so in der art... alten inhalt der textbox merken, neuen inhalt der textBox merken, button welcher gedrückt worde durchrechenen, in die textbox schreiben und wieder von vorne. bigredeyes mfG Zitieren
Pazi91 Geschrieben 14. Februar 2008 Geschrieben 14. Februar 2008 Hallo ich würde ein label erstellen label.visible = false; label.text = "0"; //beispiel add public void add(){ label.text = Convert.ToInt32(label.text) + Conver.ToInt32(box.text); box.text = label.text; } mfg Zitieren
IWI Geschrieben 27. Juni 2008 Geschrieben 27. Juni 2008 hallo! so...bin relativ unerfahren, was das programmieren angeht. jetzt hab ich von meinem lehrer eine aufgabe bekommen, die für mich nicht ganz einfach ist. daher wollte ich hier mal um hilfe und rat fragen. achso, habe nicht extra einen neuen thread aufgemacht, weil ja das thema hierzu passt. hoffe, dass ich dennoch genügend hilfe bekomme. also...ich muss auch eine art taschenrechner programmieren, der lediglich +,-,*,/ und die klammersetzung (klammer vor punkt und strich) kann, jedoch soll ich die zahlen und operationen nicht selbstständig eingeben, sondern das programm soll die formel/rechnung selbstständig aus einer datei lesen und korrekt berechnen. wie mache ich das?? ich tu mir da wirklich verdammt schwer! einen taschenrechner mit den einfachen grundrechenregeln würde ich wohl schon noch hinbekommen, aber dass er das selbstständig liest und interpretiert?!? ich hab echt keine ahnung... wäre euch sooo dankbar für eine hilfestellung! gruß iwi Zitieren
Klotzkopp Geschrieben 27. Juni 2008 Geschrieben 27. Juni 2008 einen taschenrechner mit den einfachen grundrechenregeln würde ich wohl schon noch hinbekommen, aber dass er das selbstständig liest und interpretiert?!? Die Vorgehensweise ist doch dieselbe. Ob du nun das Zeichen aus einer Datei liest oder aus einem Button, den der Anwender drückt, ist doch egal. Zitieren
TDM Geschrieben 27. Juni 2008 Geschrieben 27. Juni 2008 Zahl lesen, operator lesen, Zahl lesen, Rechenart nach operator bestimmen, ausrechnen. Wo ist das Problem? Zitieren
IWI Geschrieben 27. Juni 2008 Geschrieben 27. Juni 2008 oh mein gott...sorry jungs, manchmal bin ich echt zu deumm zum sch*****. ziemlich ordentlichen denkfehler gemacht...naja, ich meld mich wieder wenn ich ein "richtiges" problem habe. gruß Zitieren
Faustenator Geschrieben 30. Juni 2008 Geschrieben 30. Juni 2008 Wo ist das Problem? Er schrieb auch was von Klammerung... Das ist nicht ganz so trivial wie der Rest hier Zitieren
IWI Geschrieben 30. Juni 2008 Geschrieben 30. Juni 2008 hi! so...bisher bin ich noch gar nicht dazu gekommen, mich weiter mit der aufgabe zu beschäftigen, da mir sonst noch genügend aufgaben um die ohren geworfen werden. aber faustenator hat glaub recht... Er schrieb auch was von Klammerung... Das ist nicht ganz so trivial wie der Rest hier beim interpretieren der formel, wie bekomme ich es hin, dass zunächst alles in den klammern berechnet wird, dann die multiplikation und division und dann erst addition und subtraktion. addition und subtraktion der teilergebnisse dürfte ja kein problem sein, aber wie komme ich zunächst auf die korrekte ausführungsreihenfolge. ich kann ja nicht einfach die ersten zwei zahlen addieren (wenn zwischen ihnen ein "+" steht), wenn danach ne klammer oder ein "*" zeichen kommt?! müsste man erst einmal die formel einlesen, alles multiplizieren oder dividieren, wo halt ein "*" oder "/" steht und danach nochmal die formel einlesen und die zwischenergebnisse dann halt addieren bzw subtrahieren oder wie stellt man das am besten an?? dazu kommt ja noch die sache mit den klammern. klar, beim taschenrechner selber ist das prinzip ja nicht anders, wenn man eine rechnung mit verschiedenen operationen hat, dennoch weiß ich nicht, wie man es hinbekommt, einen taschenrechner mit korrekter auswertungsreihenfolge zu schreiben. ich hab mal als ich mich noch bisschen informiert hatte etwas von einem parser gelesen. der ja anscheinend mein problem lösen könnte, oder? könnt ihr mir vielleicht mehr dazu sagen?!? bitte habt rücksicht, wie gesagt...programmieranfänger. :hells: gruß Zitieren
Faustenator Geschrieben 30. Juni 2008 Geschrieben 30. Juni 2008 Das Thema ist bei mir schon einige Zeit her, daher gibts von mir nur mal den Hinweis, das Dir bei dem Aufgabenteil mit der Klammerung Stacks weiterhelfen können. (das ist zumindest ein klassischer Ansatz) http://de.wikipedia.org/wiki/Stapelspeicher#Verarbeitung_von_Klammerstrukturen" data-cite="\"http://de.wikipedia.org/wiki/Stapelspeicher#Verarbeitung_von_Klammerstrukturen"> Verarbeitung von Klammerstrukturen Stapelspeicher eignen sich auch zur Auswertung von Klammerausdrücken, wie sie etwa in der Mathematik geläufig sind. Dabei wird zunächst für Operatoren und Operanden je ein Stapelspeicher initialisiert. Der zu verarbeitende Klammerausdruck wird nun symbolweise eingelesen. Wird eine öffnende Klammer eingelesen, so ist diese zu ignorieren. Wird ein Operand oder Operator eingelesen, so ist dieser auf den jeweiligen Stapelspeicher zu legen. Wird eine schließende Klammer eingelesen, so wird der oberste Operator vom Stapelspeicher für die Operatoren genommen und entsprechend diesem Operator eine geeignete Anzahl von Operanden, die zur Durchführung der Operation benötigt werden. Das Ergebnis wird dann wieder auf dem Stapelspeicher für Operanden abgelegt. Sobald der Stapelspeicher für die Operatoren leer ist, befindet sich im Stapelspeicher für die Operanden das Ergebnis. (Zwischenfrage an die, die ein wenig aufpassen: Welches Problem tritt auf, wenn man es so umsetzt, wie oben beschrieben??) Eine bessere Hilfe wäre wahrscheinlich jedes Buch über Algorithmik, aber vielleicht hast Du sowas ja zufällig zur Hand... Zitieren
SoL_Psycho Geschrieben 1. Juli 2008 Geschrieben 1. Juli 2008 Hmm... Ich kenn das mit den Klammern als einfachste Variante mit Rekursion... Das bedeutet, dass sich der Parser selbst mit einem neuen Übergabewert neu aufruft. Der Übergabewert wäre dann der Inhalt der Klammer, sobald dieser berechnet ist, springt der Parser zurück und die Klammer ist gelöst, daher kann er "einfach" weiter rechnen... Keinen Anspruch auf Richtigkeit Zitieren
TDM Geschrieben 1. Juli 2008 Geschrieben 1. Juli 2008 Er schrieb auch was von Klammerung... Das ist nicht ganz so trivial wie der Rest hier Substring von erster Index von '(' + 1 bis letzter Index von ')' (rekursion bei Schachtellung) Dann hast du den Term, der in den Klammern steht und schon gehts. Zitieren
Faustenator Geschrieben 1. Juli 2008 Geschrieben 1. Juli 2008 Substring von erster Index von '(' + 1 bis letzter Index von ')' (rekursion bei Schachtellung) Dann hast du den Term, der in den Klammern steht und schon gehts. Aber für sowas (a+ * (c-d) würde Deine Beschreibung nicht reichen.... .oO(a+*(c-d läßt sich nicht so leicht rechnen, wenn man die erste und die letzte Klammer entfernt hat) Zitieren
TDM Geschrieben 1. Juli 2008 Geschrieben 1. Juli 2008 Ja ok, mehrere klammern hab ich jetzt nicht beachtet. Dann inkrementierst du halt für jede geöffnete Klammer einen Zähler und für jede geschlossene dekrementierst du den. Bei 0 haste die letzte Klammer für den Term. Zitieren
Fidayn Geschrieben 7. Oktober 2008 Geschrieben 7. Oktober 2008 Das wäre mein Konsolen-Rechner, vielleicht hilft er dir, er fängt auch texteingaben ab. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleCalculator { class Program { public static void Main() { while (true) { Console.WriteLine("\n\nErste Zahl:\n"); String zahl1 = Convert.ToString(Console.ReadLine()); if (zahl1 == "exit") break; zahl1 = LeerSchlägeEntfernen(zahl1); if (EnthaeltBuchstaben(zahl1)) { Console.WriteLine("\n\nOperator:"); String zeichen = Console.ReadLine(); if (zeichen == "exit") break; zeichen = LeerSchlägeEntfernen(zeichen); if (OperatorPruefen(zeichen)) { Console.WriteLine("\n\nZweite Zahl:\n"); String zahl2 = Convert.ToString(Console.ReadLine()); if (zahl2 == "exit") break; zahl2 = LeerSchlägeEntfernen(zahl2); if (EnthaeltBuchstaben(zahl2)) { string additionsOperator = " + "; switch (zeichen) { case "+": Console.WriteLine(zahl1 + additionsOperator + zahl2 + " = " + (Convert.ToDouble(zahl1) + Convert.ToDouble(zahl2))); break; case "-": Console.WriteLine(zahl1 + " - " + zahl2 + " = " + (Convert.ToDouble(zahl1) - Convert.ToDouble(zahl2))); break; case "/": Console.WriteLine(zahl1 + " / " + zahl2 + " = " + (Convert.ToDouble(zahl1) / Convert.ToDouble(zahl2))); break; case "*": Console.WriteLine(zahl1 + " * " + zahl2 + " = " + (Convert.ToDouble(zahl1) * Convert.ToDouble(zahl2))); break; default: break; } } } } } } public static string LeerSchlägeEntfernen(String zahl1) { String ausgabe = ""; for (int i = 0; i < zahl1.Length; i++) { if (zahl1.Substring(i, 1) != " ") { ausgabe = ausgabe + zahl1.Substring(i, 1); } } return ausgabe; } public static bool EnthaeltBuchstaben(String zahl1) { string test = ""; for (int i = 0; i < zahl1.Length; i++) switch (zahl1.Substring(i, 1)) { case "1": test = test + zahl1.Substring(i, 1); break; case "2": test = test + zahl1.Substring(i, 1); break; case "3": test = test + zahl1.Substring(i, 1); break; case "4": test = test + zahl1.Substring(i, 1); break; case "5": test = test + zahl1.Substring(i, 1); break; case "6": test = test + zahl1.Substring(i, 1); break; case "7": test = test + zahl1.Substring(i, 1); break; case "8": test = test + zahl1.Substring(i, 1); break; case "9": test = test + zahl1.Substring(i, 1); break; case "0": test = test + zahl1.Substring(i, 1); break; default: Console.WriteLine("\nBitte nur Zahlen verwenden\n"); return false; } return true; } public static bool OperatorPruefen(String zeichen) { string halter = ""; for (int j = 0; j < zeichen.Length; j++) switch (zeichen.Substring(j, 1)) { case "/": halter = halter + zeichen.Substring(j, 1); break; case "*": halter = halter + zeichen.Substring(j, 1); break; case "+": halter = halter + zeichen.Substring(j, 1); break; case "-": halter = halter + zeichen.Substring(j, 1); break; default: Console.WriteLine("\nUngültiger Operator\n"); return false; } return true; } } } void SetToTen(out int number) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.