Benutzer-Werkzeuge

Webseiten-Werkzeuge


states:zut_to_java:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
states:zut_to_java:start [2021/01/17 16:47] – [Musteraufgabe 1: Fortsetzung des Kühlschrank-Projekts] Martin Pabststates:zut_to_java:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 247: Zeile 247:
 **Hier ein mögliches Zustandsübergangsdiagramm:** \\  **Hier ein mögliches Zustandsübergangsdiagramm:** \\ 
 {{ :states:zut_to_java:pasted:20210116-214620.png }} {{ :states:zut_to_java:pasted:20210116-214620.png }}
-Schreibe **ausgehend von diesem Zustandsübergangsdiagramm** die **Klasse Stoppuhr**. Dabei soll ihr Zustand durch ein Attribut ''zustand'' gespeichert werden, das die Werte 1, 2 oder 3 annehmen kann, die den entsprechend grün nummerierten Zuständen im Diagramm entsprechen. Für die auslösenden Aktionen soll je eine Methode vorgesehen werden, zusätzlich soll eine Methode ''zustandAusgeben'' programmiert werden, die den Zustand ausgibt. \\ \\ +Schreibe **ausgehend von diesem Zustandsübergangsdiagramm** die **Klasse Stoppuhr**. Dabei soll ihr Zustand durch ein Attribut ''zustand'' gespeichert werden, das die Werte 1, 2 oder 3 annehmen kann, die den entsprechenden grün nummerierten Zuständen im Diagramm entsprechen. Für die auslösenden Aktionen soll je eine Methode vorgesehen werden, zusätzlich soll eine Methode ''zustandAusgeben'' programmiert werden, die den Zustand ausgibt. \\ \\ 
 **Bemerkung 1:** Die eigentliche Funktion der Uhr (Zeit messen) soll nicht programmiert werden. Damit klar ist, was zu tun ist, hier ein kurzes Testprogramm zusammen mit seiner Ausgabe. **Kopiere diese Anweisungen nach Erstellung der Klasse Stoppuhr an den Anfang Deines Programms, dann kannst Du auf einfach Art und Weise testen, ob alles funktioniert.** **Bemerkung 1:** Die eigentliche Funktion der Uhr (Zeit messen) soll nicht programmiert werden. Damit klar ist, was zu tun ist, hier ein kurzes Testprogramm zusammen mit seiner Ausgabe. **Kopiere diese Anweisungen nach Erstellung der Klasse Stoppuhr an den Anfang Deines Programms, dann kannst Du auf einfach Art und Weise testen, ob alles funktioniert.**
 <code myJava> <code myJava>
Zeile 270: Zeile 270:
 </code> </code>
  \\ \\   \\ \\ 
-[[.stoppuhr_java:loesung:startx|Lösung]] +[[.stoppuhr_java:loesung:start|Lösung]]
- +
-<WRAP center round tip 60%> +
-Wie man die Uhr zum Laufen bringt, zeige ich Euch auch noch. Versprochen! +
-</WRAP>+
  
 ===== Aufgabe 3: Mikrowellenherd ===== ===== Aufgabe 3: Mikrowellenherd =====
-Ein Mikrowellenherd besitzt eine Tür zum Öffnen und Schließen sowie einen Schalter zum Ein- und Ausschalten. Er lässt sich bei geöffneter Türe nicht einschalten, zudem schaltet er sich sofort automatisch aus, wenn man die Türe im eingeschalteten Zustand öffnet. **Zeichne ein Zustandsübergangsdiagramm und eine Zustandsübergangstabelle**!+Ein Mikrowellenherd besitzt eine Tür zum Öffnen und Schließen sowie einen Schalter zum Ein- und Ausschalten. Der Mikrowellenherd lässt sich bei geöffneter Türe nicht einschalten, zudem schaltet er sich sofort automatisch aus, wenn man die Türe im eingeschalteten Zustand öffnet. **Zeichne ein Zustandsübergangsdiagramm und eine Zustandsübergangstabelle**! \\ \\  
 +**Tipps:** 
 +  * Jeder Zustand des Mikrowellenherds umfasst sowohl den Zustand der Tür als auch die Information darüber, ob die Mikrowelle ein- oder ausgeschaltet ist. Der erste Zustand ist z.B. "Ausgeschaltet und offen". Benenne am besten auch die anderen Zustände entsprechend. 
 +  * Auf die Pfeile des Zustandsübergangsdiagramms kann man hinter die auslösende Aktion auch noch eine **Bedingung** (die Voraussetzung für den Übergang ist) sowie eine **ausgelöste Aktion** schreiben. Letzteres ist bei dieser Aufgabe an einer Stelle sinnvoll. \\ //(Am Beispiel des Buches einer Bibliothek könnte das etwa so aussehen wie im nachfolgenden Bild.)// 
 +{{ :states:zut_to_java:pasted:20210117-171114.png }}  
 + 
 +[[.mikrowelle:loesung:start|Lösung]] 
 + 
 +===== Stoppuhr mit Zeitanzeige und Tastatursteuerung! ===== 
 + 
 +{{ youtube>Kwi9D1BZUQY?large }} 
 + 
 +<HTML> 
 +<div class="java-online" style="height: 500px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'StoppuhrLaeuft1'}"> 
 +<script type="text/plain" title="Stoppuhr_laeuft_1.java"> 
 +Stoppuhr s = new Stoppuhr(); 
 + 
 +class Stoppuhr extends Actor { 
 +    
 +   int zustand; 
 + 
 +   int zähler = 0; 
 +   int sekunden = 0; 
 +    
 +   Text ausgabe; 
 + 
 +   Stoppuhr() { 
 +       
 +      super(); 
 +       
 +      println("Drücke die Tasten s und r, um die Stoppuhr zu steuern!"); 
 +       
 +      zustand = 1; 
 +      ausgabe = new Text(400, 300, 64, ""); 
 +      ausgabe.setAlignment(Alignment.center); 
 +       
 +      zeitausgeben(); 
 +       
 +      schreibeZustand(); 
 +   } 
 + 
 +   public void onKeyDown(String key) { 
 +      if(key == "s") { 
 +         tasteSDrücken(); 
 +      } 
 +      if(key == "r") { 
 +         tasteRDrücken(); 
 +      } 
 +   } 
 + 
 +   public void act() { 
 +      if(zustand == 2) {  
 +         zähler++; 
 +         if(zähler == 30) { 
 +            zähler = 0; 
 +            sekunden++; 
 +            zeitausgeben(); 
 +         } 
 +      } 
 +   } 
 +    
 +   void zeitausgeben() { 
 +      ausgabe.setText(sekunden); 
 +       
 +   } 
 + 
 +   void tasteSDrücken() { 
 +      if(zustand < 3) { 
 +         zustand++; 
 +      } else { 
 +         zustand--; 
 +      } 
 +      schreibeZustand(); 
 +   } 
 + 
 +   void tasteRDrücken() { 
 +      zustand = 1; 
 +      sekunden = 0; 
 +      zeitausgeben(); 
 +      schreibeZustand(); 
 +   } 
 + 
 +   void schreibeZustand() { 
 +      if(zustand == 1) { 
 +         println("Bereit, 00:00"); 
 +      } else if(zustand == 2) { 
 +         println("Uhr läuft"); 
 +      } else if(zustand == 3) { 
 +         println("Uhr angehalten"); 
 +      } 
 +   } 
 + 
 +
 +</script> 
 + 
 +</div> 
 + 
 +</HTML> 
 + 
 + 
 +===== Aufgabe 4: Stoppuhr mit Zehntelsekundenanzeige und Zwischenzeitmessung ===== 
 +Jetzt bist Du dran! Erweitere das Stoppuhr-Programm folgendermaßen: 
 +  * Die Stoppuhr soll die verstrichene Zeit in Sekunden und Zehntelsekunden anzeigen. Die Anzeige 16:8 bedeutet also z.B. 16 s und 8 Zehntelsekunden. 
 +  * Die Stoppuhr soll über eine Funktion zur Zwischenzeitanzeige verfügen, die mit der Taste z bedient wird. Details dazu kannst Du [[:states:zut:stoppuhr:loesung#erweiterung_um_die_zwischenzeitanzeige_taste_z|dem um die Taste z erweiterten Zustandsübergangsdiagramm]] entnehmen. 
 + 
 +Damit Du möglichst gut zurechtkommst, lege in Deiner Entwicklungsumgebung am besten einen neuen Workspace an und kopiere das obige Programm als Grundlage hinein. Bitte verwende nicht Deine eigene Lösung, da ich meine Lösung schon so optimiert habe, dass die Erweiterung möglichst einfach möglich ist. Gehe am besten wie folgt vor: 
 + 
 +  - Benenne das Attribut ''sekunden'' um in ''zehntelsekunden''. Das geht am einfachsten, indem Du den Cursor draufsetzt und die Taste F2 drückst ("Rename").  
 +  - Ändere die Methode ''act'' so ab, dass die Variable ''zehntelsekunden'' nicht jede Sekunde, sondern jede Zehntelsekunde um eins erhöht wird. \\ //Tipp: Du musst nur eine einzige Zahl ändern!// 
 +  - Ändere die Methode ''zeitausgeben'' so ab, dass sie beispielsweise 123 Zehntelsekunden ausgibt als 12:3 (d.h. 12 Sekunden, 3 Zehntelsekunden). \\ //Tipp: die 12 erhältst Du, indem Du die Zehntelsekunden ganzzahlig durch 10 teilst, die 3 ist der Rest beim Teilen von 123 durch 10 ( % - Operator!). // 
 +  - Teste Dein Programm! 
 +  - Schau' Dir das [[:states:zut:stoppuhr:loesung#erweiterung_um_die_zwischenzeitanzeige_taste_z|um die Taste z erweiterte Zustandsübergangsdiagramm]] genau an: Die blauen Teile müssen im Programm ergänzt werden. 
 +  - Schreibe die Methode ''tasteZDrücken'' und erweitere die Methode ''onKeyDown'' so, dass beim Drücken der Taste z die Methode ''tasteZDrücken'' aufgerufen wird. 
 +  - Obwohl auf den blauen Pfeilen auch vom Drücken der Tasten s und r die Rede ist, müssen die Methoden ''tasteSDrücken'' und ''tasteRDrücken'' nicht mehr angepasst werden (glücklicher Zufall!). Überlege, warum das in diesem Fall so ist! 
 +  - Teste Dein Programm abermals! 
 +  - Erweitere die Methode ''schreibeZustand'' so, dass im Zustand 4 ausgegeben wird: "Zwischenzeitanzeige!"
 +  - Erweitere die Methode ''TasteZDrücken'' so, dass sie am Ende die Methode ''schreibeZustand'' aufruft. 
 +  - Teste Dein Programm! 
 +  - Mach einen Rechtsklick auf den Dateinamen Deines Programms und wähle im Kontextmenü "Als Hausaufgabe markieren"
 +  - Fertig!
  
-[[.mikrowelle:loesung:startx|Lösung]]+[[.zehntelsekundenloesung:start|Hier geht's zur Lösung mit Erklärvideo!]]
states/zut_to_java/start.1610898477.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki