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
2024/03/19 08:26

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)
2024/03/19 08:26

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
  1. Erstellen Sie ein neues Projekt (Ordner) in Ihrem Workspace.
  2. Erstellen Sie eine neue Datei für den Sourcecode („Animals.java“).
  3. Kopieren Sie den vorgegebenen Sourcecode in diese Datei.
  4. Passen Sie den Programmkopf (Autor, Datum) an.
  5. Ergänzen Sie die Deklarationen und Variablen im Programmcode.
    Kompilieren Sie das Programm nach jedem Teilschritt um allfällige Tippfehler früh zu erkennen.
    1. Deklarieren sie alle Variablen zwischen den Kommentaren TODO start declare all variables und TODO end declare all variables.
    2. 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");
 
    }
}
2024/03/19 08:26

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.

  1. Eine realistische Anzahl Beine ((tiere*2) <= beine <= (tiere*4)).
  2. Zu viele Beine (beine > tiere*4)
  3. Zu wenig Beine (beine < tiere*2)
  4. 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?
2024/03/19 08:26

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();
}
2024/03/19 08:26

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
 
2024/03/19 08:26

© Kevin Maurizi