| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: "Aus klein mach groß": Teil3 - Rechnen mit Zahlen im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige dies ist die Fortsetzung der Aufgabenreihe "Aus klein mach groß": "Aus klein mach groß": Teil2 - Zahlen und Satzzeichen ...
![]() |
| | #1 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Anzeige dies ist die Fortsetzung der Aufgabenreihe "Aus klein mach groß": "Aus klein mach groß": Teil2 - Zahlen und Satzzeichen "Aus klein mach groß": Teil1 - Stack Und ist wie die ganze Reihe an Anfänger gerichtet. Diesesmal nutzen wir die zwei vorherigen Aufgaben, um einen einfachen Rechner zu bauen, der die Eingaben im Postfix Format aktzeptiert. Einige von uns kennen noch die alten Taschenrechner, die Eingaben in diesem Format erwartetet Dabei werden zuerst die Operanden und dann die Operatoren angegeben. Bsp: 7 8 + entspricht: 7+8=15 7 8 + 2 * entspricht: (7+8 )*2 In dieser Notation braucht man also keine Klammern und auch keine "Gewichtung" der Operatoren. Nutze also die Funktionen/Klassen aus der Teilaufgabe2 (ggf. anpassen/erweitern ), um ein UPN Rechner-Modul zu bauen. Dabei bekommt das Rechner-Modul eine Eingabe als String "1 2+" und gibt ein Ergebnis (oder eine Fehlermeldung) zurück. Es sollten 4 Grundrechenarten akzeptiert werden: + - * / Trennzeichen zwischen Operanden (also verschiedenen Zahlen): " " (Leerzeichen). Trennzeichen zwischen Operanden und Operatoren/Operatoren: entweder Leerzeichen oder kein Trennzeichen. Bsp: 1 2 + oder 1 2+ Implementiere zusätzlich zum Rechner-Modul ein Ausgabemodul, um Zwischenergebnisse (optional: auch die durchgeführte Operation/Operatoren) anzuzeigen: 7 8+2 * Ausgabe: (7+8= )15 (in Klammern: optionale Ausgabe) (15*2= )30 Ergebnis=30 Das Ausgabemodul sollte nur zur Fehlersuche/Überprüfung dienen und so integriert sein, dass es sich leicht (im Quellcode) "ausschalten" lässt (also die Anweisungen nicht "untrennbar" mit dem Rechner-Modul verbunden sind - somit bitte keine GUI/CUI anweisungen hineinquetschen, sondern einen Aufruf des Ausgabemoduls). Gehe davon aus, dass die Eingabe "korrekt" ist, zumindest was das Zahlenformat angeht. Man muss also keine 123.123.123 Formen berücksitigen. Allgemeine Tipps: in der letzten Teilaufgabe haben wird aus einem Satz Zahlen und Satzzeichen ausgelesen. Diese Rotine lässt sich nun etwas anpassen (es waren nicht umsonst 4 Satzzeichen Man könnte nun die Eingabe durchgehen und Zahlen einlesen/im Stack ablegen. Kommt ein Operator(*/+-) so werden die letzen beiden Zahlen aus dem Stack geholt und miteinander verrechnet - das Ergebnis kommt wieder auf den Stack. Wenn nun der String abgearbeitet wurde, liegt im Stack das Endergebnis. Gibt es bei einer Operation nicht mehr genügend Operanden (z.B wenn noch + abgearbeitet werden muss, im Zahlenstack aber nur eine einzige Zahl steht) oder liegen auf dem Stack nach der Abarbeitung mehrere Zahlen , so war die Eingabe fehlerhaft
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #2 (permalink) |
| Registriert seit: 03.12.04 ![]() Likes: 0 | So, hier meine Lösung (Java). UPNModul.java UPNFrame.java Diesmal hab ich GUI und Programmlogik getrennt und mit Exceptions gearbeitet. ![]() Im Anhang wieder die .jar-Datei zum testen. Gruß, Boar |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 14.04.06 ![]() Likes: 4 | Meine Lösung entspricht zwar nicht ganz der geforderten Aufgabenstellung (Debug-Modus ist fest integriert), aber ich hoffe, das ist nicht so schlimm Um den Debug-Modus zu aktivieren, muss man die Option --debug anhängen (eigentlich ist egal, was man anhängt, es wird nur die Anzahl an Argumenten überprüft). |
| | |
| | #4 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | @Eydeet: Du hast da ein paar Fehler drin probier mal (im Debugmodus): 1 2+ 3 4+* oder 5 6+ 7 8+* (ohne das Leerzeichen zwischen +*) oder 5 6+7 8+* Es scheint irgendwie nicht möglich zu sein, (5+6)*(7+8 ) zu berechnen Wenn ich den Code richtig interpretiert habe: Du legst die Operatoren auf den Stack und rechnest nur, wenn ein NON-Operand/Operator kommt - das geht nicht gut
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #5 (permalink) |
| Registriert seit: 14.04.06 ![]() Likes: 4 | Ups Ich hab beim Testen immer normale Rechnungen wie 1 * 2 + 4 - 3 o.ä. eingegeben, weil mir die andere Form noch nie begegnet ist.Jetzt also mit Postfix-Notation: EDIT: Ich hab noch mal eine verbesserte (?) Version angehängt (calc-1.1.zip). In dieser Version sind Teile der Main-Funktion in eine weitere Klasse ausgelagert, und man kann direkt mehrere Rechnungen hintereinander eingeben, die sich aufeinander beziehen, da der alte Stack weiterverwendet wird. Das macht es einem möglich, mit dem alten Ergebnis weiterzurechnen. |
| | |
| | #6 (permalink) |
| Registriert seit: 22.03.08 ![]() Likes: 0 | Hm, ich habs mal in perl gemacht, nimmt postfix sowie infix an. Bei postfix muss der Term komplett mit Leerzeichen getrennt sein, bei infix können die Klammern die Zahlen "berühren", aber Operatoren sollen immernoch "frei stehen". Und da immernur ein Argument pro "switch" erlaubt ist, muss man den Term auch quoten. (Auch um shell-Interpretation von Metazeichen entgegenzuwirken.) Für Benutzungshilfe einfach den "-h" switch angeben. *perl* (Außerdem gehts von einem Unixoiden System aus (siehe shebang), also notfalls (der Fall in dem Windows installiert ist) einfach mit "perl skriptname" starten..) |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| rechnen mit php und sql | Catarrer | (Web-) Design und webbasierte Sprachen | 6 | 06.09.08 12:09 |
| "Aus klein mach groß": Teil2 - Zahlen und Satzzeichen | CDW | Programmieraufgaben | 8 | 24.02.08 01:58 |
| "Aus klein mach groß": Teil4- Zahlen anordnen | CDW | Programmieraufgaben | 2 | 03.06.07 21:56 |
| "Aus klein mach groß": Teil1 - Stack | CDW | Programmieraufgaben | 2 | 08.05.07 17:07 |
| Rechnen mit Formulartdaten ? | Franzl | (Web-) Design und webbasierte Sprachen | 2 | 23.01.06 07:05 |