Aufgabe: Hasen und Hühner
Ausgangslage
Ein Bauer auf seinem Hof eine unbekannte Anzahl von Hühnern und Hasen. Diese Tiere haben sich in den letzten Jahren stark vermehrt. Deshalb möchte der Bauer wissen, wie viele Hasen und wie viele Hühner auf seinem Hof leben. Also schickt der Bauer seinen Lehrling, um die Tier zu zählen.
Nach einiger Zeit kommt der Lehrling zurück und verkündet stolz:
- Ich habe x Tiere gezählt.
- Alle Tiere zusammen haben y Beine.
Wie kann der Bauer die Anzahl der Hasen und Hühner berechnen?
Der Bauer fragt eine befreundete Informatikerin um Hilfe. Sie schlägt ihm folgendes vor:
- Nimm zunächst einmal an, dass alle Tiere Hasen sind. Also:
- x Hasen
- 0 Hühner
- Berechne dann, wie viele Beine das ergeben würde.
Beine = 4 * Anzahl Hasen + 2 * Anzahl Hühner
- Solange die berechnete Anzahl Beine grösser als die tatsächliche Anzahl der Beine ist:
- Reduziere die Anzahl Hasen um 1.
- Erhöhe die Anzahl Hühner um 1.
- Berechne erneut die Anzahl der Beine.
Beispiel
Anzahl Tiere: 10 Anzahl Beine: 32 Annahme: 10 Hasen und 0 Hühner Berechnen: (10 Hasen * 4 Beine) + (0 Hühner * 2 Beine) = 40 Beine Ist die berechnete Anzahl Beine (40) grösser als die tatsächliche Anzahl (32)? => JA Neu: 9 Hasen und 1 Huhn Berechnen: (9 Hasen * 4 Beine) + (1 Huhn * 2 Beine) = 38 Beine Ist die berechnete Anzahl Beine (38) grösser als die tatsächliche Anzahl (32)? => JA Neu: 8 Hasen und 2 Hühner Berechnen: (8 Hasen * 4 Beine) + (2 Hühner * 2 Beine) = 36 Beine Ist die berechnete Anzahl Beine (36) grösser als die tatsächliche Anzahl (32)? => JA ... Neu: 6 Hasen und 4 Hühner Berechnen: (6 Hasen * 4 Beine) + (4 Hühner * 2 Beine) = 32 Beine Ist die berechnete Anzahl Beine (32) grösser als die tatsächliche Anzahl (32)? => NEIN Die Lösung ist: 6 Hasen und 4 Hühner
Variablen und Konstanten bestimmen
Zunächst müssen Sie die variablen und konstanten Werte für dieses Programm bestimmen. Zur Erinnerung:
- Variablen verändern ihren Wert bei jeder Programmausführung und auch während das Programm läuft.
- Konstanten haben immer den gleichen Wert.
Konstanten
Welche beiden Konstanten benötigt unser Programm? Notieren Sie zu jeder Konstante
- ihren Wert
- Beschreibung als Stichwort
- Datentyp (Text, Ganzzahl oder Dezimalbruch)
Variablen
Welche fünf Variablen benötigt unser Programm? Notieren Sie zu jeder Variable:
- einen sprechenden Bezeichner
- Datentyp (Text, Ganzzahl oder Dezimalbruch)
Realisieren
Die befreundete Informatikerin hat die Logik schon programmiert. Allerdings fehlen einige Variablen.
Auftrag
Ergänzen Sie die Deklarationen und Variablen im Programmcode.
Ändern Sie nur die mit TODO
markierten Stellen.
Vorgehen
- Erstellen Sie ein neues Projekt (Ordner) in Ihrem Workspace.
- Erstellen Sie eine neue Datei für den Sourcecode („Animals.java“).
- Kopieren Sie den vorgegebenen Sourcecode in diese Datei.
- Passen Sie den Programmkopf (Autor, Datum) an.
- Ergänzen Sie die Deklarationen und Variablen im Programmcode.
Kompilieren Sie das Programm nach jedem Teilschritt um allfällige Tippfehler früh zu erkennen.- Deklarieren sie alle Variablen zwischen den Kommentaren
TODO start declare all variables
undTODO end declare all variables
. - Ersetzen Sie alle Bezeichner
TODO
im Programmablauf mit den richtigen Variablen.
Hinweis
Der Benutzer soll die Anzahl der Tiere und Beine in der Konsole (Eingabeaufforderung) eingeben. Dazu nutzen wir den bereits vorgegebenen Befehl
variable = scanner.nextInt();
Der Befehl scanner.nextInt()
wartet auf die Benutzereingabe und speichert die Eingabe in der variable
.
Sie müssen nur noch die richtige Variable angeben, um die Eingabe zu speichern.
Sourcecode
import java.util.Scanner; /** * calculate the number of rabbits and chickens * * @author Marcel Suter * @version 1.0 * @since 2018-09-07 */ public class Animals { Scanner scanner; /** * constructor */ public Animals () { scanner = new Scanner (System.in); } /** * starts the execution * * @param args command line arguments */ public static void main (String[] args) { Animals program = new Animals (); System.out.println ("Willkommen"); program.calculate (); System.out.println ("Bye Bye!"); } /** * calculates the numbers */ private void calculate () { // TODO start declare all variables // TODO end declare all variables System.out.print ("Anzahl Tiere >"); TODO = scanner.nextInt (); // Benutzereingabe lesen System.out.print ("Anzahl Beine >"); TODO = scanner.nextInt (); // Benutzereingabe lesen TODO = TODO; // Anzahl Hasen ist gleich Anzahl Tiere TODO = 0; // Anzahl Hühner ist gleich Null TODO = (TODO * 4 + TODO * 2); while (TODO > TODO) { TODO = TODO - 1; TODO = TODO + 1; TODO = (TODO * 4 + TODO * 2); } System.out.println ("Es sind " + TODO + " Hasen und " + TODO + " Huehner"); } }
Testen
Probieren Sie Ihr Programm mit unterschiedlichen Anzahlen von Tieren / Beinen aus. Durch das Ausprobieren verschiedener Kombinationen, versuchen wir Fehler in der Logik zu finden.
- Eine realistische Anzahl Beine (
(tiere*2) <
= beine <
= (tiere*4)
). - Zu viele Beine (
beine > tiere*4
) - Zu wenig Beine (
beine < tiere*2
) - Eine ungerade Anzahl Beine
- Funktioniert das Programm mit allen vier Kombinationen von Tieren / Beinen?
- Erkennt das Programm unlogische Eingaben? z.B. 2 Tiere mit 5 Beinen?
Zusatzaufgabe
Beim Testen ist Ihnen aufgefallen, dass Ihr Programm noch fehleranfällig ist. Versuchen Sie das Programm so umzuschreiben, dass der Benutzer nur eine realistische Anzahl Beine eintragen kann, so dass die Berechnung immer möglich ist.
Vielleicht hilft ihnen dieses Code-Schnipsel weiter:
int minumumFuerZahl = ?; int maximumFuerZahl = ?; int zahl = scanner.nextInt(); while(zahl >= minumumFuerZahl || zahl <= maximumFuerZahl){ System.out.print("Zahl nicht möglich, bitte erneut eingeben >"); zahl = scanner.nextInt(); }
Zusatzaufgabe
Ihr Programm überprüft mittlerweile ob die eingegebene Zahl auch realistisch ist, ergänzen Sie den Code nun, damit auch nur natürliche Zahlen (keine Buchstaben, Kommazahlen, etc.) eigeneben werden können.
Vielleicht hilft ihnen dieses Code-Schnipsel weiter:
int zahl; System.out.print("Zahl eingeben >"); while(!scanner.hasNextInt()){ // Überprüfen ob der User eine Zahl eigegeben hat System.out.print("Bitte eine natürliche Zahl eingeben. Zahl >"); scanner.nextLine(); // Scanner leeren, damit der User erneut eine Zahl eingeben muss } zahl = scanner.nextInt(); // Überprüfte Zahl einlesen