Table of Contents

Animation: Federpendel - Sinus - Kreisbewegung: 1:50 und 4:36 in https://www.youtube.com/watch?v=GqkND_7Kcc8

Fadenpendel - Kreisbewegung: https://www.youtube.com/watch?v=BrQhXh9jcOk

Beides in einem (etwas seltsam präsentiert): https://www.youtube.com/watch?v=JSBw-JyFgZk

https://en.wikipedia.org/wiki/Simple_harmonic_motion#/media/File:Simple_Harmonic_Motion_Orbit.gif

evtl. auch https://www.mathsisfun.com/algebra/trig-sin-cos-tan-graphs.html

harmonische Schwingung zum Ausprobieren verschiedener Parameter: https://www.geogebra.org/classic/gmvkg3uc

Ideensammlung

Eventuell bisschen allgemeines erklären: Sprache (Python), Programm, Interpreter (heisst ebenfalls Python).

Ideen: Erst mit Python-Shell (auch REPL (= read-eval-print loop, vgl. https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) genannt, also Python im interaktiven Modus).

Python-Shell meist zum Ausprobieren kleiner Sachen.

Python ist eine Programmiersprache. Die App “Python”, die wir heruntergeladen haben, dient dazu, Python-Programme Schritt für Schritt in eine dem Computer verständliche Maschinensprache zu übersetzen. Solche Übersetzungsprogramme nennt man Interpreter (to interprete = dolmetschen). Deswegen sollte man diese App eigentlich als “Python-Interpreter” bezeichnen.1)

Mehrere Möglichkeiten, eine solche zu öffnen:

print(“Hello World”)

Arithmetische Ausdrücke - Rechnen mit Zahlen: ''+'', ''-'', ''*'', ''/'', ''//'', ''%'', ''**'' Aufgabe: Was bedeuten ''//'', ''%'', ''**'' 2 hoch 100 (Wurzel?): import math, math.sqrt(3) oder from math import * sqrt(3) oder 3**0.5 Strings und Rechnen mit Strings: ''+'' und ''\n'' " als Begrenzungszeichen? Zahl mal String. Beispiele: * print(n* "Informatik ist mein Lieblingsfach.") * dasselbe mit Leerzeichen, mit ''\n'' * oder print(10 * "eat, sleep, bike, repeat!") * Mops * * print(10*"+"+"\n") * print(10*(10*"+"+"\n")) * print(2+3) * print("2+3") wo?: Datentypen und Variablen Zuweisung * x = 2+5 * s = "hallo" * type(s) * unterscheide ''x = "2+5"'' und ''x=2+5''. Erkläre, dass Zuweisung auswertet. * erkläre: x = x + 5 * Initialisierung notwendig. * gedicht = 'Ein Mops kam in die Küche, und stahl dem Koch ein Ei. Da nahm der Koch die Kelle, und schlug den Mops zu Brei\n\n Da kamen viele Möpse und gruben ihm ein Grab und setzen ihm ein\' Grabstein, worauf geschrieben stand:\n\n' * print(10 * gedicht) Erkläre, was Python-Shell ausgibt. exit() oder ''Ctrl+D'' zum Verlassen der REPL Erkläre, wie man das in einem Programm macht. Nun brauche ''print(...)''. ''input'': Liefert **stets** einen String. Muss umwandeln ("cast-en"). Aufgabe: Lies Namen ein, begrüsse namentlich. Aufgabe: Lies zwei Zahlen ein, gib Summe und Produkt aus. Aufgabe: Gib "Schachfeld" variabler Grösse aus (möglichst kurzes Programm!) ''print'' mit mehreren Argumenten? ohne Argument = neue Zeile? f-strings: Aufgaben 1 - 5 auf https://www.w3schools.com/python/python_variables_exercises.asp

Derselbe Code als pdf (eventuell für handschriftliche Eintragungen bzw. Markierungen nützlich)

obiges Python-Programm als pdf

Chaos-Spiel als Flussdiagramm (= flow chart)

Ich zeichne zugehöriges Flussdiagramm (an Tafel oder per Drawboard). Eventuell erste Erklärungen zu Kontrollstrukturen, hier vor allem Schleife, Entscheidung (= Verzweigung).

Erster Versuch Koordinatengrafik mit Python

Koordinatengrafik mit Python

Speichere die folgende Grafik-Bibliothek unter dem Namen kantigrafik.py in deinem Python-Verzeichnis ab (Anklicken mit rechter Maustaste).

Neue Version vom 01.12.2022: (HABE DAS FILE IM MEDIAMANAGER DURCH NEUE VERSION ÜBERSCHRIEBEN … also eventuell kleine Änderungen nötig.)

kantigrafik.py

Versuche anhand des folgenden Programms die wesentlichen Funktionen der Bibliothek kantigrafik zu verstehen:

demo-kantigrafik.py

(1) Ergänze das unten stehende Python-Programm so, dass ein rechtwinkliges Dreieck gezeichnet wird, dessen Katheten parallel zu den Koordinatenachsen sind und Länge a und b haben.

Eine Skizze auf einem Blatt Papier mag helfen.

Hinweis:

Hinweis:

Nimm als Eckpunkte des Dreiecks den Ursprung $(0,0)$ und den Punkt $(a,0)$ und als dritten Punkt … (bitte selbst überlegen, etwa per Skizze).


(2) Zeichne zusätzlich den Umkreis dieses rechtwinkligen Dreiecks.

Beachte: Ändert man die Werte der Variablen a und b, so muss sich die Zeichnung entsprechend ändern.

Hinweis:

Hinweis:

Denke an einen griechischen Mathematiker, dessen Namen mit T beginnt.

rechtwinkliges-dreieck-mit-umkreis.py
from kantigrafik import *
zeichenfenster(-4, -4, 8, 6, 100, "Rechtwinkliges Dreieck mit Umkreis")
a = 4
b = 3
 
# Hier deinen Code ergänzen!
 
zeige()
warte_auf_klick()

Die Befehle der Bibliothek ''kantigrafik''

Die wichtigsten Befehle der Bibliothek kantigrafik an Beispielen erläutert:

  • zeichenfenster(-3, -2, 8, 5, 100): Öffnet ein Zeichenfenster mit einem (unsichtbaren Koordinatensystem), dessen $x$-Koordinaten von -3 bis 8 gehen und dessen $y$-Koordinaten von -2 bis 5 gehen. Der Punkt $(-3,-2)$ ist also der Punkt ganz links unten und der Punkt $(8,5)$ ist der Punkt ganz rechts oben. Die Zahl 100 legt fest, dass eine Einheit des Koordinatensystems auf dem Bildschirm 100 Pixel lang sein soll.
  • linie(3, 7, 1, -2): Zeichnet eine Linie vom Punkt $(3,7)$ zum Punkt $(1, -2)$.
  • kreis(5, 2, 7): Zeichnet einen Kreis mit Mittelpunkt $(5,2)$ und Radius $7$.
  • punkt(3, -2): Zeichnet einen Punkt an der Stelle $(3, -2)$.
  • raster(): Zeichnet das “Koordinatenraster” ein.
  • x_achse(): Zeichnet die $x$-Achse ein.
  • y_achse(): Zeichnet die $y$-Achse ein.
  • schreibe(3, -2, “Kantigrafik-Demo”, 0.5): Schreibt den angegebenen Text in der Grösse 0.5 (in Einheiten) mit “linker unterer Ecke” am Punkt (3, -2).
  • grad_cos(45): Berechnet den Cosinus des (in Grad angegebenen) Winkels $45^\circ$.
  • grad_sin(45): Analog für Sinus.
  • grad_tan(45): Analog für Tangens.
  • farbe(ROT): Setzt die Farbe auf rot. Andere vordefinierte Farben sind GRUEN, BLAU, GELB, MAGENTA, CYAN, WEISS, SCHWARZ, GRAU. Weitere Farben bekommt man mit Funktionsaufrufen wie farbe(224, 114, 213) unter Verwendung des RGB-Farbmodells (RGB steht für Red-Green-Blue; verwende etwa den RGB Color Calculator auf https://www.w3schools.com/colors/colors_rgb.asp).
  • zeige(): Mit diesem Befehl wird alles bisher Gezeichnete sichtbar. (Die vorigen Zeichenbefehle zeichnen in Wirklichkeit “im Hintergrund”. Erst mit dem Funktionsaufruf zeige() wird alles angezeigt.)

Zum Anzeigen des bereits Gezeichneten muss man den Befehl zeige() verwenden.

  • pause(1.5): Pausiert 1.5 Sekunden.
  • speichere(“zeichnung.jpeg”): Speichert den Inhalt des Zeichenfensters in der Datei “zeichnung.jpeg”.
  • warte_auf_klick(): Lässt das Zeichenfenster so lange offen, bis der Benutzer hineinklickt oder Escape drückt oder es schliesst oder die Taste “q” drückt. Dieser Befehl steht üblicherweise ganz am Ende des Programms (und nirgendwo sonst).

Link zur Kursseite

Link zur Seite Zur Kursseite

Template für Brühl

lehrkraefte:snr:informatik:bruehl-2022:template

Videolektion, Sicherung der Doku-Wiki-Page

lehrkraefte:snr:mathematik:videolektion-sicherung

Gutes Zeug, das ich für Brühl erstellt hatte (jedoch "too advanced/optimistic")

Ideen

Altes Material

Informatik

Brühl 2022

Erste Schritte mit dem Roboter

Roboter in Betrieb nehmen

Je zwei Leute bekommen einen Roboter. Bitte sorgsam behandeln!

Partnerarbeit

Kopiere das folgende Python-Programm in Tigerjython.

Es gibt zwei Ausführungsarten:

  • Simulationsmodus mit dem üblichen Run-Button .
  • Realmodus/Robotermodus per Robotik-Button .

Probiere beide aus. Im Robotermodus sollte sich der Roboter bewegen. Er kann dann auch ausgesteckt werden und das Programm kann mit dem Knopf neben der USB-Buchse am micro:bit gestartet werden.

from mbrobot import * 
 
forward()
delay(2000)
right()
delay(400)  
forward()
delay(2000)
stop()

Aufgabe 5

Partnerarbeit

Am obigen Programm siehst du, dass sich die Befehle für den Roboter von den Befehlen für die Schildkröte unterscheiden. Statt Längen oder Winkel direkt anzugeben, führt der Roboter die aktuelle Bewegung so lange durch, bis eine neuer Befehl kommt. Der Befehl delay(2000) steht beispielsweise für “2000 Millisekunden abwarten (und dabei weiterhin die aktuelle Bewegung durchführen)”.

Finde durch Experimentieren heraus:

  1. Wieviele Millisekunden braucht der Roboter, um eine Strecke von 10 cm abzufahren.
  2. Wieviele Millisekungen braucht der Roboter für eine Bewegung um $90^\circ$.

Verwende diese Erkenntnisse, um dein Turtle-Programm für die quadratische Spirale in ein Roboter-Programm umzuschreiben (zuerst 10 cm vorwärts, dann nach jedem rechtwinkligen Abbiegen 10 cm weiter fahren als zuvor).

Aufgabe 6

Lies Befehle aus dem Abstandssensor aus und gib diese per print aus. Mit while True:-Schleife? Bereits if verwenden?

Rasenmäher-Roboter?

Halte konstanten Abstand.

Als Ausblick auf das nächste Mal.

Eher keine Hausaufgabe…

Alte Zusammenfassung

Erst selbst überlegen!

Erst selbst überlegen!

  • Ich kann ein geometrisches Problem wie das Zeichnen einer Spirale in ein Python-Programm übersetzen (im Kopf oder via Algorithmus bzw. Flussdiagramm).
  • Ich kann Variablen sinnvoll zur Steuerung des Programms und der Turtle einsetzen: Ich führe für alles, was ich gerne speichern und eventuell verändern oder später ausgeben möchte, eine neue Variable ein.
  • Ich kann den Roboter in Betrieb nehmen und kenne grundlegende Befehle zur Steuerung des Roboters.

Alter Anfang if-Selektion

Oft sollen gewisse Programmteile nur unter gewissen Bedingungen ausgeführt werden.

In unserem Kuchenback-Flussdiagramm wird im grünen Bereich abgefragt, ob der Kuchen schmeckt: Abhängig von der Antwort geht es weiter im Flussdiagramm.

Das geht in Python durch if-Selektion.

Aufgabe 5, Funktionen ohne Parameter und mit Rückgabewert definieren

Einzelarbeit, ca. 5 Minuten

Der folgende Code definiert eine Funktion richtung(). Er gibt die aktuelle Ausrichtung der Schildkröte in Grad an.

from gturtle import *
 
# In der folgenden Zeile beginnt die Definition der Funktion
def richtung():
    w = heading()
    while r < 0:
        w = w + 360
    while r >= 360:
        w = w - 360
    return w
 
# In der folgenden Zeile beginnt das Hauptprogramm
makeTurtle()
repeat 10:
    print(richtung())
    right(100)

Besser?

import datetime
 
def zeitInMinuten():
    jetzt = datetime.datetime.now()
    minute = jetzt.minute
    return minute
 
print(zeitInMinuten())

Aufgabe 5, Funktionen ohne Parameter und mit Rückgabewert definieren

Einzelarbeit, ca. 5 Minuten

Der folgende Code definiert eine Funktion spielfeld(). Das Schlüsselwort return macht den rechts davon stehenden Ausdruck zum Rückgabewert.

Beachte:

  • Mit + werden zwei Strings (= Texte, deren Beginn und Ende mit Anführungszeichen markiert sind) “hintereinandergehängt”.
  • Die Zeichenkombination “\n” bedeutet “new line”: Bei der Ausgabe findet an dieser Stelle ein Zeilenumbruch statt.
# In der folgenden Zeile beginnt die Definition der Funktion
def spielfeld():
    s1 = "+-+-+-+\n"
    s2 = "| | | |\n"
    s3 = "+-+-+-+\n"
    s4 = "| | | |\n"
    s5 = "+-+-+-+\n"
    s6 = "| | | |\n"
    s7 = "+-+-+-+\n"
 
    return s1 + s2 + s3 + s4 + s5 + s6 + s7
 
# In der folgenden Zeile beginnt das Hauptprogramm
b = spielfeld()
print(spielfeld())

Schreibe eine Funktion, die den Anfangsbuchstaben deines Vornamens als “Bild aus Buchstaben” zurückgibt.

Für die Experten: Man kann die Funktion spielfeld() auch etwas kürzer definieren. Bitte ausklappen!

Für die Experten: Man kann die Funktion spielfeld() auch etwas kürzer definieren. Bitte ausklappen!

# In der folgenden Zeile beginnt die Definition der Funktion
def brett():
    s = 3 * "+-" + "+\n"
    t = 3 * "| " + "|\n"
    return 3 * (s + t) + s
 
# In der folgenden Zeile beginnt das Hauptprogramm
b = brett()
print(brett())

Erster Versuch: Polynomdivision

Polynomdivision

Erster Versuch: Funktionen

Funktionen

Ausgelagert: Polynomdivision

Polynomdivision ausgelagertes

1)
Im gängigen Sprachgebrauch der Informatik verwendet man denselben Namen für eine Programmiersprache wie für jeden ihrer Interpreter (oder Compiler).