Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
schule:klassen:2017:10b:kap7 [2018/01/04 12:51] – martin | schule:klassen:2017:10b:kap7 [2021/12/29 10:40] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Kapitel 7: Zustandsdiagramme ====== | ||
+ | {{ : | ||
+ | Die Stoppuhr hat eine Taste S (Start/ | ||
+ | <WRAP center round box 60%> | ||
+ | **Anleitung** \\ | ||
+ | Nach dem Einschalten zeigt die Stoppuhr die Zeit 0 min 0 s, kurz: 00:00. Nach Drücken der Taste „s“ beginnt die Zeitmessung und die Uhr zeigt die abgelaufene Zeit an. Drückt man erneut die Taste „s“, so hält die Zeitmessung an, kann jedoch durch weiteren Druck auf „s“ fortgesetzt werden. | ||
+ | Ein Druck auf die Taste „r“ bewirkt jederzeit, dass die Zeitmessung angehalten und die Uhr auf 00:00 zurückgesetzt wird. | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Zustandsdiagramm der Stoppuhr ===== | ||
+ | {{ : | ||
+ | |||
+ | ===== Umsetzung in einem Java-Programm ===== | ||
+ | In der Variable '' | ||
+ | |||
+ | <code java> | ||
+ | import sge.*; | ||
+ | |||
+ | public class Stoppuhr implements TimerListener, | ||
+ | |||
+ | private Textfeld textfeld; | ||
+ | private int minuten; | ||
+ | private int sekunden; | ||
+ | |||
+ | // 1: Bereit; 2: Zeitmessung; | ||
+ | private int zustand; | ||
+ | |||
+ | public Stoppuhr() { | ||
+ | |||
+ | textfeld = new Textfeld(50, | ||
+ | |||
+ | // Das timer-Objekt sorgt dafür, dass die Methode timerSignalVerarbeiten() | ||
+ | // 1-mal je Sekunde aufgerufen wird: | ||
+ | Timer timer = new Timer(this, 1000); | ||
+ | timer.start(); | ||
+ | |||
+ | // Wir sagen dem Fenster, dass es bei jedem Tastendruck | ||
+ | // unsere Methode tasteGedrueckt aufrufen soll: | ||
+ | Fenster.getInstance().addTastaturListener(this); | ||
+ | |||
+ | minuten = 0; | ||
+ | sekunden = 0; | ||
+ | |||
+ | zustand = 1; | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | @Override | ||
+ | public void timerSignalVerarbeiten() { | ||
+ | if (zustand == 2) { | ||
+ | sekunden++; | ||
+ | if (sekunden == 60) { | ||
+ | sekunden = 0; | ||
+ | minuten++; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | ausgabe(); | ||
+ | |||
+ | } | ||
+ | |||
+ | private void ausgabe(){ | ||
+ | textfeld.setText("" | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void tasteGedrueckt(char zeichen, int keyCode) { | ||
+ | |||
+ | if(zeichen == ' | ||
+ | reset(); | ||
+ | } | ||
+ | |||
+ | if(zeichen == ' | ||
+ | if(zustand == 1 || zustand == 3){ | ||
+ | start(); | ||
+ | } else if(zustand == 2){ | ||
+ | stop(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ausgabe(); | ||
+ | |||
+ | } | ||
+ | |||
+ | private void start(){ | ||
+ | zustand = 2; | ||
+ | } | ||
+ | |||
+ | private void stop(){ | ||
+ | zustand = 3; | ||
+ | } | ||
+ | |||
+ | private void reset(){ | ||
+ | zustand = 1; | ||
+ | sekunden = 0; | ||
+ | minuten = 0; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | Zum Starten benötigen wir noch eine kleine Starterklasse: | ||
+ | |||
+ | <code java> | ||
+ | public class StoppuhrStarter { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | Stoppuhr stoppuhr = new Stoppuhr(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Aufgabe: Taster zur Anzeige der Zwischenzeit ===== | ||
+ | Die Stoppuhr erhält eine weitere Taste Z („Zwischenzeit“), | ||
+ | |||
+ | ==== Lösung: ==== | ||
+ | {{ : | ||
+ | |||
+ | Hier die ergänzte '' | ||
+ | <code java> | ||
+ | import sge.*; | ||
+ | |||
+ | public class Stoppuhr implements TimerListener, | ||
+ | |||
+ | private Textfeld textfeld; | ||
+ | private int minuten; | ||
+ | private int sekunden; | ||
+ | |||
+ | // 1: Bereit; 2: Zeitmessung; | ||
+ | private int zustand; | ||
+ | |||
+ | public Stoppuhr() { | ||
+ | |||
+ | textfeld = new Textfeld(50, | ||
+ | |||
+ | // Das timer-Objekt sorgt dafür, dass die Methode timerSignalVerarbeiten() | ||
+ | // 1-mal je Sekunde aufgerufen wird: | ||
+ | Timer timer = new Timer(this, 1000); | ||
+ | timer.start(); | ||
+ | |||
+ | // Wir sagen dem Fenster, dass es bei jedem Tastendruck | ||
+ | // unsere Methode tasteGedrueckt aufrufen soll: | ||
+ | Fenster.getInstance().addTastaturListener(this); | ||
+ | |||
+ | minuten = 0; | ||
+ | sekunden = 0; | ||
+ | |||
+ | zustand = 1; | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | @Override | ||
+ | public void timerSignalVerarbeiten() { | ||
+ | if (zustand == 2 || zustand == 4) { | ||
+ | sekunden++; | ||
+ | if (sekunden == 60) { | ||
+ | sekunden = 0; | ||
+ | minuten++; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | if(zustand != 4) { | ||
+ | ausgabe(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | private void ausgabe(){ | ||
+ | textfeld.setText("" | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void tasteGedrueckt(char zeichen, int keyCode) { | ||
+ | |||
+ | if(zeichen == ' | ||
+ | reset(); | ||
+ | } | ||
+ | |||
+ | if(zeichen == ' | ||
+ | if(zustand == 1 || zustand == 3){ | ||
+ | start(); | ||
+ | } else if(zustand == 2){ | ||
+ | stop(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if(zeichen == ' | ||
+ | if(zustand == 2){ | ||
+ | zwischenzeit(); | ||
+ | } else if(zustand == 4){ | ||
+ | start(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | ausgabe(); | ||
+ | |||
+ | } | ||
+ | |||
+ | private void start(){ | ||
+ | zustand = 2; | ||
+ | } | ||
+ | |||
+ | private void stop(){ | ||
+ | zustand = 3; | ||
+ | } | ||
+ | |||
+ | private void reset(){ | ||
+ | zustand = 1; | ||
+ | sekunden = 0; | ||
+ | minuten = 0; | ||
+ | } | ||
+ | |||
+ | private void zwischenzeit(){ | ||
+ | zustand = 4; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Aufgaben ===== | ||
+ | ==== Aufgabe 1: Aggregatszustände von Wasser ==== | ||
+ | Wasser kann drei Aggregatszustände annehen. Zeichne ein Zustandsdiagramm! | ||
+ | \\ | ||
+ | **Lösung: | ||
+ | {{ : | ||
+ | |||
+ | ==== Aufgabe 2: Blog ==== | ||
+ | Ein Blog kennt zwei Arten von Benutzern: Redakteure und Administratoren. Redakteure können Artikel erstellen und erstellte Artikel überarbeiten. Ist ein Artikel fertig, können sie ihn zur Veröffentlichung einreichen. Administratoren können eingereichte Artikel veröffentlichen oder die Veröffentlichung ablehnen. \\ Erstelle ein Zustandsdiagramm! | ||
+ | \\ | ||
+ | **Lösung: | ||
+ | {{ : | ||
+ | |||
+ | ==== Aufgabe 3: Die Operatoren = und == ==== | ||
+ | Erkläre den Unterschied zwischen den Operatoren = und == | ||
+ | \\ | ||
+ | **Lösung: | ||
+ | Der Operator = (Wertzuweisungsoper) dient dazu, Variablen Werte zuzuweisen, z.B. | ||
+ | <code java> | ||
+ | int a = 10; | ||
+ | a = a * 20; | ||
+ | </ | ||
+ | In der ersten Anweisung wird der Variablen '' | ||
+ | \\ | ||
+ | Der Operator '' | ||
+ | <code java> | ||
+ | if(b == 10){ | ||
+ | System.out.println(" | ||
+ | } else { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Aufgabe 4: Logische Operatoren ==== | ||
+ | Java kennt die logischen Operatoren ''&&'' | ||
+ | |||
+ | <code java> | ||
+ | if(!(alter >= 16 && geschlecht == ‘ m‘) || alter > 30){ | ||
+ | versicherungsbeitrag = 150; | ||
+ | } else { | ||
+ | versicherungsbeitrag = 100; | ||
+ | } | ||
+ | </ | ||
+ | \\ | ||
+ | **Lösung: | ||
+ | Die Anweisung bewirkt, dass Männer im Alter von 16 bis 29 Jahren einen Versicherungsbeitrag von 150 € zahlen müssen, alle anderen Menschen nur 100 €. | ||
+ | |||
+ | ==== Aufgabe 5: Seltsamer Automat 1 ==== | ||
+ | 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! | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | \\ | ||
+ | **Lösung: | ||
+ | Die Lampe leuchtet bei genau den Wörtern grün, die mit " | ||
+ | |||
+ | ==== Aufgabe 5: Seltsamer Automat 2 ==== | ||
+ | Zeichne das Zustandsdiagramm einer Maschine wie bei Aufgabe 5, deren Licht genau dann grün leuchtet, wenn das Wort mit einer geraden Anzahl von a‘s endet. | ||
+ | \\ | ||
+ | **Lösung: | ||
+ | {{ : |