Javakurs/Übungsaufgaben/Kassenbon: Unterschied zwischen den Versionen
(→Robert) |
Xamiax (Diskussion | Beiträge) K (→Kassenbon: rechtschraibung) |
||
(18 dazwischenliegende Versionen von 12 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Kassenbon == | == Kassenbon == | ||
− | Es soll ein Programm geschrieben werden, | + | Es soll ein Programm geschrieben werden, das einen Kassenbon auf der Konsole anzeigt (mit ''System.out.println''). |
Am Anfang des Programmes werden in Form von Variablen folgende Werte festgelegt: | Am Anfang des Programmes werden in Form von Variablen folgende Werte festgelegt: | ||
Zeile 14: | Zeile 14: | ||
'''Hinweis:''' Erstellt zuerst die Ausgabe des Kassenbons und füllt sie anschließend mit Berechnungen und der Fallunterscheidung. | '''Hinweis:''' Erstellt zuerst die Ausgabe des Kassenbons und füllt sie anschließend mit Berechnungen und der Fallunterscheidung. | ||
+ | |||
+ | Beispiel wie ein Kassenbon aussehen könnte: | ||
+ | |||
+ | Wurst 1 x 4.20 EUR | ||
+ | 4.20 EUR | ||
+ | Käse 1 x 2.30 EUR | ||
+ | 2.30 EUR | ||
+ | Brot 1 x 2.10 EUR | ||
+ | 2.10 EUR | ||
+ | DVD 2 x 12.00 EUR | ||
+ | 24.00 EUR | ||
+ | ---------------------------------- | ||
+ | Gesamt 32.60 EUR | ||
+ | Gegeben 50.00 EUR | ||
+ | |||
+ | Zurück 17.40 EUR | ||
== Kassenbon + automatischer Einkauf == | == Kassenbon + automatischer Einkauf == | ||
Erstellt eine Kopie eures soeben geschriebenden Programmes. | Erstellt eine Kopie eures soeben geschriebenden Programmes. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Verändert das Programm so, dass nun versucht wird, mehrfach Produkte eines Typs (z.B. Wurst) hintereinander zu kaufen, und abgebrochen wird, wenn das Geld für keine weiteren Einkäufe mehr ausreicht. Danach soll für diesen Einkauf der Kassenbon ausgegeben werden. | ||
+ | '''Hinweis:''' Viele, viele Fallunterscheidungen hintereinander! Natürlich ließe sich ein Einkauf, bis das Geld nicht mehr ausreicht, besser mit einer Schleife realisieren, die allerdings erst in Vorlesung 2 behandelt wird - hier ist auch "Spagetticode", d.h. viele gleiche Befehle hintereinander, erlaubt. | ||
== Kommentare == | == Kommentare == | ||
− | Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;) | + | Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;) |
<!-- | <!-- | ||
Zeile 48: | Zeile 60: | ||
==== Robert ==== | ==== Robert ==== | ||
− | Der Eine oder Andere hat darauf bestanden auf seinem Kassenbon keine | + | Der Eine oder Andere hat darauf bestanden auf seinem Kassenbon keine Hundertstelcent ausgeben zu wollen. Diese entstehen mitunter dadurch, dass Doublewerte mit einer gewissen Toleranz gespeichert werden. |
Hier ein Vorschlag für einen Workaround: | Hier ein Vorschlag für einen Workaround: | ||
Zeile 54: | Zeile 66: | ||
int ganzzahl = (int)kommazahl; // Nachkommastelle abschneiden | int ganzzahl = (int)kommazahl; // Nachkommastelle abschneiden | ||
− | int kommastelle = (int)(kommazahl * 100)% | + | int kommastelle = (int)(kommazahl * 100)%100 ; // zwei Nachkommastellen extrahieren |
System.out.println("Preis=" + ganzzahl + "." + kommastelle ); // Zahl in der Ausgabe zusammensetzen | System.out.println("Preis=" + ganzzahl + "." + kommastelle ); // Zahl in der Ausgabe zusammensetzen | ||
+ | |||
+ | |||
+ | |||
+ | === Katrin === | ||
+ | |||
+ | Wer zusätzlich zu korrekter Rundung rechts ausgerichtete Preise möchte: | ||
+ | |||
+ | kopiere die Datei [[http://user.cs.tu-berlin.de/~langk/Euro.java Euro.java]] in Dein Arbeitsverzeichnis. | ||
+ | |||
+ | Solange diese Datei in demselben Verzeichnis liegt, wie die java-Datei, an der Du arbeitest, stehen Dir der Befehl Euro.format(<preis>, <breite>); zur Verfügung. Wenn dich interessiert, warum das so ist, so erfährst du es [[Javakurs2007/Javamenue | hier]]. Ersetze einfach <preis> mit dem tatsächlichen Preis als double und <breite> mit der Breite des Preises als String inclusive führender Leerzeichen. Ein Euro-Zeichen wird automatisch hinten angefügt. | ||
+ | |||
+ | |||
+ | |||
+ | ==== Ich ==== | ||
+ | Wie ist das gemeint, mit Kassenbon automatisch füllen? | ||
+ | Man kann doch nicht "zufällig" einkaufen... | ||
+ | : Die Idee der Aufgabe war es, so lange dasselbe Produkt zu kaufen, wie du kannst. Aber (da am Anfang des Kurses) nicht mit einer Schleife, sondern mit mehreren if's. -- [[Benutzer:Buchholz|Robert Buchholz]] 02:13, 4. Jun. 2007 (CEST) | ||
+ | |||
+ | === Me2 === | ||
+ | Beim Kassenbon oben sollte, wenn ich nicht total falsch bin, 17.40 zurück gegeben werden, ist vielleicht für den ein oder anderen ganz nützlich :) | ||
+ | |||
+ | ===Shiomi=== | ||
+ | Das Runden ist auch viel einfacher bei Doubles. Einfach (Variable*100)/100 klappt auch :) | ||
+ | |||
+ | [[Kategorie:Java]] | ||
+ | [[Kategorie:Java_Aufgaben]] | ||
+ | __NOTOC__ |
Aktuelle Version vom 4. März 2013, 12:11 Uhr
Kassenbon
Es soll ein Programm geschrieben werden, das einen Kassenbon auf der Konsole anzeigt (mit System.out.println). Am Anfang des Programmes werden in Form von Variablen folgende Werte festgelegt:
- Anzahl von mindestens vier verschiedenen Waren, die gekauft werden sollen.
- Einzelpreise der Waren. (Ja, jede Warensorte hat einen anderen Preis)
- Inhalt der Brieftasche.
Das Programm soll den Gesamtpreis der eingangs festgelegten Waren ermitteln. Übersteigt der Gesamtpreis den Inhalt der Brieftasche, wird der Benutzer auf den fehlenden Betrag hingewiesen. Reicht der Inhalt der Brieftasche für den Einkauf aus, wird ein Kassenbon ausgegeben, der die gekauften Waren mit Anzahl und Preis sowie am Ende den Gesamtpreis auflistet.
Hinweis: Erstellt zuerst die Ausgabe des Kassenbons und füllt sie anschließend mit Berechnungen und der Fallunterscheidung.
Beispiel wie ein Kassenbon aussehen könnte:
Wurst 1 x 4.20 EUR 4.20 EUR Käse 1 x 2.30 EUR 2.30 EUR Brot 1 x 2.10 EUR 2.10 EUR DVD 2 x 12.00 EUR 24.00 EUR ---------------------------------- Gesamt 32.60 EUR Gegeben 50.00 EUR Zurück 17.40 EUR
Kassenbon + automatischer Einkauf
Erstellt eine Kopie eures soeben geschriebenden Programmes.
Verändert das Programm so, dass nun versucht wird, mehrfach Produkte eines Typs (z.B. Wurst) hintereinander zu kaufen, und abgebrochen wird, wenn das Geld für keine weiteren Einkäufe mehr ausreicht. Danach soll für diesen Einkauf der Kassenbon ausgegeben werden.
Hinweis: Viele, viele Fallunterscheidungen hintereinander! Natürlich ließe sich ein Einkauf, bis das Geld nicht mehr ausreicht, besser mit einer Schleife realisieren, die allerdings erst in Vorlesung 2 behandelt wird - hier ist auch "Spagetticode", d.h. viele gleiche Befehle hintereinander, erlaubt.
Kommentare
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)
Unknown User
hallo alle freitagsrunde Team,
diese lehrveranstaltung finde ich persönlich super megageil, aber ich wünsche,dass die Musterlösungen von solchen schweren Aufgaben im Netz gestellt werden.
ich wünsche Euch viel Erfolg und weiterso...:-)
Robert
Der Eine oder Andere hat darauf bestanden auf seinem Kassenbon keine Hundertstelcent ausgeben zu wollen. Diese entstehen mitunter dadurch, dass Doublewerte mit einer gewissen Toleranz gespeichert werden. Hier ein Vorschlag für einen Workaround:
double kommazahl = 123.290402; int ganzzahl = (int)kommazahl; // Nachkommastelle abschneiden int kommastelle = (int)(kommazahl * 100)%100 ; // zwei Nachkommastellen extrahieren System.out.println("Preis=" + ganzzahl + "." + kommastelle ); // Zahl in der Ausgabe zusammensetzen
Katrin
Wer zusätzlich zu korrekter Rundung rechts ausgerichtete Preise möchte:
kopiere die Datei [Euro.java] in Dein Arbeitsverzeichnis.
Solange diese Datei in demselben Verzeichnis liegt, wie die java-Datei, an der Du arbeitest, stehen Dir der Befehl Euro.format(<preis>, <breite>); zur Verfügung. Wenn dich interessiert, warum das so ist, so erfährst du es hier. Ersetze einfach <preis> mit dem tatsächlichen Preis als double und <breite> mit der Breite des Preises als String inclusive führender Leerzeichen. Ein Euro-Zeichen wird automatisch hinten angefügt.
Ich
Wie ist das gemeint, mit Kassenbon automatisch füllen? Man kann doch nicht "zufällig" einkaufen...
- Die Idee der Aufgabe war es, so lange dasselbe Produkt zu kaufen, wie du kannst. Aber (da am Anfang des Kurses) nicht mit einer Schleife, sondern mit mehreren if's. -- Robert Buchholz 02:13, 4. Jun. 2007 (CEST)
Me2
Beim Kassenbon oben sollte, wenn ich nicht total falsch bin, 17.40 zurück gegeben werden, ist vielleicht für den ein oder anderen ganz nützlich :)
Shiomi
Das Runden ist auch viel einfacher bei Doubles. Einfach (Variable*100)/100 klappt auch :)