| 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ß": Teil2 - Zahlen und Satzzeichen im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Teilaufgabe2: Schreibe ein Programm, welches aus einer Benutzereingabe Zahlen und Satzzeichen extrahiert und getrennt ausgibt. Beachte: die Ausgabe soll ...
![]() |
| | #1 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Anzeige Teilaufgabe2: Schreibe ein Programm, welches aus einer Benutzereingabe Zahlen und Satzzeichen extrahiert und getrennt ausgibt. Beachte: die Ausgabe soll in der "verkehrten" Reihenfolge des Vorkommens erfolgen. Z.B "Ich habe 1 webseite, mit 35 Zeilen code: in nur 5 Tagen erstellt!" Ausgabe: 5 35 1 ! : , Benutze zum Zwischenspeichern den Stack und die Stackroutinen aus dieser Aufgabe: "Aus klein mach groß": Teil1 - Stack Wobei Zahlen im einen Stack landen und Satzzeichen im anderen, so dass am Ende nur die Inhalte der Stacks nacheinander ausgegeben werden müssen. Eingabe: Zahlenformat: "normales" Dezimalformat: 123;123.321,0.321 d.h entweder ganze Zahlen oder Fließkommazahlen mit einem "Punkt" maximale Anzahl der Stellen in einer einzelnen Zahl: 255 (nur für Leute interessant, die Stacks mit festen Datentypen umgesetzt haben). Satzzteichenformat: ": , ! ?" (also kein Punkt ".", damit es keine Verwechslungsgefahr gibt) Einfachheitshalber gehe von dieser Form der Eingabe aus: Eine einzelne Zeile wie: "mein rechner hat 3500Mhz und deiner nur 3400, also bin ich um 2.4% 1337er als du" Tipp: Ihr müsst nicht unbedingt Stacks mit unterschieldichen Datentypen verwenden - nur sichergehen, dass in einem Stack eben nur Zahlen und im anderen nur Satzzeichen stehen. Ansonsten wären z.B unterschiedliche Datenstrukturen wie "stack_float" und "stack_string" und entsprechend angepasste Routinen eine mögliche Lösung. Betrachte dazu die Möglichkeiten der genutzen Programmiersprache: z.B C: atof,strtof C#: Float.Parse Java: Float.parseFloat C++: die netten >> << Operatoren der istringstream Klasse Pascal: Val Delphi: StringToFloat Alternativ bieten viele Programmiersprachen sowas wie isNum()/isNaN Es sollten keine "Sonderformen" der Zahlen erkannt werden, sondern nur das, was die Standardroutinen der jeweiligen Programmiersprache bieten. D.h ihr müsst nur die Zahlen "lokalisieren" Wie schon in der vorherigen Aufgabe: trennt euere Main und die Funktionen voneinander. Ob ihr die Eingabe aus einer GUI oder Konsole einlest, ist egal. z.B könnte man so vorgehen
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | @Eydeet hast Du auch den Fall berücksichtigt, dass ein ungültiges Zahlenformat vorkommen könnte? z.B "123.123.2". Wenn die Konvertierung fehlschlägt, sollte optimalerweise kein "defaultwert" von f gespeichert werden (was es auch sein mag - auf die Schnelle wurde ich aus der Doku nämlich nicht schlau). Es wurde zwar nicht ausdrücklich verlangt, sollte aber das Leben in späteren Teilaufgaben leichter machen
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #4 (permalink) |
| Registriert seit: 14.04.06 ![]() Likes: 4 | Ich hab den Code noch mal etwas überarbeitet, unter anderem Kommentiert und das Problem gelöst, dass eine Zahl am Zeilenende nicht gespeichert werden kann (allerdings mit einem kleinen Hack). Ungültige Zahlen erkennt die stringstream-Klasse freundicherweise automatisch, sodass 123.123.2 in 123.123 umgewandelt wird. Ich hab es jetzt so programmiert, dass diese Zahl einfach verworfen wird. Eine andere Möglichkeit wäre es, die Zahl in 3 getrennte Zahlen aufzusplitten. Das wäre allerdings komplizierter, also hab ich's gelassen |
| | |
| | #5 (permalink) |
| Registriert seit: 03.12.04 ![]() Likes: 0 | Hier meine Java-Lösung: Stack.java ExtractDigits.java "123.123.2" wird zu "123.123" und "2", die Ziffer hinter dem zweiten Punkt wird als neue Zahl interpretiert. Außerdem wird ".45" zu "0.45" formatiert und bei Zahlen, die mit einem Punkt enden wird der Punkt abgeschnitten. ("12." wird zu "12") EDIT: .jar-Datei im Anhang. Feedback ist erwünscht ![]() Gruß, Boar |
| | |
| | #6 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Zitat:
Code: public Object pop(){
Object o = null;
if(!isEmpty()) {
anzahl--;
o = elemente.get(anzahl);
elemente.remove(anzahl);
}
return o;
}{ Code: public Object pop() throws Exception{
Object o = null;
if(!isEmpty()) {
anzahl--;
o = elemente.get(anzahl);
elemente.remove(anzahl);
return o;
}
else throw new Exception("Stack ist leer!!!") ;
} weil der Programmierer z.B beim POPen (->Stack Hierdurch wird er aber sozusagen auf den möglichen Fehlerfall aufmerksam gemacht und gezwungen, diesen zu berücksichtigen. Und Code: //Oberstes Objekt vom Stack lesen
public Object top(){
return elemente.get(anzahl-1);
} Was ich aber persönlich unschön finde ist, dass Du GUI und Programm zusammenmischst - ExtractDigits() legt z.B GUI Elemente an, dazu gleich auch die Stacks. Aber die eigentliche Extraction wird in einem Listener aufgerufen. Vielleicht wäre es besser, eine eigene GUI Klasse zu haben, die auf Useraktionen reagiert und die Ausgabe regelt und die Klasse ExtractDigits, die nach außen sichtbar z.B nur die extract(String s, Stack1,Stack2) Methode anbietet bzw. alternativ extract(String s) und zusätzlich getDigStack() und getPunctuationStack() Methoden, die entsprechende Stacks liefern. Wäre zwar etwas mehr Aufwand, der sich aber später beim mehrmaligen Anpassen (falls Du die nachfolgenden Aufgabenteile machen möchtest
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | |
| | |
| | #7 (permalink) |
| Registriert seit: 03.12.04 ![]() Likes: 0 | Wow, erstmal ein Dankeschön für den ausführlichen Kommentar. Zu den Exceptions: So hab ich das noch gar net gesehen, guter Einwand. Ich finds auch unschön GUI und Programm in eine Klasse zu packen. Aber da es bis jetzt ein Mini-Programm hab ich alles in eine Klasse geklatscht (pure Faulheit ^^). Hab nicht daran gedacht, dass das Programm noch wächst. Aber bis zum nächsten Aufgabenteil werd ich das anpassen |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Tutorial: Teil2 - Der Autoloader | BasicAvid | (Web-) Design und webbasierte Sprachen | 4 | 01.04.08 21:45 |
| "Aus klein mach groß": Teil3 - Rechnen mit Zahlen | CDW | Programmieraufgaben | 5 | 22.03.08 13:25 |
| "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 |