Programmieraufgabe und Java/Uhr: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
(Unterschied zwischen Seiten)
main>Karl Kirst
 
K (10 Versionen importiert)
 
Zeile 1: Zeile 1:
{{Kurzinfo-1|Idee}}
{{gelb|
'''Programmieraufgaben''' im [[Informatik]]unterricht sind sind zumeist unabhängig von der [[Programmiersprache]] verwendbar.  
;Hinweis:
 
Leider verschwinden nicht alle schwarzen Striche. Ich nehme an, das sind Rechenungenauigkeiten (Rundungsfehler) der Turtlemethode.
Hier sind einige Ideen für Programmieraufgaben genannt. Weitere Ideen dürfen gerne ergänzt werden.
; Benötigt:
 
* if, for, Turtlegrafik, int, double
==Übungen zu algorithmischen Grundelementen==
* BlueJ, daher keine main-Mathode
 
===Ein- und Ausgabe von Text/Zahlen===
 
* {{wpde|Wikipedia:Hallo-Welt-Programm|Hallo-Welt-Programm}} - Babylonische Sprachverwirrung in der Ausgabe
* mit Variablen: "Hallo Benutzer" - mit Benutzereingabe in Textvariable
{{Siehe|Cäsar Chiffre (JavaScript)}}
 
===Variablen===
 
* x um 1 erhöhen (x=x+1) - Unterschied Mathe - Informatik
* Typkonvertierungen
 
===if-Abfrage===
 
*Mini-Quiz mit fester Anzahl an Fragen
*Berechnung der Lösungen von quadratischen Gleichungen mittels pq-Formel
::Mittels zweier if-Abfragen wird festgestellt, wie viele Lösungen die Geichungen hat und diese dann ausgegeben.
 
===Schleifen===
 
{{Aufgaben|1|
Lasse von
# -100 bis 100 zählen,
# nur gerade,
# nur ungerade Zahlen,
# Mit Modulo (benötigt if, Modulo oder Runden): Zahlenzensur: immer wenn eine Zahl durch 7 teilbar ist, soll PIEP statt der Zahl auf dem Bildschirm erscheinen (Hinweis: Setze % ein oder lasse eine zweite Variable immer bis 7 zählen).
}}
}}
==Quelltext==
[[Bild:ScreenshotUhr.gif|thumb|Screenshot]]
<source lang="java">
public class Uhr
{
    private int minute;
    private int stunde;
    private Turtle t;
   
    public Uhr(int pStunde, int pMinute)
    {
        if (stunde==0) {
            stunde=12;
        }
        minute=pMinute;
        stunde=pStunde;
        t=new Turtle();
        t.drehe(-90);
        t.zeige();
    }
    public void laufe15Sekunden(){
        for (int k=1;k<=15;k++){
            zeichneUhr(100,8); // 8 entspr. weiß
            stelleWeiter();
            zeichneUhr(100,0); // 0 entspr. schwarz
            t.ruhe(1000);
        }       
    }
   
    public void stelleWeiter()
    {
        minute++;
        if (minute>59) {
            minute=0;
            stunde++;
            if (stunde>12) {
                stunde=1;
            }
        }
    }
   
    public void zeichneUhr(double pZeigerlaenge, int pFarbe){
        t.setzeFarbe(pFarbe);
        t.drehe(minute*360/60);
        t.vor(pZeigerlaenge);
        t.vor(-pZeigerlaenge);
        t.drehe(-minute*360/60);
        t.drehe(stunde*360/12);
        t.vor(pZeigerlaenge*0.8);
        t.vor(-pZeigerlaenge*0.8);
        t.drehe(-stunde*360/12);       
    }
   
    public int gibVergangeneMinutenSeitMitternacht() {
        int zwischenspeicher;
        zwischenspeicher = minute + stunde * 60;
        return zwischenspeicher;
    }


{{Aufgaben|2|
    public void schreibeUhrzeit() {
Schreibe ein Programm, das dich solange nach der Geheimzahl „123“ fragt, bis sie richtig eingegeben wird. Dann soll auf dem Bildschirm erscheinen: Tresor ist geöffnet.
        System.out.println("Es ist "+stunde+":"+minute+", das ist "+gibVergangeneMinutenSeitMitternacht()+" Minuten nach Mitternacht");
}}
    }
}
</source>


{{Aufgaben|3|
==Übungen==
Gebe von 1 bis zu einer einzugebenden Zahl n alle natürlichen Zahlen und
# Ihre Quadrate – (Zahl mit sich selbst multiplizieren! 1,4,9,16…)
# Ihre Zweierpotenzen – ( 2,4,8,16,32…)
# Ihre Fakultät (1, 1*2, 1*2*3, 1*2*3*4, …)
aus.
}}


{{Aufgaben|4|
{{Übung|
Uhrsimulation: Verschachtelte Schleifen
# Analysieren Sie die Klasse Uhr.
#Klären Sie am Beispiel der Uhr folgende Begriffe:
#*Klasse, Methode, Datentyp, Parameter, Schleife (for), Bedingte Ausführung (if)
# Zeichnen Sie das Klassendiagramm zur Klasse Uhr.
# Implementieren Sie die Methode stelleUhr(int pStunde, int pMinute), die die Uhrzeit auf die angegebenen Parameter verstellt. Das soll aber nur dann geschehen, wenn eine gültige Uhrzeit übergeben wurde (Stunden bis max. 12 und Minuten bis 59). Falls als Stunde 0 angegeben wurde, soll der Wert auf 12 gestellt werden.
# Implementieren Sie die Methode stelleUmXMinutenVor(int x), die die Uhrzeit um x-Minuten verstellt. (Hinweis: es gibt zumindest 2 völlig verschiedene Lösungswege!)
# Ergänzen Sie die Uhr um eine Datumsangabe mit Tag und Monat. Implementieren Sie dazu auch stelleDatumWeiter(), die das Datum um einen Tag vorstellt. (Zur Vereinfachung vernachlässigen wir die Schaltjahre).
# Zusatzaufgabe: Ergänzen Sie eine Alarmfunktion.
# Zusatzaufgabe (Übungen zur Turtlegrafik):
#*Lassen Sie ein Ziffernblatt zeichnen.
#*Wahrscheinlich werden Sie die folgenden Befehle benötigen:
#*fuelleKreis(double radius)
#*schreibe(String text)
}}
}}


====Teilbarkeit und Primzahl====
==Weblinks==
 
* http://www.zitadelle.juel.nw.schule.de/if/java/P2.1/DigUhr.html
Benötigt Schleifen, Abfragen und abrunden bzw. Modulo
* Teilbarkeit prüfen
* Primzahlen bestimmen
* Alle Teiler einer Zahl
* ggT und kgV bestimmen
* Eukl. Algorithmus
 
====Große Zahlen====
 
Thematisieren: Überlauf und Genauigkeit
* Wer wird Millionär: Zinseszins bis 1 Mio. Euro per Schleife (oder die Abwärtsspirale bei nicht bezahlter Handyrechnung)
* Schachbrettaufgabe: Verdoppeln einer Grundzahl nach Schachbrettreislegende
 
====Schleife und Zufallszahl (Würfelbecheraufgaben)====
 
* Lassen Sie so lange die aktuellen x-Werte auf dem Bildschirm ausgeben, bis die 6 gefallen ist. Lassen Sie am Ende anzeigen, wie oft gewürfelt wurde.
* Lassen Sie aus 100 x-Werten auszählen, wie oft die 6 vorkam. Wie oft kamen die anderen Zahlen vor?
* Lassen Sie solange x ausgeben, bis 10mal die 6 gefallen ist.
* Schreiben Sie den "Paschbestimmer". Sie benötigen dazu einen zweiten Würfel.
Er soll entweder: Kein Pasch oder Pasch ausgeben.
* Stochastische Feststellung: Kommt die 7 wirklich am häufigsten vor?
Wenn man mit 2 Würfeln würfelt, so tritt die 7 am häufigsten auf.
Wie oft tritt welche Zahl auf, wenn man 100 mal würfelt?
 
====Spiele====
 
* Dart: 301 Herunterzählautomat
* Lunar Lander
 
====Kleine Projekte====
 
* Roulette: Sichere Strategie?! Es wird nur auf Farbe gesetzt. Man verliert nie, wenn man bei jeder Runde, in der man verloren hat, den Einsatz verdoppelt, um so beim ersten richtigen Tipp dann mit dem gewonnenen Geld nach Hause geht. Zeigen Sie: Mit beliebig viel Geld ist man immer irgendwann pleite, wenn man diese Strategie verfolgt. Fachübergreifend: Gesetz der großen Zahlen (Mathe).
 
===Funktionen===
...
 
 
===Rekursion===
...
 
==Turtle-Grafik==
 
{{Siehe|Turtle-Grafik}}
 
==Exkurs==
 
{{Siehe|Von-Neumann-Rechner-Simulation (JavaScript)}}
 
== Linkliste ==
 
* Eine große Sammlung zu Programmiersprachen unabhängigen Aufgaben (vor allem zu obigen Themen) finden wir auf der Seite
[http://www.programmieren-lernen.ch Programmieren lernen] die zum [http://www.ofv.ch/index.php?&ID=bkDet&nr=14505 gleichnamigen Buch] ISBN 978-3-280-04066-9 erschienen ist.
 
== Siehe auch ==


==Siehe auch==
* [[Java]]
* [[Informatik]]
* [[Informatik]]
* [[Programmierlernumgebungen]]
* [[Programmiersprachen]]
* [[Wiki als Programmierumgebung]]




[[Kategorie:Informatik]]
[[Kategorie:Java]]
[[Kategorie:Programmierlernumgebungen]]
[[Kategorie:Linksammlung]]
[[Kategorie:Programmiersprache]]
[[Kategorie:Unterrichtsideen/Informatik]]
[[Kategorie:Wiki als Programmierumgebung]]

Version vom 16. August 2019, 07:38 Uhr


Hinweis

Leider verschwinden nicht alle schwarzen Striche. Ich nehme an, das sind Rechenungenauigkeiten (Rundungsfehler) der Turtlemethode.

Benötigt
  • if, for, Turtlegrafik, int, double
  • BlueJ, daher keine main-Mathode

Quelltext

Screenshot
public class Uhr
{
    private int minute;
    private int stunde;
    private Turtle t;
    
    public Uhr(int pStunde, int pMinute)
    {
        if (stunde==0) {
            stunde=12;
        }
        minute=pMinute;
        stunde=pStunde;
        t=new Turtle();
        t.drehe(-90);
        t.zeige();
    }
 
    public void laufe15Sekunden(){
        for (int k=1;k<=15;k++){
            zeichneUhr(100,8); // 8 entspr. weiß
            stelleWeiter();
            zeichneUhr(100,0); // 0 entspr. schwarz
            t.ruhe(1000);
        }        
    }
    
    public void stelleWeiter()
    {
        minute++;
        if (minute>59) {
            minute=0; 
            stunde++;
            if (stunde>12) {
                stunde=1;
            }
        }
    }
    
    public void zeichneUhr(double pZeigerlaenge, int pFarbe){
        t.setzeFarbe(pFarbe);
        t.drehe(minute*360/60);
        t.vor(pZeigerlaenge);
        t.vor(-pZeigerlaenge);
        t.drehe(-minute*360/60);
        t.drehe(stunde*360/12);
        t.vor(pZeigerlaenge*0.8);
        t.vor(-pZeigerlaenge*0.8);
        t.drehe(-stunde*360/12);        
    }
    
    public int gibVergangeneMinutenSeitMitternacht() {
        int zwischenspeicher;
        zwischenspeicher = minute + stunde * 60;
        return zwischenspeicher;
    }

    public void schreibeUhrzeit() {
        System.out.println("Es ist "+stunde+":"+minute+", das ist "+gibVergangeneMinutenSeitMitternacht()+" Minuten nach Mitternacht");
    }
}

Übungen

Übung
  1. Analysieren Sie die Klasse Uhr.
  2. Klären Sie am Beispiel der Uhr folgende Begriffe:
    • Klasse, Methode, Datentyp, Parameter, Schleife (for), Bedingte Ausführung (if)
  3. Zeichnen Sie das Klassendiagramm zur Klasse Uhr.
  4. Implementieren Sie die Methode stelleUhr(int pStunde, int pMinute), die die Uhrzeit auf die angegebenen Parameter verstellt. Das soll aber nur dann geschehen, wenn eine gültige Uhrzeit übergeben wurde (Stunden bis max. 12 und Minuten bis 59). Falls als Stunde 0 angegeben wurde, soll der Wert auf 12 gestellt werden.
  5. Implementieren Sie die Methode stelleUmXMinutenVor(int x), die die Uhrzeit um x-Minuten verstellt. (Hinweis: es gibt zumindest 2 völlig verschiedene Lösungswege!)
  6. Ergänzen Sie die Uhr um eine Datumsangabe mit Tag und Monat. Implementieren Sie dazu auch stelleDatumWeiter(), die das Datum um einen Tag vorstellt. (Zur Vereinfachung vernachlässigen wir die Schaltjahre).
  7. Zusatzaufgabe: Ergänzen Sie eine Alarmfunktion.
  8. Zusatzaufgabe (Übungen zur Turtlegrafik):
    • Lassen Sie ein Ziffernblatt zeichnen.
    • Wahrscheinlich werden Sie die folgenden Befehle benötigen:
    • fuelleKreis(double radius)
    • schreibe(String text)


Weblinks

Siehe auch