Quadros Islas Philippinen
1 Ab in den Süden
Schaltkreis mit Pull-Up-Widerstand

Möchtest Du auf die Philippinen fliegen, Ja oder Nein? Willst Du Fluginformationen per SMS, Ja oder Nein? Manche Entscheidungen im Leben sind einfach, manche bedeutungsvoll. Schreibe verschie­dene Entscheidungen auf und markiere diejenigen, welche mit einer Ja-Nein-Entscheidung zu treffen sind. Kann man die anderen Entscheidungen auch auf eine Ja-Nein-Entscheidung zurückführen?

In einem Bewerbungsgespräch wirst Du gefragt, ob Du eher Anführer oder Ausführer bist. Viele glauben nun mit "Anführer" antworten zu müssen, aber besser wäre vielleicht eine dritte Variante in welcher man erklärt, wann man ein Anführer ist und wann eben nicht.

In der Programmierung ist es einfacher. Es gibt nur Entscheidungen die mit Ja oder Nein zu beantworten sind. Das ermöglicht überhaupt erst die notwendige Struktur.

2 Entscheidungen in Java
Struktogramm Entscheidung

Eine Entscheidung (engl. if/else statement, conditional statement) beginnt mit der Prüfung einer Bedingung. Falls die Bedingung erfüllt ist, wird der Ja-Zweig abgearbeitet, sonst der Nein-Zweig.

In der Programmiersprache Java wird dies folgendermaßen programmiert:
if(auswahl == 'j')
{   kostensms = 2.90;
}
else
{   kostensms = 0;
}

Hinweis: Option 2 muss es nicht geben.

3 Vergleichs­operatoren

  < kleiner als
  > größer als

 <= kleiner gleich
 >= größer gleich

 != ungleich
 == genau gleich

Zur Formulierung von Vergleichen benötigt man Vergleichsoperatoren. Das Ergebnis eines Vergleichs (z.B. x > y) lautet entweder ja oder nein, bzw. wahr (true) oder falsch (false). Intern stellt Java den Wahrheitswert mit dem Datentyp boolean durch den Wert true und false dar. In der Programmiersprache C werden bspw. alle Zahlenwert die ungleich 0 sind als wahr interpretiert. Alle möglichen Vergleichs­operatoren werden in der Grafik gezeigt.

Wichtig: Verwechsele den Vergleichsoperator == nicht mit der Zuweisung =.

Bedingung: x == 0

Zuweisung: x = 1

4 Logische Operatoren

  ! nicht

 && und

 || oder

Logische Operatoren können mehrere Vergleiche miteinander verknüpfen.
Beispiel: „Wenn Entschädigung und Flugdatenänderung per SMS gewünscht wird, betragen die Kosten 11,90 EUR.“

if(sms == true && entsch == true) kosten = 11.9;

Dabei hat der nicht-Operator den höchsten Vorrang, gefolgt von dem und-Operator. Der oder-Operator hat den niedrigsten Vorrang. Falls eine andere Gewichtung gewünscht ist kann man dies durch Klammersetzung erreichen.

5 Verschachtelte Entscheidungen

if(versicherung == true)
{   if(ruecktritt == true){
      kosten = 15;
    }
    if(gepaeck == true){
      kosten = 3;
    }
}

Auch eine verschachtelte Entscheidung ist möglich. Hierbei wird mindestens ein Anweisungsblock durch eine weiter Entscheidung ergänzt.

Dies ist bei mehrstufigen Entscheidungen sinnvoll. Möchte der Kunde bspw. eine Versicherung buchen, kann anschließend nach Reise­rücktritts­versicherung und nach einer Gepäck­versicherung gefragt werden.

6 Menüauswahl

switch(selektor){
   case 1:  text = "Kaffee";
            break;
   case 2:  text = "Espresso";
            break;
   default: text = "Fehler";
}

Eine Menüauswahl (auch Mehrfachauswahl) eignet sich zum Programmieren von Menüs. Nachdem Schlüsselwort switch steht die Variable (selektor). Der Datentyp der Variable ist int, char oder String.

Die einzelnen Fälle werden mit dem Schlüsselwort case und dem entsprechenden Wert der Variablen geprüft: bei Ganzzahlen case 1:, bei Zeichen case 'K' oder Zeichenketten case "Kaffee". Der Datentyp der Variablen muss entsprechend gewählt werden. Mit break; beendet man die Auswahl.

Ideen:
A. M. Maier, G. Kompa, Elektronikschule Tettnang
E. Fuchst, "Java 9 Grundlagen Program­mierung, Herdt Verlag, 2017



Aufgabe 1 Pineingabe

Autoren: G. Kompa, D. Supper

Smartphone Pineingabe
  1. Erstelle die Klasse Pineingabe welche den Anwender auffordert eine 4stellige Pin einzugeben. Anschließend überprüfen sie den eingegebenen PIN und geben dem Benutzer eine Rückmeldung, ob der PIN richtig oder falsch ist.
  2. Prüfe zuerst, ob die eingegebene Zahl zu groß oder zu klein ist und ermögliche dem Benutzer eine erneute Eingabe.

Aufgabe 2 Der Südsee-Urlaub

Autoren: D. Supper | binnendifferenziert

  1. Erstelle ein Struktogramm für die Klasse Suedseeurlaub welche den Anwender für einen 600 EUR teuren Flug verschiedene Optionen abfragt: eine SMS-Benachrichtigung kostet 2,95 EUR, eine Reise­rücktritts­versicherung 32 EUR und eine Gepäck­versicherung 13 EUR. Ausgegeben wird der Gesamtpreis. Notiere die Zeitdauer.
  2. Programmiere die Klasse Suedseeurlaub. Erstelle hierzu ein neues Projekt 02-Entscheidungen.

    Zum Auswerten einer j/n-Abfrage benötigt man folgende Syntax:


    import java.util.Scanner;
    public class Suedseeurlaub{
       public static void main(String[] args){
          String auswahl;
          Scanner keyboard = new Scanner(System.in);
          System.out.print("Versicherung (j/n): ");
          auswahl = keyboard.next();
          if(auswahl.charAt(0) == 'j'){
            ...
          }

       }
    }

    Statt if(auswahl.charat(0) == 'j') kann man auch die Syntaxif(eingabe.matches("j")) verwenden. Dies liegt daran, dass die Methode den Vergleich durchführt und direkt true oder false zwischen die Klammern schreibt.


  3. Alternativ wird das Rundum-Sorglos-Paket für 44 EUR angeboten, welches SMS-Benachrichtigung, eine Reise­rücktritts­versicherung und eine Gepäck­versicherung beinhaltet.

    Programmiere eine verschachtelte Entscheidung.


  4. Sollte der Gesamtpreis über 640 EUR liegen beträgt der Rabatt 10 % und ist der Kunde Stammkunde erhält er weitere 5 % Rabatt.
Coron auf den Philippinen

Aufgabe 3 Logische Verknüpfungen

Autoren: D. Supper | binnendifferenziert

In dieser Aufgabe wird das Arbeiten mit logischen Verknüpfungen trainiert.

logische Operatoren
  1. Schreibe die Klasse LogischeVerknuepfung. Dabei sollen zwei ganze Zahlen x, y, deren Summe maximal 100 ist, eingelesen und deren Werte ausgegeben werden.
  2. Ist die Summe der Zahlen größer 100 gibt es 0 Punkte, kleiner 100 20 Punkte.
  3. Sind beide Zahlen jeweils gerade gibt es 40 Punkte.
  4. Ist die Summe der Zahlen kleiner als 50 und eine Zahl ungerade gibt es 70 Punkte.
  5. Für Profis : Ist die Summe der beiden Zahlen eine Primzahl (nur Primzahlen bis 100) gibt es 100 Punkte.

Entspann dich erst mal ...

Ein Informatiker und seine Frau sitzen beim Frühstück: Sie: "Du Mausi, wir haben kein Brot mehr. Könntest du bitte zum Bäcker gehen und eins holen? Und falls sie Eier haben, bring 10 Stück mit."

Als er wieder zurück kommt hat er 10 Brote dabei. Sagt sie: "Warum nur hast du 10 Brote gekauft?" Er: "Sie hatten Eier."

Aufgabe 4 Bedingungen mit Variablen

Variablen werden sehr häufig in Bedingungen verwendet: Finde alle Aussagen herraus die wahr sind.

Die Bedingungen können in einer Testklasse Bedingungen verifiziert werden, indem bei einem wahren Ausdruck "Okay" am Monitor ausgegeben wird.

  1. int v = 10, w = 100;
    if(v!=0 || v>w || w-v==90)


  2. int a = 10, b = 100;
    if(a!=0 && !(a<9) || b-a==89)


  3. int n = 1, m = 17;
    if(n>0 && m>0 || n>m && m!=17)


  1. double x = 2.5, y = 1.0;
    if(x>2.4 && y<=1.1)


  2. int s1 = 10, s2 = -2;
    if(s1!=0 && !(s2<9) || s2==89)


  3. boolean k=true; int x2=-2;
    if(k && !(x2>2) || !k)


  1. true
  2. true
  3. true
  4. true
  5. false
  6. true

Aufgabe 5 Schaltjahre

Autoren: G. Kompa, D. Supper | binnendifferenziert

Uhr im Einkaufszentrum

In unserem Kalender sind zum Ausgleich der Jahreslänge in regelmäßigen Abständen Schaltjahre eingebaut. Ein astronomisches Jahr hat dabei 365,24219 Kalendertage. Zur exakten Festlegung der Schaltjahre dienen folgende Regeln:

  • Ist die Jahreszahl durch 4 teilbar, so ist das Jahr ein Schaltjahr. Diese Regel hat allerdings eine Ausnahme:
  • Ist die Jahreszahl durch 100 teilbar, so ist das Jahr kein Schaltjahr. Diese Regel hat allerdings wiederum eine Ausnahme:
  • Ist die Jahreszahl durch 400 teilbar, so ist das Jahr doch ein Schaltjahr.
  1. Erstelle die Klasse Schaltjahre, welche berechnet, ob eine vom Benutzer eingegebene Jahreszahl ein Schaltjahr ist oder nicht.
  2. Bestimme Jahre, mit denen du alle drei Regeln prüfen kannst.
  3. Programmiere die Klasse mit einer einzigen Entscheidung.

    Verwende logische Operatoren.

  1. 3fach-Verschachtelung:
    if(jahr%4 == 0){
       schaltjahr = true;
       if(jahr%100 == 0){ ...
  2. Schaltjahre Regel 1: 1996, 2004, 2016
    keine Schaltjahre Regel 2: 2100, 1900
    Schaltjahre Regel 3: 2000
  3. if(jahr%4 == 0 && ...)

Aufgabe 6 Body-Mass-Index BMI

Autoren: D. Supper | binnendifferenziert

Der Body-Mass-Index, kurz BMI, ist eine Gewichtsklassifikation, welche unser Gewicht $m$ (in kg) in ein Verhältnis zur Körpergröße $h$ (in m) setzt:

$$BMI=\frac{m}{h^2}$$ Dabei gelten folgende Einteilungen
  • $BMI < 18,5$: Untergewicht
  • $18,5 \leq BMI < 25$: Normalgewicht
  • $BMI \geq 25$: Übergewicht
  1. Erstelle die Klasse BodyMassIndex, welche den BMI einer Person berechnet und entscheidet, ob diese Untergewicht, Übergewicht oder Normalgewicht hat.
  2. Berücksichtige bei der Entscheidung das Alter der Person.

    Die Weltgesundheitsorganisation WHO hat hierfür Standards festgelegt.

  3. Berücksichtige bei der Entscheidung das Geschlecht der Person.
Waage
  1. Nach Eingabe von Körpergröße und Gewicht wird der BMI berechnet und dann entschieden:
    bmi=gewicht/(koerpergroesse*koerpergroesse);
    if(bmi < 18,5){
       ...
  2. Die Tabellen in Abhängigkeit von Alter und Geschlecht wurden auf Basis von durchschnittlichen Messwerten festgelegt, so dass die Implementierung in ein Programm nicht mit einem Algorithmus gelöst, sondern nur mit einer Vielzahl an Entscheidungen gelöst werden kann.

Aufgabe 7 Kaffeeautomat

Autoren: D. Supper | binnendifferenziert

Cappuccino

Zur Auswahl stehen KAFFEE (1), LATTE MACCHIATO (2), CAPPUCCINO (3), ESPRESSO (4) und Mokka(5). Die Aufgabe ist es das Auswahlmenü des Kaffeeautomaten zu programmieren.

  1. Erstelle die Klasse Kaffeeautomat, mit der Variable int selektor.
  2. Programmiere den Kaffeeautomaten mit der Variable String selektor. Zur Auswahl steht KAFFEE(K)...
  3. Berücksichtige bei der Auswahl auch den Wert k oder 1.

    Für jeden zusätzlichen Wert benötigt man einen eigenen Fall. Außerdem können auch Zahlen als Zeichen geprüft werden.

  4. Teste mit und ohne break. Notiere die Auswirkung.
  5. Bewerte, wieso der BMI-Rechner für eine switch-case-Anwendung ungeeignet ist.

  1. int selektor;
    selektor = kb.nextInt();
    switch(selektor){
       case 1: ...

  2. String selektor;
    selektor = kb.next();
    switch(selektor){
       case "K": ...

  3. switch(selektor){
       case "1": ...
       case "k": ...
       case "K": ...
  4. Ohne break wird die Auswahl nicht beendet und der Anweisungsblock des nächsten Falls abgearbeitet.
  5. Der BMI-Rechner ist für eine switch-case-Auswahl ungeeignet, da dort Bereiche überprüft werden.

Wortliste und Satzbausteine



die Ent­schei­dung, -en zu jeder Entschei­dung gehört eine Bedingungs­prüfung if(..). Ist die Bedingung wahr wird der erste Anweisungsblock nach if(..){ } abgearbeitet, falls nicht der zweite Anweisungsblock nach else{ }.
die Beding­ung, -en die Bedingung wird mit Hilfe von Vergleichsoperatoren geprüft und ergibt den Wert true oder false
der Ver­gleichs­operator, -en Vergleichsoperatoren sind:   < kleiner als,   > größer als,  <= kleiner gleich,  >= größer gleich,  != ungleich,  == genau gleich
der lo­gi­sche Operator, -en logische Operatoren dienen zum verknüpfen mehrerer Bedingungen:   ! nicht,  && und,  || oder
ver­schachteln Entscheidungen können verschachtelt werden. Das ist dann sinnvoll wenn die zweite Entscheidung von der ersten abhängig ist.
die Mehrfach­auswahl Programmierstruktur für ein Menü.
© mylime.info