Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
schule:klassen:2019:10abc:zustandsdiagramme1 [2020/01/13 17:59] – [Aufgabe 5:] martinschule:klassen:2019:10abc:zustandsdiagramme1 [2021/12/29 11:40] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 12: Zeile 12:
  
 ===== Aufgabe 4: ===== ===== Aufgabe 4: =====
-Eine Maschine besitzt zwei Tasten a und b, mit denen man Wörter eingeben kann, sowie eine Lampe, die rot, blau, gelb oder grün leuchtet. Unten siehst Du das Zustandsdiagramm der Maschine. Erkläre, bei welchen Wörtern die Lampe grün leuchtet!+Eine Maschine besitzt zwei Tasten a und b, mit denen man Wörter eingeben kann, sowie eine Lampe, die rot, blau, gelb oder grün leuchtet. Unten siehst Du das Zustandsdiagramm der Maschine. \\ Erkläre, bei welchen Wörtern die Lampe grün leuchtet!
 {{ :schule:klassen:2019:10abc:pasted:20200105-211614.png?600 }} {{ :schule:klassen:2019:10abc:pasted:20200105-211614.png?600 }}
  
Zeile 18: Zeile 18:
 Zeichne das Zustandsdiagramm einer Maschine wie bei Aufgabe 4, deren Licht genau dann grün leuchtet, wenn das Wort mit einer geraden Anzahl von a‘s endet. Zeichne das Zustandsdiagramm einer Maschine wie bei Aufgabe 4, deren Licht genau dann grün leuchtet, wenn das Wort mit einer geraden Anzahl von a‘s endet.
 \\  \\ 
 +{{:schule:klassen:2019:10abc:pasted:20200113-180040.png}}
 +\\
 +
 Programmiere eine Klasse mit den Methoden aEingeben() und bEingeben(), die nach jedem Methodenaufruf ausgibt, in welchem Zustand sie sich befindet und ob das bis dahin eingegebene Wort mit einer geraden Anzahl von „a“-s endet. Programmiere eine Klasse mit den Methoden aEingeben() und bEingeben(), die nach jedem Methodenaufruf ausgibt, in welchem Zustand sie sich befindet und ob das bis dahin eingegebene Wort mit einer geraden Anzahl von „a“-s endet.
 +<code java>
 +// Nur zum Testen:
 +ZweiAErkenner zae = new ZweiAErkenner();
  
 +zae.aEingeben();
 +zae.aEingeben();
 +zae.bEingeben();
 +zae.aEingeben();
 +zae.aEingeben();
 +zae.aEingeben();
 +zae.aEingeben();
 +zae.bEingeben();
 +
 +// Hier die Klasse:
 +class ZweiAErkenner {
 +   
 +   int zustand = 1;
 +
 +   public void aEingeben() {
 +      if(zustand == 3) {
 +         zustand = 2;
 +      } else {
 +         zustand++;
 +      }
 +      ausgabe();
 +   }
 +
 +   public void bEingeben() {
 +      zustand = 1;
 +      ausgabe();
 +   }
 +
 +   public void ausgabe() {
 +      println("Zustand: " + zustand);
 +      if(zustand == 3){
 +         println("Das Wort endet mit gerader Anzahl von a's. ");
 +      } else {
 +         println("Das Wort endet nicht mit gerader Anzahl von a's.");
 +      }
 +   }
 +
 +
 +
 +
 +}
 +
 +</code>
 ===== Aufgabe 6: ===== ===== Aufgabe 6: =====
 Zeichne das Zustandsdiagramm einer Maschine mit zwei Tasten 1 und 2, mit Hilfe derer man beliebige Dezimalzahlen eingeben kann, die nur die Ziffern 1 und 2 besitzen. Die Maschine soll einen Zustand „teilbar durch 3“ besitzen, der genau dann erreicht wird, wenn die entstandene Dezimalzahl durch 3 teilbar ist. Zeichne das Zustandsdiagramm einer Maschine mit zwei Tasten 1 und 2, mit Hilfe derer man beliebige Dezimalzahlen eingeben kann, die nur die Ziffern 1 und 2 besitzen. Die Maschine soll einen Zustand „teilbar durch 3“ besitzen, der genau dann erreicht wird, wenn die entstandene Dezimalzahl durch 3 teilbar ist.
Zeile 25: Zeile 74:
 \\ **Bem.:** Ist noch nichts eingegeben, so ist dies als 0 zu werten und damit auch durch 3 teilbar. \\ **Bem.:** Ist noch nichts eingegeben, so ist dies als 0 zu werten und damit auch durch 3 teilbar.
  
 +{{:schule:klassen:2019:10abc:pasted:20200113-181214.png}}
 +
 +
 +<WRAP center round info 60%>
 +**Erklärung der Lösung:** \\ 
 +Eine Zahl ist genau dann durch drei teilbar, wenn ihre Quersumme durch 3 teilbar ist. Im Zustand "durch drei teilbar" ist die Quersumme durch drei teilbar, lässt also beim Teilen durch 3 den Rest 0. Im Zustand QR1 lässt die Quersumme beim Teilen durch 3 den Rest 1, im Zustand QR2 lässt die Quersumme beim Teilen durch 3 den Rest 2.
 +</WRAP>
 +
 +
 +Programmiere eine Klasse mit den Methoden einsEingeben() und zweiEingeben(), die nach jedem Methodenaufruf die Nummer des Zustands ausgibt und zudem jeweils schreibt, ob die bisher insgesamt eingegebene Dezimalzahl durch drei teilbar ist!
 +
 +<code java>
 +DreiErkenner de = new DreiErkenner();
 +de.einsEingeben();
 +de.zweiEingeben();
 +de.einsEingeben();
 +
 +
 +
 +public class DreiErkenner {
 +
 +   int zustand = 1;
 +
 +   public void einsEingeben() {
 +      if(zustand == 3) {
 +         zustand = 1;
 +      } else {
 +         zustand++;
 +      }
 +      ausgabe();
 +   }
 +
 +   public void zweiEingeben() {
 +      if(zustand == 1) {
 +         zustand = 3;
 +      } else {
 +         zustand--;
 +      }
 +      ausgabe();
 +   }
 +   
 +   public void ausgabe() {
 +      println("Zustand: " + zustand);
 +      if(zustand == 1) {
 +         println("Durch 3 teilbar!");
 +      } else {
 +         println("Nicht durch 3 teilbar!");
 +      }
 +   }
 +   
 +
 +
 +}
 +</code>
 +===== Aufgabe 7: =====
 +Eine Maschine besitzt zwei Tasten a und b. Sie soll sich genau dann im Zustand "korrekt" befinden, wenn das eingegebene Wort mit a beginnt und mit b endet. \\ 
 +  - Zeichne das Zustandsdiagramm! \\
 +  - Programmiere eine Klasse mit den Methoden aEingeben() und bEingeben(), die das Zustandsdiagramm umsetzt und nach jedem Methodenaufruf ausgibt, in welchem Zustand sie sich befindet und ob das insgesamt eingegebene Wort mit a beginnt und mit b endet.
 +
 +{{:schule:klassen:2019:10abc:pasted:20200116-203517.png?500}}
 +
 +<code java>
 +Aufgabe7 ag7 = new Aufgabe7();
 +ag7.aEingeben();
 +ag7.aEingeben();
 +ag7.bEingeben();
 +
 +
 +public class Aufgabe7 {
 +   
 +   int zustand = 1;
 +
 +   public void aEingeben() {
 +      
 +      if(zustand != 4) {      // Bemerkung: != bedeutet "ungleich"
 +         zustand = 2;
 +      }
 +
 +      ausgabe();
 +
 +   }
 +
 +   public void bEingeben() {
 +      
 +      if(zustand == 2) {
 +         zustand = 3;
 +      } else if(zustand == 1) {
 +         zustand = 4;
 +      } 
 +
 +      ausgabe();
 +
 +   }
 +
 +   public void ausgabe() {
 +      println("Zustand: " + zustand);
 +      if(zustand == 3) {
 +         println("Das Wort beginnt mit a und endet mit b.");
 +      }
 +   }
 +
 +
 +}
 +</code>
 +
 +
 +===== Aufgabe 8: =====
 +Ein Getränkeautomat gestattet nur den Einwurf von 50 ct-Münzen und 1 €-Münzen. Er soll sich genau dann im Zustand "bezahlt" befinden, wenn insgesamt **genau** 2 € eingeworfen wurden.
 +  - Zeichne ein Zustandsdiagramm!
 +  - Programmiere eine Klasse ''Automat'' mit den Methoden ''fünzigCentEinwerfen'' und ''einEuroEinwerfen'', die den Automaten abbildet und nach jedem Methodenaufruf ausgibt, in welchem Zustand sie sich befindet und ob insgesamt genau 2 € eingeworfen wurden.
 +
 +{{:schule:klassen:2019:10abc:pasted:20200116-205349.png?600}}
 +
 +<code java>
 +Automat a = new Automat();
 +a.einEuroEinwerfen();
 +a.fünfzigCentEinwerfen();
 +a.fünfzigCentEinwerfen();
 +a.fünfzigCentEinwerfen();
 +
 +public class Automat {
 +   
 +   int zustand = 0;
 +
 +   public void fünfzigCentEinwerfen() {
 +      if(zustand < 4) {
 +         zustand++;
 +      } else {
 +         zustand = 5;
 +      }
 +      ausgabe();
 +   }
 +
 +   public void einEuroEinwerfen() {
 +      if(zustand < 4) {
 +         zustand = zustand + 2;
 +      } else {
 +         zustand = 5;
 +      }
 +      ausgabe();
 +   }
 +
 +   public void ausgabe() {
 +      println("Zustand: " + zustand);
 +      if(zustand == 4) {
 +         println("Exakt bezahlt!");
 +      }
 +   }
 +}
 +</code>
Drucken/exportieren
QR-Code
QR-Code schule:klassen:2019:10abc:zustandsdiagramme1 (erstellt für aktuelle Seite)