Das wichtigste zu logo (ucblogo)

Ähnliche Dokumente
1. Arbeit DiffKurs 8 Informatik - Sporenberg Schuljahr 2011/12 Marl,

Programmieren mit xlogo

Programmieren mit LOGO

Turtlegrafik in Logo

Lektion 3: Wiederholungen

1 Grundbefehle. Gerade Linien zeichnen

Lektion 1: Erste Befehle zur Turtle-Geometrie

Programmieren mit Python

StarLogo Befehle. Erzeugt number Schildkröten. Erzeugt number Schildkröten, die jeweils die list of commands ausführen. Entfernt alle Schildkröten.

Die Turtle im Koordinatensystem 1

Lektion 4: Prozeduren mit Parametern

PROGRAMMIEREN MIT LOGO

Bisher wurden nur Prozeduren behandelt, in denen eine feste Abfolge von Befehlen durchzuführen war. Mit den Befehlswörtern

Lektion 5: Turtle-Geometrie im Koordinatensystem

PROGRAMMIEREN MIT LOGO

PROGRAMMIEREN MIT LOGO

PROGRAMMIEREN MIT LOGO. Kadervernetzung, Kantonsschule Wil Samstag,

PROGRAMMIEREN MIT LOGO

Tutorial zum Umgang mit Scratch

Inhaltsverzeichnis. 52 Weitere Publikationen. 54 Eigene Notizen. XLogo Programmieren

3 Programme benennen und aufrufen

L i n i e n z e i c h n e n? Spielen und lernen? Logisch! Spielen und lernen? Logisch!

Kapitel 2 Einfache Schleifen mit dem Befehl repeat

Turtlegrafik programmieren mit TigerJython

PROGRAMMIEREN MIT LOGO

Parallele und funktionale Prog. Wintersemester 2011/ Übung Abgabe bis , 10:00 Uhr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Programmieren mit LOGO

Lektion 6: Prozeduren mit Parametern Übergabe von Werten

Die Turtle im Koordinatensystem 2

QUADRATISCHE GLEICHUNGENN

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Lektion 8. Das Konzept von Variablen und der Befehl make

Praktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration

Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe

Quick-Start Informatik Programmieren in Python Teil 2

Brainfuck Interpreter für ZX81

Funktionen in JavaScript

Lektion 2: Prozeduren

WS2018/ Oktober 2018

Klassenvariablen, Klassenmethoden

Analysis I. Vorlesung 9. Reihen

WS2017/ Oktober 2017

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen.

1.3 Handhabung eines Programmiersystems

Neben dem Hauptspeicher der Zentraleinheit (Arbeitsspeicher) benötigt man Speicher, mit deren Hilfe man Informationen (Daten) sichern kann:

6 Ein- und Ausgabe. Bisher war unsere (Bildschirm-) Ausgabe leichtflüchtig (

Ganzrationale Funktionen

Erzeugende Funktionen

Übungsaufgaben. Ein Teil dieser Aufgaben sind in exakter oder bearbeiteter Form übernommen aus:

Ideen und Konzepte der Informatik

JAVA - Methoden

Übersicht Shell-Scripten

Greenfoot: Verzweigungen Nicolas Ruh und Dieter Koch

2 Programmieren in Java I noch ohne Nachbearbeitung

Umsetzung einer Klassenkarte in einer Programmiersprache

Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Funktionen in JavaScript

Greenfoot: Verzweigungen

Kapitel 1: Informationsverarbeitung durch Programme

Runde 2: Von der Statik zur Dynamik - Team Header

Objektorientierte Programmierung

1. LPC - Lehmanns Programmier Contest - Lehmanns Logo

Logo-Aufgaben mit Verbindung zur Mathematik

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

JAVA - Methoden - Rekursion

Eine JAVA Einführung ... Quellcode:... COMA Übung 3. T.Bosse. A.Griewank. Vorschau JAVA Programme Sprachen Kate

Ein erstes "Hello world!" Programm

Demo: Mathe-CD. Prüfungsaufgaben Mündliches Abitur. Analysis. Teilbereich 1: Ganzrationale Funktionen 1. März 2002

Aufgabenblatt 3. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Einführung in MATLAB für Maschinenbauer im ersten Semester

Algorithmen & Programmierung. Rekursive Funktionen (2)

JAVA für Nichtinformatiker - Probeklausur -

Mathematik und Geometrie mit Logo

Serie 1 Klasse Vereinfache. a) 2(4a 5b) b) 3. Rechne um. a) 456 m =... km b) 7,24 t =... kg

Aufgabe 1 (12 Punkte)

; Programmausführung stoppt ; sofortiges Schließen des Fensters wird so verhindert

Heidi Gebauer Juraj Hromkovič Lucia Keller Ivana Kosírová Giovanni Serafini Björn Steffen. Programmieren mit LOGO

Mathematische Funktionen

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Programmieraufgaben. 1. Hello World! Schreibe ein Programm, dass auf der Konsole den Text Hello World! ausgibt.

Eine zweidimensionale Stichprobe

1,2,3,4,5,... Dabei ist die Reihenfolge wichtig, jede Zahl hat also ihre feste Position. Die Folge 2,1,4,3,... ist eine andere als 1,2,3,4,...

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Programmieren mit Jython Teil 4: Selektion und Zufallszahlen

Variablen und Datentypen

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Einstieg in die Informatik mit Java

Informatische Konzepte in LOGO

5 Programme mit Parametern

01 Einführung in PHP. Einführung in PHP 1/13 PHP in Aktion

Turtlegrafik und Fraktale

Grundlagen der Informatik

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Transkript:

Das wichtigste zu logo (ucblogo) Daniel Mohr 2. April 2006 Inhaltsverzeichnis 1 Ein paar Worte zur Geschichte 1 2 Turtle-Grafik 3 3 Dateien laden/speichern 3 4 Prozeduren 4 5 Wiederholungsanweisung 4 6 Variable, Ausgabe und Rechnen 5 7 Fallunterscheidung 7 8 Rekursion 8 9 Weitere Aufgabe 11 10 Quellen, Literatur 11 1 Ein paar Worte zur Geschichte Die Programmiersprache Logo ist eine von Seymour Papert entwickelte, mit LISP verwandte Sprache aus den 60er Jahren. Als Interpretersprache ist Logo leicht zu erlernen, hat aber eine für die Zeit der Heimcomputer, als diese Sprache die größte Verbreitung fand, sehr hohe Leistungsfähigkeit, dank der dynamischen Listen aus Lisp, frei definierbaren und rekursiv aufrufbaren 1

Funktionen und einiger anderer Elemente. Trotzdem konnte die Programmiersprache sich nicht gegenüber anderen ersten Anfängerprogrammiersprachen wie z. B. BASIC durchsetzen, was auch daran lag, dass sie kindgerecht entwickelt und daher von vielen unterschätzt wurde. Für die damalige Zeit sehr fortschrittliche Elemente wie z. B. eine dynamische Datentyperkennung sorgten auch für Geschwindigkeitsnachteile. Außerdem widersprach die Philosophie der Programmiersprache den damals aufkommen Gedanken der strukturierten Programmierung: Schleifen sind normalerweise nur über Rekursion oder in Listen eingebettete Programmteile realisierbar. Rekursion galt oftmals als schwer lesbar und beansprucht sehr viel Speicher und Rechenzeit. In Daten eingebetteter und damit zur Laufzeit veränderlicher Code galt als Rezept für unvorhersagbare Programmeigenschaften und in Multiuser-Umgebungen (damit auch in Netzwerken) als Sicherheitsproblem. In modernen Programmiersprachen finden sich die Möglichkeiten dieser Programmiersprache allerdings wieder - teilweise in Form von Objekten bzw. Klassen. Als Designprinzip galt das Prinzip: Low floor, high ceiling, zu deutsch etwa: leichter Einstieg aber hoch hinaus. Die Mächtigkeit und Langlebigkeit von LOGO als Lernumgebung ist Produkt seiner a) mathematischen, b) psychologisch-pädagogishen und c) softwaretechnischen Fundiertheit. 2

2 Turtle-Grafik Befehl Kurzform Beschreibung textscreen ts Text-Modus fullscreen fs Graphik-Modus splitscreen ss gemischter Modus home Die Schildkröte (turtle) bewegt sich zur Mitte des Bildschirms clean mit Ausrichtung nach oben. (0 ) Der Bildschirm wird gelöscht, die Position der Schildkröte ändert sich nicht. clearscreen cs home und clean zusammen hideturtle ht Die Schildkröte wird unsichtbar. showturtle st Die Schildkröte wird sichtbar. setpencolor farbewert setpc farbwert Der Schildkröte wird die Zeichenfarbe farbwert zugewiesen. penup pu Der Stift wird von der Zeichenfläche genommen. pown pd Der Stift wird auf die Zeichenfläche gesetzt. right winkel rt winkel Die Schildkröte dreht sich um den Winkel winkel nach Rechts. left winkel lt winkel Die Schildkröte dreht sich um den Winkel winkel nach Links. forward länge fd länge Die Schildkröte bewegt sich um länge Schritte nach vorne. back länge bk länge Die Schildkröte bewegt sich um länge Schritte zurück. 3 Dateien laden/speichern Befehl load "dateinameundpfad save "dateinameundpfad Beschreibung Die Datei dateinameundpfad wird geladen. Es werden alle Befehle in dieser Datei abgearbeitet. Prozeduren, Variablen etc. werden in die Datei dateinameundpfad gespeichert. Diese Datei kann mit load wieder geladen werden und der jetzige Zustand wiederhergestellt werden. 3

4 Prozeduren Mit dem Schlüsselwort to beginnt eine Prozedur und mit dem Schlüsselwort et diese Prozedur. Beispiel: to dreieck :s fd :s rt 120 fd :s rt 120 fd :s rt 120 Hierbei wurde s als interne Variable in der Prozedur definiert und muß beim Aufruf übergeben werden. Beispiel: dreieck 50 Diese Prozedur kann auch direkt in eine einfache Text-Datei geschrieben werden und anschließ mit load geladen werden. Aufgabe 4.1 Schreibe eine Prozedur quadrat, die ein Quadrat zeichnet. Dieser Prozedur wird die Seitenlänge übergeben. 5 Wiederholungsanweisung Mit repeat kann ein Anweisungsblock wiederholt werden. Beispiel: repeat 4 [fd 50 rt 90] Dabei muß der Anweisungsblock in Eckigenklammern stehen. Beispiel: repeat 4 [dreieck 50 pu fd 100 rt 90 pd dreieck 50] 4

Aufgabe 5.1 Schreibe eine Prozedur rechteck, die ein Rechteck zeichnet. Dieser Prozedur wird Breite und Länge übergeben. 6 Variable, Ausgabe und Rechnen Mit dem Schlüsselwort make wird eine Variable erzeugt und mit einem Wert versehen. Beispiel:? make "a 5? print :a 5? make "b :a*2? print :b 10 Nach dem Schlüsselwort make kommt nach einem Leerzeichen ein Anführungsstrich um einen Text (String) als Variablennamen einzuleiten. Wieder mit einem Leerzeichen getrennt folgt der Wert. Das Schlüsselwort print erzeugt eine Ausgabe auf dem Bildschirm also hier vom Wert der Variablen; auf den Wert einer Variable wird zugegriffen indem man einen Doppelpunkt vor den Variablennamen stellt. Wenn mit einer print-anweisung ein Wort ausgegeben werden soll, so muß dieses Wort mit Anrführungsstriche eingeleitet werden:? print "Hallo Hallo Soll eine print-anweisung mehrere Objekte ausgeben, so muß man die gesamte Anweisung in Klammern setzen und jedes Objekt muß ggf. mit Anführungsstrichen versehen werden:? (print 3 "ist "eine "Zahl) 3 ist eine Zahl? (print 3 "plus 4 "ist 7) 3 plus 4 ist 7 Aufgabe 6.1 Schreibe eine Prozedur doppeltertext, die einen Text doppelt aneinander schreibt. Aufruf: doppeltertext "bla Ausgabe: bla bla 5

Mit den im Rechner üblichen Operatoren + - * / kann gerechnet werden:? print 3*4 12? print 3+4 7? print 3/4 0.75? print 3-4 -1 Mit der vorgegebenen Prozedur int bekommt man den Ganzzahlanteil einer Zahl:? print int 1.5 1? print int -1.5-1? print int 3/4 0? print int 4/3 1 Mit der vorgegebenen Prozedur sqrt kann man die Quadratwurzel einer Zahl berechnen lassen:? print sqrt 4 2? print sqrt 5 2.23606797749979 Beispiel einer Prozedur, die ein n-eck zeichnet und dazu den nötigen Winkel berechnet: to neck :n :s make "w 360/:n repeat :n [fd :s rt :w] Aufruf: neck 20 30 Beispiel: to berechnequadrat :x output :x * :x Das Schlüsselwort output gibt den berechneten Wert zurück und kann an der Stelle des Aufrufes verwet werden: 6

? print berechnequadrat 11 121? print (berechnequadrat 11)-20 101 Aufgabe 6.2 Schreibe eine Prozedur quadratischefunktion, die eine quadratische Funktion f(x) = ax 2 + bx + c an einer Stelle auswertet. Dazu müssen der Prozedur 4 Werte übergeben werden: a, b, c und x Nutze hierbei die bereits erklärte Prozedur berechnequadrat. Berechne damit f(x) = x 2 + 2x + 3 an der Stelle x = 0. 7 Fallunterscheidung Mit dem Schlüsselwort ifelse kann eine Fallunterscheidung getroffen werden. Als erstes wird die Frage übergeben. Diese Frage wird dann mit ja oder mit nein beantwortet. Wenn die Frage erfüllt ist, dann wird der zweite Parameter und sonst der dritte Parameter ausgeführt.? ifelse (1<2) [print "ja] [print "nein] ja Die Anweisung läßt sich so verstehen: Wenn (eins kleiner als 2) ist, dann [gebe ja aus] und sonst [gebe nein aus].? ifelse (3<=2) [print "ja] [print "nein] nein Hierbei wurde gefragt, ob 3 kleiner oder gleich 2 ist. Weitere Bedeutungen sind in folger Tabelle aufgelistet: Eingabe Bedeutung = gleich < kleiner <= kleiner oder gleich > größer >= größer oder gleich Das folge Beispiel gibt das Maximum der beiden Parameter zurück: to max :x :y ifelse (:x < :y) [output :y] [output :x] 7

So könnten Aufrufe aussehen:? print max 4 5 5? print max 6 3 6? print max 6 max 30-50 30? print max max 6 30-50 30 Aufgabe 7.1 Schreibe ein Programm min, welches das Minimum zweier Zahlen zurückgibt! Aufgabe 7.2 Schreibe eine Prozedur geradeungerade, welches auf den Bildschirm schreibt, ob eine Zahl gerade ist oder ungerade! Aufgabe 7.3 Schreibe eine Prozedur loesequadratischegleichung, welches eine quadratische Gleichung löst! Dazu müssen 3 Werte übergeben werden: a, b und c 8 Rekursion Man kann Prozeduren auch sich selber wieder aufrufen lassen dies nennt sich Rekursion. Dabei ist natürlich darauf zu achten, dass dies nicht unlich oft geschieht, sondern auch irgwann et. Beispiel: Es soll das Kapital berechnet werden, wenn ein Anfangskapital k mehrere Jahre n bei gleichem Zinssatz p verzinst wird. to zinseszins :k :n :p ifelse (:n > 0) [ output zinseszins (:k*(1+:p)) (:n-1) :p ] [ output :k ] Damit kann nun bei einem Kapital von 100 berechnet werden, was man nach 10 Jahren bei 5 % = 0.05 hat:? print zinseszins 100 10 0.05 162.889462677744 Aufgabe 8.1 Schreibe eine Prozedur zinseszinsgewinn, die den Gewinn bei einer derartigen Geldanlage berechnet! 8

Aufgabe 8.2 Schreibe eine Prozedur potenz, die durch Rekursion die Potenz x n für eine natürliche Zahl n berechnet! Beispiel: Sierpinski-Dreieck Unter dem Sierpinski-Dreieck versteht man eine Figur, die dadurch entsteht, dass man ein gleichseitiges Dreieck nimmt, die Seitenlänge halbiert und damit neue Dreiecke in alle 3 Ecken zeichnet. Dieser Prozeß wird dann beliebig oft wiederholt. Da wir das nicht unlich oft machen können, müssen wir irgwann abbrechen beispielsweise sobald die Seitenlänge zu klein wird. to sierpinski :s ifelse (:s > 20) [ repeat 3 [sierpinski (:s/2) fd :s*2 rt 120] ] [ repeat 3 [repeat 3 [fd :s rt 120] fd :s*2 rt 120] ] Der Aufruf sierpinski 100 liefert folges Bild: 9

Aufgabe 8.3 Schreibe eine Prozedur koch, die die Koch-Kurve zeichnet! Die Koch-Kurve entsteht aus einer Strecke indem man das mittlere Drittel der Strecke entfernt und stattdessen ein gleichseitiges Dreieck an gleiche Stelle zeichnet. Nun wiederholt man diesen Vorgang für jede Teilstrecke. Aufgabe 8.4 Schreibe eine Prozedur kochflocke, die 3 Koch-Kurven so zusammensetzt, dass eine Schneeflocke erkennbar wird. Man kann auf sehr einfache Weise durch Rekursion Muster erzeugen: to spirale :s :w fd :s rt :w spirale :s (:w+10) Beispiele: 10

spirale 20 20 spirale 30 1 spirale 14 3 9 Weitere Aufgabe Aufgabe 9.1 Schreibe eine Prozedur abs, die den Betrag einer Zahl berechnet! Aufgabe 9.2 Schreibe eine Prozedur vorzeichen, die das Vorzeichen einer Zahl zurückgibt! Diese Prozedur soll also 1 bei negativen Zahlen und sonst 1 zurückgeben. Aufgabe 9.3 Schreibe eine Prozedur runden, die eine Zahl rundet! Aufgabe 9.4 Schreibe eine Prozedur geometrischefolge, die das n-te Glied der geometrischen Folge {a q n 1 } n N berechnet. Aufgabe 9.5 Schreibe eine Prozedur geometrischepartialsumme, die die Summe der ersten n Glieder der geometrischen Folge {a q n 1 } n N berechnet. Berechne damit die 1000-te Partialsumme der Folge { ( 1 2) n 1}n N. Aufgabe 9.6 Berechne näherungsweise eine Lösung der Gleichung x n = a Aufgabe 9.7 Berechne näherungsweise eine Lösung der Gleichung a x = b 10 Quellen, Literatur ucblogo: http://http.cs.berkeley.edu/~bh/ wikipedia: http://de.wikipedia.org/wiki/logo_%28programmiersprache%29 11