Herki Geschrieben 15. Februar 2009 Teilen Geschrieben 15. Februar 2009 (bearbeitet) Guten Abend Das ist mein erster Beitrag in diesem Forum und ich bräuchte gleich mal Eure Hilfe. Ich hoffe einfach mal, dass das das richtige Forum ist. Da ich Student bin und im Moment Semesterferien habe, hab ich mir gedacht, dass ich meine Zeit damit verbringe mich ein bisschen mit c# (und somit auch der OOP) zu beschäftigen. In meinem Übungsprojekt möchte ich einen Taschenrechner programmieren. Der Taschenrechner besteht aus einer Windowsform. Diese hat eine Textbox zur Eingabe der Aufgabe und eine Textbox zur Ausgabe. Sowie einen Button zum Losrechnen. Der Taschenrechner soll dabei folgenden Merkmale aufweisen: Eingabe des Zahlensystems mittels einem Präfix(0b, 0o, 0x oder keins (=dezimal)) vor dem Zahlenwert dann soll der Operator kommen und dann die zweite Variable (mit optionalem Präfix). Wenn das Ergebnis nicht im dezimalsystem ausgegeben werden soll dann soll dies der Benutzer durch einen Doppelpunkt und einem nachfolgenden 0b, 0o, 0x oder nichts (=dezimal) dem Taschenrechner sagen. Wenn keine zweite Variable eingegeben und stattdessen der ":" & Zahlensystem eingegeben worden ist dann soll der Taschenrechner die erste Zahl nur in das andere Zahlensystem umwandeln. Wenn das ganze funktioniert dann soll er später auch noch komplex rechnen können. Dachte mir, dass ich dann die komplexe Zahl durch ekige Klammern kennzeichnen kann (z.B.: [3+4i]) Wie würdet Ihr an so eine Aufgabe herangehen? Ich hab mit OOP noch nicht soviel Erfahrung. Bringt mir die OOP hier was? Würde mich über Vorschläge zur Herangehensweise sehr freuen. VG Herki Bearbeitet 15. Februar 2009 von Herki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper_19 Geschrieben 6. März 2009 Teilen Geschrieben 6. März 2009 also ich denke es ist nicht die beste methode um in die Objektorientierung einzusteigen, zumal du ja bei so einem Taschenrechner nicht so viele Klassen hast. Allerdings kannst du hier gut das MVC Konzept Anwenden (Model-View-Control). Da gehts darum Design und Verarbeitung zu trennen. du hast also eine Klasse die für das Anzeigen der verschiedenen Steuerelemente zuständig ist (Textbox etc.) und eine die die eigentliche Rechnung übernimmt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LordHexa Geschrieben 7. März 2009 Teilen Geschrieben 7. März 2009 Wozu einen Einsteiger mit für den Fall unnötigem Fachgesimpel abschrecken?! Einen Taschenrechner zu programmieren und dabei auf - in dem Fall unsinnige Dinge zu verweisen - schreckt doch eher ab! En Einsteiger der mit Konzepten anfängt, hat nach ner Woche keinen Bock mehr...ich bin gegen Entmutigung und eher für sach- und fachgerechte Fragestellungen. Das ist weder eine Kritik an den Ot noch an Jasper, aber hier fehlen einfach die Basics. (Punkt) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AndiE Geschrieben 7. März 2009 Teilen Geschrieben 7. März 2009 Hallo Herki, Ein Taschenrechner, mit einer Funktion, wie du sie beschreibst sollte dein Fernziel sein. Ich würde diesen Weg vorschlagen: Dein 1. Ziel sollte so sein: Eine Windows-Form, die bei Maus-Klick auf das Fenster ausgeführt wird. Zwei Operanden(Textfelder) und die Operation(Radio-Button) werden eingestellt. Bei Druck auf den "OK"-Button wird in die Ansicht das Ergebnis gezeichnet. 2. Ziel=1. Erweiterung Zusätzlich können mehrere Zahlensysteme eingestellt werden 3. Ziel =2. Erweiterung Umwandlung der Form zur Eingabe der Aufgabe mit einem Operandin ein Textfeld. Umstellung der Ansicht auf eine FormView. Ein zweites Textfeld zeigt das Ergebnis. Ein Button "Losrechnen" Aufgabenlösung mit einer Parser-Klasse. 4. Ziel=3. Erweiterung Umwandlung des Parsers für Aufgaben mt mehreren Operanden mit der typischen Leserichtung von links nach rechts. 5. Ziel =4. Erweiterung Umstellung des Parsers auf Punkt-vor-Strichrechnung 6. Ziel =5. Erweiterung Umstellung des Parsers auf Zahlensysteme Fernziel=6. Erweiterung Hinzufügen komplexer Zahlen als eigen entwickelte Datenstruktur Nach meiner Erfahrung solltest du früh anfangen, dir klarzumachen und vorzustellen, wie die Programme funktionieren und aufgebaut sind, und wie die beteiligten Objekte erzeugt und zerstört werden. Dazu hilft und unterstützt dich die UML. Du lernst Kapselung, Vererbung und Nachrichten kennen, wesentliche Bestandteile der OOP. Günstiger zum Lernen wäre es vielleicht, eine Adressverwaltung o.ä. zu programmieren. Aber das kann ja das nächste Projekt sein. Vielleicht konnte ich helfen. LG Andre' Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herki Geschrieben 10. März 2009 Autor Teilen Geschrieben 10. März 2009 Hallo alle miteinander. Sorry. War einige Zeit nicht online. Hallo andiE Dein 1. Ziel sollte so sein: Eine Windows-Form, die bei Maus-Klick auf das Fenster ausgeführt wird. Zwei Operanden(Textfelder) und die Operation(Radio-Button) werden eingestellt. Bei Druck auf den "OK"-Button wird in die Ansicht das Ergebnis gezeichnet. -> Erledigt. Ich habe allerdings nur keine Radio-Buttons zur Auswahl der gewünschten Operation sondern eine Funktion, welche den Operator erkennt. 2. Ziel=1. Erweiterung Zusätzlich können mehrere Zahlensysteme eingestellt werden -> Erledigt. Zahlensystemerkennung wird ebenfalls mit einer Funktion erkannt. Ich rechne alle eingegebenen Variablen zuerst ins Dezimalsystem um, mache dann die Operation und anschließend folgt die Wandlung ins gewünschte Format. 3. Ziel =2. Erweiterung Umwandlung der Form zur Eingabe der Aufgabe mit einem Operandin ein Textfeld. Umstellung der Ansicht auf eine FormView. Ein zweites Textfeld zeigt das Ergebnis. Ein Button "Losrechnen" Aufgabenlösung mit einer Parser-Klasse. -> erledigt 4. Ziel=3. Erweiterung Umwandlung des Parsers für Aufgaben mt mehreren Operanden mit der typischen Leserichtung von links nach rechts. -> Ich denke mal erledigt. Ich nehm den Eingabestring und zerteile ihn. Erste Variable: 0 bis zum Operator dann : und anschließendes Zielzahlen system oder zweite Variable bis zum Ende oder : und anschließendes Zielzahlensystem 5. Ziel =4. Erweiterung Umstellung des Parsers auf Punkt-vor-Strichrechnung -> Jetzt wirds interessant. Wie würdest Du das machen? es gibt bei mir nur einen Operator. Eine Erweiterung auf verschachtelte Aufgaben (z.b. 3*(4-2)) wäre echt interessant. 6. Ziel =5. Erweiterung Umstellung des Parsers auf Zahlensysteme -> Schon erledigt mit der StringUntersuchen()-Fkt. Fernziel=6. Erweiterung Hinzufügen komplexer Zahlen als eigen entwickelte Datenstruktur -> Ich hab mir ne ganze Klasse CVariable gegönnt. Diese hat folgende Atribute: stringvar, realstringvar, imagstringvar, realteil, imagteil. Außerdem habe ich die grundlegenden Operationen +-*/ überschrieben. Nach meiner Erfahrung solltest du früh anfangen, dir klarzumachen und vorzustellen, wie die Programme funktionieren und aufgebaut sind, und wie die beteiligten Objekte erzeugt und zerstört werden. -> Objekte werden mit new erzeugt und um die Zerstörung muss ich mich doch nicht kümmern. Macht doch der Garbage-... (weiß grad nich wie er heißt) Im Moment habe ich aber folgendes Problem: double var10 // Wert zur Laufzeit z.b. 127,4 int ganzzahl = Math.Truncate(var10) // Wert zur Laufzeit 127 double kommazahl = var10- ganzzahl // Wert sollte 0,4 sein. Leider ist kommazahl aber 0.40000000000000568. Und ich weiß nicht warum. Wäre froh wenn mir da jemand weiterhelfen könnten. VG und gute Nacht Herki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 10. März 2009 Teilen Geschrieben 10. März 2009 Im Moment habe ich aber folgendes Problem: double var10 // Wert zur Laufzeit z.b. 127,4 int ganzzahl = Math.Truncate(var10) // Wert zur Laufzeit 127 double kommazahl = var10- ganzzahl // Wert sollte 0,4 sein. Leider ist kommazahl aber 0.40000000000000568. Und ich weiß nicht warum. Wäre froh wenn mir da jemand weiterhelfen könnten.0.4 lässt sich nicht genau als Gleitkommawert darstellen. Gleitkommawerte sind prinzipiell ungenau. Die meisten Zahlen, die im Dezimalsystem abbrechende Dezimalbrüche sind, sind als "Dualbruch" periodisch. Nur ganz bestimmte Werte lassen sich exakt darstellen. Genauer gesagt sind das die, bei denen in Bruchschreibweise der Nenner eine Potenz von 2 ist. Wenn sich ein Wert nicht exakt darstellen lässt, speichert der Computer den Wert, der am nächsten dran ist. Für 0.4 ist das eben der Wert, den du da siehst. Darum darf man Gleitkommawerte auch nie auf Gleichheit prüfen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AndiE Geschrieben 10. März 2009 Teilen Geschrieben 10. März 2009 Hallo Herki, mir ging nicht es nicht darum, dir zu helfen, einen Taschenrechner zu erstellen, sondern um diese Dinge, weil sie grundlegende Denkweisen der OOP(OOA und OOD) und MVC beinhalten: 1. Erzeugung einer View-Document-Architektur aus Fenster-, Dokument- und Rahmenfensterklasse 2. Abfangen einer "Mouse clicked"- Botschaft und Aufruf eines Dialogs 3. Erstellung eines Dialogs mit verschiedenen Eingabeelementen 4. Auswertung der Dialogeingaben in der Dokumentenklasse 5. Auslösen eines Neuzeichnens 6. Darstellung der Daten im Ansichtsfenster Da dabei acht und mehr Dateien entstehen können, halte ich es für vorteilhaft, sich die Zusammenhänge graphisch darzustellen, z.B. mit UML-Diagrammen. Das scheint hier zwar nicht nötig, weil die Zusammenhänge sehr überschaubar sind, sollte aber be anderen Projekten helfen. LG Andre' Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AndiE Geschrieben 13. März 2009 Teilen Geschrieben 13. März 2009 Hallo, zu Punkt vor Strich habe ich diese Idee: Grundlegende Gleichung: e=a*b+c*d Lösung: z1=a*b z2=c*d e=z1+z2 e=a=a*1+0*1 e=a+c=a*1+c*1 e=a*b=a*b+0*1 e=a*b+c=a*b+c*1 übrigens gilt das für - und / genauso. Mit Klammern habe ich mich noch nicht so befaßt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.