Benutzer-Werkzeuge

Webseiten-Werkzeuge


states:examples:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


states:examples:start [2024/08/31 12:03] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Zustandsübergangsdiagramme - weitere Beispiele ======
 +===== 1a. Geheimnisvoller Automat =====
 +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. Da alle auslösenden Ereignisse gleichartig sind (Drücken einer Taste) schreiben wir statt "Taste a drücken" einfach nur "a" und statt "Taste b drücken" einfach nur "b".
 +\\ \\ 
 +**Aufgabe:** Beschreibe auf möglichst einfache Art, bei welchen Wörtern die Lampe nach Eingabe des Wortes grün leuchtet!
 +\\ \\ 
 +**Beispiele:**
 +  * aabaa => Nach Eingabe des Wortes leuchtet die Lampe blau
 +  * abaab => Nach Eingabe des Wortes leuchtet die Lampe gelb
 +  * abb => Nach Eingabe des Wortes leuchtet die Lampe rot
 +  * aabb => Nach Eingabe des Wortes leuchtet die Lampe rot
 +  * aababa => Nach Eingabe des Wortes leuchtet die Lampe grün
 +  * usw.
 +
 +
 +{{ :states:examples:pasted:20210131-151845.png?600 }}
 +
 +[[.automat1:loesung:start|Hier geht's zur Lösung!]]
 +
 +===== 1b) Umsetzung als Java-Programm =====
 +{{ youtube>fP_4PMzADmE?large }}
 +<HTML>
 +
 +<div class="java-online" style="height: 500px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Automat1'}">
 +
 +<script type="text/plain" title="Automat1.java">
 +Automat1 a1 = new Automat1();
 +String wort = Input.readString("Gib ein aus a's und b's bestehendes Wort ein:");
 +a1.verarbeiteWort(wort);
 +
 +class Automat1 {
 +   
 +   String zustand = "rot";
 +
 +   void tasteADrücken() {
 +      if(zustand == "gelb") {
 +         zustand = "grün";
 +      } else {
 +         zustand = "blau";
 +      }
 +   }
 +
 +   void tasteBDrücken() {
 +      if(zustand == "blau" || zustand == "grün") {     // Der Operator || bedeutet: "or"
 +         zustand = "gelb";
 +      } else {
 +         zustand = "rot";
 +      }
 +   }
 +
 +   void verarbeiteWort(String wort) {
 +      zustand = "rot";
 +      
 +      // i zählt von 0 bis zur Länge des Wortes - 1
 +      for(int i = 0; i < wort.length(); i++) {
 +
 +         String buchstabe = wort.charAt(i);     // Hole den i-ten Buchstaben (i == 0 ist der erste, i == 2 der zweite, ...)
 +      
 +         if(buchstabe == "a") {
 +            tasteADrücken();
 +         } else if(buchstabe == "b") {
 +            tasteBDrücken();
 +         }
 +      }
 +
 +      println("Durch das Wort " + wort + " geht der Automat in den Zustand " + zustand + " über.");
 +   }
 +
 +}
 +</script>
 +
 +</div>
 +
 +</HTML>
 +
 +
 +
 +===== 1c) Zustandsübergangstabelle =====
 +Erstelle die Zustandsübergangstabelle! \\ \\ 
 +[[.automat1:tabelle:start|Hier geht's zur Lösung!]]
 +
 +===== 2a. Baue selbst einen Automaten! =====
 +Zeichne das Zustandsdiagramm einer Maschine wie bei Aufgabe 1, deren Licht genau dann grün leuchtet, wenn das Wort mit einer geraden Anzahl von a‘s endet. 
 +Ein Wort, das mit 0 a‘s endet, soll nicht zum Aufleuchten des grünen Lichts führen.
 +
 +[[.automat2:loesung:start|Hier geht's zur Lösung!]]
 +
 +
 +===== 2b. Umsetzung als Java-Programm =====
 +Setze den in Aufgabe 2 gebauten Automaten in ein Java-Programm um. Gerne kannst Du dafür eine Kopie des Programms aus Aufgabe 1a als Grundlage verwenden!
 +
 +[[.automat2a:loesung:start|Hier geht's zur Lösung!]]
 +
 +===== 2c. Zustandsübergangstabelle =====
 +Erstelle die Zustandsübergangstabelle!
 +
 +[[.automat2b:loesung:start|Hier geht's zur Lösung!]]
 +
 +
 +===== 3. "Sternchenaufgabe": Teilbarkeitschecker =====
 +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. \\ \\ 
 +**Bemerkung:** Ist noch nichts eingegeben, so ist dies als 0 zu werten und damit auch durch 3 teilbar.
 +
 +[[.automat3:loesung:start|Hier geht's zur Lösung!]]