Turtle-Grafik und Java/Array: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
(Unterschied zwischen Seiten)
main>Karl Kirst
KKeine Bearbeitungszusammenfassung
 
main>Ugh
Keine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
[[Bild:Turtleschnecke.png|right|frame|170px|Turtlegrafik - einfaches Beispiel]]
{{Kasten gelb|Dieser Artikel entspricht der Ausarbeitung auf http://informatik.zum.de/pieper/
Dort finden sich ausdruckbare Materialien und die zugehörigen Beispiele.}}


== Über Turtle-Grafik ==
{{Unterrichtsidee}}
==Zur Konzeption==
* Es wird anhand von elementaren Methoden zum Umgang mit dem Array der Array erklärt. Man kann sich dabei auf Mathematik beziehen: x1, x2, x3.. xn als indizierte Variable sollte den Schülern bekannt sein.
* Ein netter Vergleich für Neulinge ist ein "Schubladenschrank" mit nummerierten Schubladen.
* Die Beispiele sind auf den Umgang mit BlueJ hin konzipiert und enthalten daher keine main Methode.
* Es können Parallelen zum Alltag hergestellt werden: Wo nutzen Schüler privat so etwas wie einen Array (z.B. Karteikasten, Buch, Kalender, Handyadressbuch...).


{{Zitat wpde|Mit '''Turtle-Grafik''', auch '''Igelgrafik''', wird eine Bildbeschreibungssprache bezeichnet, bei der man sich vorstellt, dass ein stifttragender Roboter (die Schildkröte, engl. „turtle“) sich auf der Zeichenebene bewegt und mit einfachen Kommandos, wie Stift heben, senken, vorwärts laufen und drehen, gesteuert werden kann. Diese Idee wurde mehrfach realisiert, zum Beispiel als Steuersprache für Stiftplotter (HPGL), als Teil der Programmiersprache für Heimcomputer (Basic, Pascal auf Amiga, Atari) und als Grundidee der pädagogischen Programmiersprache [[LOGO]].  
== Datenstrukturen ==
{{Zitat wpde|In der Informatik ist eine '''Datenstruktur''' eine bestimmte Art, Daten zu verwalten und miteinander zu verknüpfen, um in geeigneter Weise auf diese zugreifen und diese manipulieren zu können. Datenstrukturen sind immer mit bestimmten Operationen verknüpft, um eben diesen Zugriff und diese Manipulation zu ermöglichen.
Das '''Array''' ist die einfachste verwendete Datenstruktur. Es werden hierbei mehrere Variablen vom selben Basisdatentyp gespeichert. Ein Zugriff auf die einzelnen Elemente wird über einen Index möglich. (...)
Im eindimensionalen Fall wird das Array häufig als Vektor und im zweidimensionalen Fall als Tabelle oder Matrix bezeichnet. Arrays sind aber keinesfalls nur auf zwei Dimensionen beschränkt, sondern werden beliebig mehrdimensional verwendet.
Wegen ihrer Einfachheit und grundlegenden Bedeutung bieten die allermeisten Programmiersprachen eine konkrete Umsetzung dieser Datenstruktur als zusammengesetzten Datentyp Array im Grundsprachumfang an.
|Datenstruktur|18.05.2006}}


Im schulischen Bereich werden Turtle-Grafik ähnliche Grafiksysteme weiterhin gerne eingesetzt, weil so einerseits ein motivierender, spielerischer Einstieg gefördert und die geometrische Vorstellung besser geschult wird als bei einem Zugang über absolute Koordinaten. Gegenüber der klassischen Turtle-Grafik von [[LOGO]] sind diese Systeme teils erheblich erweitert worden, so dass sich teilweise echte GUI-Anwendungen (auf schulischem Niveau) damit erstellen lassen. Dies gilt etwa für die [[Python]]-Module xturtle und frog.
|Turtle-Grafik|15.12.2008}} 


==Aufgabenbeispiele==
== Ein erstes Beispiel ==
* Dreieck
<java>
* Viereck
public class ArrayTest1
* n-Eck (Benutzereingabe, Schleife, Funktionen mit Parameter-Übergabe)
{
* Haus des Nikolaus
  private double[] zahlenFeld;
* Quadratspiralen
:: [http://www.drittereihe.de/projekte/JSTurtleGrafikZorn/03a_Die%20Schnecke.html Schnecke] (Beispiel in JavaScript)
  public ArrayTest1()
  {
    zahlenFeld = new double[10]; 
  }
 
  public void setZahlInFeld(int index, double wert)
  {
    zahlenFeld[index]=wert;
  }
 
  public double getZahlInFeld(int index, int wert)
  {
    return zahlenFeld[index];
  } 
}
</java>


===Mit Rekursion===
Die Eigenschaft zahlenfeld wird als Array mit double-Elementen deklariert:
::private double[] zahlenFeld;
Das Kennzeichen hierfür sind die eckigen Klammern.
Im Konstruktor wird dann ein neues Array mit 10 Elementen angelegt:
::zahlenFeld = new double[10]; 
Auf die einzelnen Elemente kann man mit Angabe des Index zugreifen:
::zahlenFeld[5]=27.3;
setzt beispielsweise zahlenFeld mit dem Index 5 auf den Wert 27.3
So erklärt sich die get- und die set-Methode im obigen Beispiel. Natürlich muss bei einem Array noch der Index genannt werden, weshalb sich der Übergabeparameter index ergibt.


{{Siehe|Rekursion}}
{{Kasten gelb|Hinweis:
* Binärer Baum (Rekursion mit Parametern)
Die Zählung eines Arrays beginnt bei 0, daher hat ein Array mit 10 Elementen den höchsten Index 9.}}
* Baum des Pythagoras (Rekursion mit Parametern)
* Kochsche Kurve mit mehreren Varianten (Rekursion mit Parametern)
:: [http://www.zitadelle.juel.nw.schule.de/if/java/tgrafik/Koch.html Kochkurve] Java
* Drachenkurve (Rekursion mit Parametern)
* Sierpinski-Dreieck und Variante (Rekursion mit Parametern)
* "EKG"-Kurve von Clemens Adolphs und Tom Mannheim (Rekursion mit Parametern)
* Pythagoräische Dreiecke
* Naturformen (Baum, Farn)
Der Vorteil der Turtle-Grafik ist, dass die Programme "hübsche" Ergebnisse liefern und deshalb für die Schüler meist interessanter sind, als einfache Textausgaben. Außerdem sind die Programme leicht am eigenen Körper erlebbar und nachvollziehbar.


===Weblinks zu Beispielen===
Greift man auf einen Index außerhalb des festgelegten Bereichs zu, so erhält man eine Fehlermeldung. Bei dem obigen Beispiel reicht es, den Index 10 zu wählen.  
* [http://www.bildung.hessen.de./abereich/inform/skii/material/delphi/rekgraf3.htm Rekursive Grafiken]


==Implementationen==
==length==
Jeder Array hat die Eigenschaft length, mit der die Länge des Feldes festgestellt werden kann.


=== Logo ===
<java>
  public double getLaenge()
  {
    return zahlenFeld.length;
  }
</java>


:→ ''[[Logo]]''
==Ausgabe aller Werte==
Die Ausgabe aller Werte eines Arrays lässt sich einfach mit Hilfe einer einfachen Schleife realisieren, die abbricht, wenn eine Zählvariable (in diesem Fall i) die Länge des Feldes erreicht hat.
Denken Sie daran, dass i zunächst auf 0 und nicht auf 1 gesetzt werden muss.


=== Java ===
<java>
  public void gibAus ()
  {
      int i=0;
      while(i<zahlenFeld.length){
        System.out.println("Index:"+i+" hat den Wert "+zahlenFeld[i]);
        i++;
      }
  }
</java>


:→ ''[[Turtle-Grafik (Java)]]''
==Zufallszahlenfeld==
<java>
  public void macheZufallsfeld (int maximum)
  {
      int i=0;
      while(i<zahlenFeld.length){
        zahlenFeld[i]=(int)(maximum*(Math.random()))+1;
        i++;
      }
  }
</java>
Die oben abgebildete Methode weist dem Feld Zufallszahlen (ohne Nachkommastellen) zu. Das ist sehr praktisch, wenn man das Feld nicht von Hand befüllen möchte. maximum gibt obere Grenze an. Die Zufallszahlen liegen also zwischen 1 und (einschließlich) maximum.


===[[JavaScript]]===
* [http://www.drittereihe.de/projekte/JSTurtleGrafikZorn/index.html Turtlegrafik mit Java-Script] auf Grundlage von Layern


===[[Pascal]]===
== Was ist die größte Zahl im Feld ==
* [http://mksoftware.mk.funpic.de/turtle.php Turtlegrafik mit Pascal und Oberon]
<java>
  public double getGroessteZahl ()
  {
      double maximum=zahlenFeld[0];
      int i=1;
      while(i<zahlenFeld.length){
        if (zahlenFeld[i]>maximum) {
            maximum=zahlenFeld[i];   
        }
        i++;
      }
      return maximum;
  } 
</java>


=== [[Python]] ===
Eine typische Aufgabe im Zusammenhang mit Arrays ist, die größte Zahl zu suchen (z.B. Maximaltemperatur bei einer Temperaturzeitreihe).
Die Standard-Python-Version enthält ein Turtle-Modul, das zur Verwendung nur geladen werden muss.
Dabei geht man wie folgt vor:
* Eine Hilfsvariable maximum bekommt den ersten Wert des Feldes zugewiesen.
* Danach werden alle anderen Werte des Feldes durchlaufen und mit maximum verglichen.
* Jedesmal, wenn ein größerer Wert gefunden wurde, wird maximum überschrieben.


[http://www.viktorianer.de/info/info-python-frog.html Frog] ist ein ergänzendes Modul, das zwar auf der Turtle-Idee basiert (hier ist es ein Frosch, den man bewegt), aber sehr viel mächtiger ist als das Standard-Turtle Modul. Es ist konsequent objektorientiert und eignet sich sowohl für den Einstieg in die Programmierung in Python (ab etwa Klasse 8), bietet aber genügend Reserven auch für eine objektorientierte und ereignisgesteuerte Programmierung in der Sekundarstufe II.
Die folgenden Übungen sind alle ähnlich: Sie benötigen eine Schleife, Hilfsvariablen und zumindest bei 1 und 2 eine if-Abfrage.


'''Python4Kids''' ist ein Buch, das die Turtle-Grafik verwendet um in Python einzusteigen. Dabei werden nach und nach die wichtigsten Befehle vorgestellt. Das Buch ist generell für alle Turtle-Varianten zu empfehlen, da es gute Ideen für den Unterricht liefert.
{{Übung|# Lassen Sie in einer neuen Methode die kleinste Zahl im Feld suchen.
# Lassen Sie in einer neuen Methode den Index und nicht den Wert des größten Elementes zurückgeben.
# Lassen Sie in einer neuen Methode die Summe aller Zahlen im Feld zurückgeben. Der Benutzer soll eine Zahl übergeben. Wenn die Zahl im Feld vorkommt, soll true zurückgegeben werden, wenn nicht false.}}


===[[OpenOffice.org]]===
==siehe auch==
* Eine tolle Idee ist die Nutzung von '''OpenOffice-Makros''' zur Turtle-Programmierung. Die Ausgabe der Bilder erfolgt in einem Draw-Dokument. In dem verlinkten Writer-Dokument findet man eine ausführliche Anleitung und zahlreiche Beispiele, die per Knopf-Druck gestartet werden können. Es wird ausführlich erklärt, wie man die eingebauten Funktionen nutzen kann, um eigene Zeichnungen zu erstellen.
* [[Java]]
*[http://ooextras.sourceforge.net/downloads/projects/index.php?command=download&real=TurtleGraphicsTutorial.sxw Writer-Dokument mit Anleitung] und [http://www.stud.uni-goettingen.de/~openoff/proooboxorg/cdinhalt/templates/projects/TurtleGraphicsTutorial.info Kurz-Info]
*[http://sourceforge.net/project/showfiles.php?group_id=87718&package_id=92957 Turtle-Grafik] und OpenOffice.


=== Squeak ===
==Weblinks==
* http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Array.htm
* http://www.rolandgeyer.at/kurse/german/javsrc/jav017.html


* [[Squeak]] - Turtlegrafik gehört zu den Grundfunktionen eines grafischen Objektes in Squeaktoys
{{Kategorie:Informatik}}
 
 
=== GeoGebra ===
 
* [http://www.geogebra.at/de/wiki/index.php/Turtlegrafik Turtlegrafik mit geogebra] - "Realisierung einer rudimentären Turtlegrafik mit [[GeoGebra]] auf Grundlage eines Objektes Schildkroete."
 
==Modellierung==
 
 
* [http://www.hsg-kl.de/faecher/inf/material/se/swep/beispiele/turtle/index.php Modellierung einer Turtlegrafik]
 
== Linkliste ==
* [http://homepages.uni-tuebingen.de/student/joffrey.fitz/vmdp/vmdp.html Pflanzenwachstum und Turtlegrafik]
* [http://miami.uni-muenster.de/servlets/DocumentServlet?id=1522 Fraktale und Turtle-Grafik]
 
== Siehe auch ==
 
* [[Programmierlernumgebungen]]
 
[[Kategorie:Informatik]]
[[Kategorie:Linksammlung]]
[[Kategorie:Software]]
[[Kategorie:Programmiersprache]]
[[Kategorie:Unterrichtsideen/Informatik]]

Version vom 18. Mai 2006, 06:50 Uhr

Dieser Artikel entspricht der Ausarbeitung auf http://informatik.zum.de/pieper/ Dort finden sich ausdruckbare Materialien und die zugehörigen Beispiele.

Vorlage:Unterrichtsidee

Zur Konzeption

  • Es wird anhand von elementaren Methoden zum Umgang mit dem Array der Array erklärt. Man kann sich dabei auf Mathematik beziehen: x1, x2, x3.. xn als indizierte Variable sollte den Schülern bekannt sein.
  • Ein netter Vergleich für Neulinge ist ein "Schubladenschrank" mit nummerierten Schubladen.
  • Die Beispiele sind auf den Umgang mit BlueJ hin konzipiert und enthalten daher keine main Methode.
  • Es können Parallelen zum Alltag hergestellt werden: Wo nutzen Schüler privat so etwas wie einen Array (z.B. Karteikasten, Buch, Kalender, Handyadressbuch...).

Datenstrukturen

In der Informatik ist eine Datenstruktur eine bestimmte Art, Daten zu verwalten und miteinander zu verknüpfen, um in geeigneter Weise auf diese zugreifen und diese manipulieren zu können. Datenstrukturen sind immer mit bestimmten Operationen verknüpft, um eben diesen Zugriff und diese Manipulation zu ermöglichen.

Das Array ist die einfachste verwendete Datenstruktur. Es werden hierbei mehrere Variablen vom selben Basisdatentyp gespeichert. Ein Zugriff auf die einzelnen Elemente wird über einen Index möglich. (...) Im eindimensionalen Fall wird das Array häufig als Vektor und im zweidimensionalen Fall als Tabelle oder Matrix bezeichnet. Arrays sind aber keinesfalls nur auf zwei Dimensionen beschränkt, sondern werden beliebig mehrdimensional verwendet. Wegen ihrer Einfachheit und grundlegenden Bedeutung bieten die allermeisten Programmiersprachen eine konkrete Umsetzung dieser Datenstruktur als zusammengesetzten Datentyp Array im Grundsprachumfang an.


Wikipedia-logo.png Datenstruktur, Wikipedia – Die freie Enzyklopädie, 18.05.2006 - Der Text ist unter der Lizenz „Creative Commons Attribution/Share Alike“ verfügbar; zusätzliche Bedingungen können anwendbar sein. Siehe die Nutzungsbedingungen für Einzelheiten. In der Wikipedia ist eine Liste der Autoren verfügbar.



Ein erstes Beispiel

<java> public class ArrayTest1 {

 private double[] zahlenFeld;

 public ArrayTest1()
 {
   zahlenFeld = new double[10];   
 }
 
 public void setZahlInFeld(int index, double wert)
 {
   zahlenFeld[index]=wert;
 }
 
 public double getZahlInFeld(int index, int wert)
 {
   return zahlenFeld[index];
 }  

} </java>

Die Eigenschaft zahlenfeld wird als Array mit double-Elementen deklariert:

private double[] zahlenFeld;

Das Kennzeichen hierfür sind die eckigen Klammern. Im Konstruktor wird dann ein neues Array mit 10 Elementen angelegt:

zahlenFeld = new double[10];

Auf die einzelnen Elemente kann man mit Angabe des Index zugreifen:

zahlenFeld[5]=27.3;

setzt beispielsweise zahlenFeld mit dem Index 5 auf den Wert 27.3 So erklärt sich die get- und die set-Methode im obigen Beispiel. Natürlich muss bei einem Array noch der Index genannt werden, weshalb sich der Übergabeparameter index ergibt.


Hinweis: Die Zählung eines Arrays beginnt bei 0, daher hat ein Array mit 10 Elementen den höchsten Index 9.

Greift man auf einen Index außerhalb des festgelegten Bereichs zu, so erhält man eine Fehlermeldung. Bei dem obigen Beispiel reicht es, den Index 10 zu wählen.

length

Jeder Array hat die Eigenschaft length, mit der die Länge des Feldes festgestellt werden kann.

<java>

 public double getLaenge()
 {
   return zahlenFeld.length;
 }

</java>

Ausgabe aller Werte

Die Ausgabe aller Werte eines Arrays lässt sich einfach mit Hilfe einer einfachen Schleife realisieren, die abbricht, wenn eine Zählvariable (in diesem Fall i) die Länge des Feldes erreicht hat. Denken Sie daran, dass i zunächst auf 0 und nicht auf 1 gesetzt werden muss.

<java>

 public void gibAus ()
 {
     int i=0;
     while(i<zahlenFeld.length){
        System.out.println("Index:"+i+" hat den Wert "+zahlenFeld[i]);
        i++;
     }
 }

</java>

Zufallszahlenfeld

<java>

 public void macheZufallsfeld (int maximum)
 {
     int i=0;
     while(i<zahlenFeld.length){
        zahlenFeld[i]=(int)(maximum*(Math.random()))+1;
        i++;
     }
 }

</java> Die oben abgebildete Methode weist dem Feld Zufallszahlen (ohne Nachkommastellen) zu. Das ist sehr praktisch, wenn man das Feld nicht von Hand befüllen möchte. maximum gibt obere Grenze an. Die Zufallszahlen liegen also zwischen 1 und (einschließlich) maximum.


Was ist die größte Zahl im Feld

<java>

 public double getGroessteZahl ()
 {
     double maximum=zahlenFeld[0];
     int i=1;
     while(i<zahlenFeld.length){
        if (zahlenFeld[i]>maximum) {
           maximum=zahlenFeld[i];    
        }
        i++;
     }
     return maximum;
 }  

</java>

Eine typische Aufgabe im Zusammenhang mit Arrays ist, die größte Zahl zu suchen (z.B. Maximaltemperatur bei einer Temperaturzeitreihe). Dabei geht man wie folgt vor:

  • Eine Hilfsvariable maximum bekommt den ersten Wert des Feldes zugewiesen.
  • Danach werden alle anderen Werte des Feldes durchlaufen und mit maximum verglichen.
  • Jedesmal, wenn ein größerer Wert gefunden wurde, wird maximum überschrieben.

Die folgenden Übungen sind alle ähnlich: Sie benötigen eine Schleife, Hilfsvariablen und zumindest bei 1 und 2 eine if-Abfrage.


Übung
  1. Lassen Sie in einer neuen Methode die kleinste Zahl im Feld suchen.
  2. Lassen Sie in einer neuen Methode den Index und nicht den Wert des größten Elementes zurückgeben.
  3. Lassen Sie in einer neuen Methode die Summe aller Zahlen im Feld zurückgeben. Der Benutzer soll eine Zahl übergeben. Wenn die Zahl im Feld vorkommt, soll true zurückgegeben werden, wenn nicht false.


siehe auch

Weblinks

Dies ist eine Kategorieseite. Sie listet alle Seiten in der Kategorie „Informatik“ sowie alle Unterkategorien der Kategorie „Informatik“, sofern welche vorhanden sind.