Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Kassenbon: Unterschied zwischen den Versionen

 
K (Kassenbon: rechtschraibung)
 
(22 dazwischenliegende Versionen von 15 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Kassenbon ==
 
== Kassenbon ==
Es soll ein Programm geschrieben werden, dass einen Kassenbon auf der Konsole ausgibt.
+
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 der Kassenbon solange mit Waren gefüllt wird, bis der
 
Inhalt der Brieftasche für keine weiteren Einkäufe ausreicht. Betrachtet der Einfachheit halber
 
mehrere Produkte eines Typs als einen Einkauf.
 
  
'''Hinweis:''' Viele, viele Fallunterscheidungen!
+
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 ;)
 +
 
 +
<!--
 +
Als kleine Starthilfe folgt ein Beispiel wie so ein Kommentar formatiert sein könnte. Mit "Vorschau zeigen" kannst du dir ansehen was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.
 +
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)
 +
 
 +
==== Robert ====
 +
Na mal schaun ob irgend jemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.
 +
-->
 +
 
 +
==== 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 [[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 :)