Dez 232018
 

Seit mehreren Wochen bin ich dabei, testweise mit Arduinos in Klasse 8 im Wahlpflichtfach Informatik zu arbeiten. Bisher hatten wir die LEGO-Mindstorms verwendet und uns in den Parallelkursen abgewechselt. Weitere Inhalte in Klassen 8 sind Programmierung mit Scratch und Grundlagen der Informatik (da der Informatik-Unterricht in Klasse 8 startet).

Die Kompetenzen zu dem bisherigen Block (ca. 8 Wochen dreistündig) sind Folgende:

  • die Roboter-Sensoren nennen und deren Aufgaben beschreiben.
  • in der Programmiersprache NXC das Ansteuern der Sensoren implementieren.
  • Kontrollstrukturen implementieren und so auf Signale der Sensoren reagieren.
  • Variablen anhand von gegebenen Aufgaben implementieren.

Diese sollen entsprechend vergleichbar mit dem Arduino statt dem LEGO Mindstorms abgedeckt werden.

das von uns verwendete Set von Funduino
Continue reading »
Apr 272012
 

Heute haben wir uns im Informatik-Fachseminar mit dem Thema Kryptologie in der Sek1 (9. oder 10.Klasse) und einer Umsetzung mit der Programmiersprache Python beschäftigt.

Ziel war heute, ein Programm zur Verschlüsselung von Zeichenketten zu erstellen, das problemorientiert und nicht künstlich nur zum Üben geeignet ist. Als Ansatz nahmen wir eine einfache Verschlüsselung an, die einzelne Zeichen vertauscht, z.B. das erste gegen das dritte, das zweite stehenlässt, das vierte gegen das sechste tauscht usw.
Hierzu gab es einen Vorschlag, der folgendermaßen aussieht:

def drilling(eingabe):
    zaehler = 0
    laenge = len(eingabe)
    ausgabe = ""
    while zaehler < laenge:
        if zaehler % 3 == 0:
            if zaehler+2 < laenge:
                ausgabe = ausgabe + eingabe[zaehler+2]
            else:
                ausgabe = ausgabe + eingabe[zaehler]
        if zaehler % 3 == 1:
            ausgabe = ausgabe + eingabe[zaehler]
        if zaehler % 3 == 2:
            ausgabe = ausgabe + eingabe[zaehler-2]
        zaehler += 1
    print ausgabe     

eingabe = raw_input("Bitte ein Wort eingeben:")
drilling(eingabe)

Wir diskutierten kleinschrittigeres Vorgehen, erst nur ein Tripel vertauschen, um nicht gleich Schleifen und Fallunterscheidungen als Konzepte mit einbeziehen zu müssen. Beispielsweise könnte erst nur der Vertauschvorgang auf Papier modelliert werden, also erst nur Zeichenketten der Länge 3, dann im zweiten Schritt dieses auf Zeichenketten der Länge eines Vielfachen von 3 erweitern und dann auf beliebige Zeichenketten.
Der erste Schritt wäre dann:

# Eine ganz einfache Variante der Drillingsverschluesselung
def drilling(eingabe):
    ausgabe = eingabe[2] + eingabe[1] + eingabe[0]
    print "Das Wort lautet " + eingabe 
    print "Der verschluesselte Text lautet " + ausgabe     

eingabe = raw_input("Bitte ein Wort der Laenge 3 eingeben:")
drilling(eingabe)

Den zweiten Schritt habe ich noch nicht so richtig durchdacht, wünschenswert wäre ein Programm, das weniger Konzepte enthält, aber mehr kann als das erste Programm, also z.B. alle durch 3 teilbaren Zeichenketten-Längen aber weniger Fallunterscheidungen und keine Modulo-Rechnung enthält.

Als weiteren Ansatz diskutierten wir, erst ein anspruchsvolles Programm zu einem Problem vorzulegen und dies analysieren lassen, um dann eine Modifikation oder Variante implementieren zu lassen. Dies könnte allerdings auch abschreckend wirken und zur Entwicklung eines Vokabulars erscheint ein systematischer Ausbau von Konzepten günstiger.

Ich habe noch nicht so viele Erfahrungen mit Python, daher habe ich mich erst einmal auch mit einfachen Aufgaben beschäftigt, z.B. wie eine Liste erstellt wird und was man damit alles machen kann. Dabei habe ich mich an einem Skript von Bernd Grave orientiert: www.uni-math.gwdg.de/bgr/unterricht/informatik/EinfPython.pdf Problemorientiert sind diese Aufgaben allerdings nicht, da es völlig unsinnig erscheint, eine Einkaufsliste mit einem solchen Aufwand zu verwalten. Zum Konzepte von Python kennenlernen ist es allerdings recht schön.

Mein erstes Experiment mit Ausgaben und Fallunterscheidungen (Ich nutze Ubuntu, da ist Python bereits vorinstalliert und als Editor einfach gedit und rufe die Programme dann über die Konsole auf):

Hier meine Listen-Experimente:

# Programm "Listen", angelehnt an Bernd Grave, 
# "Programmieren mit Python - erste Schritte"

# Erzeuge eine Liste und gebe ein Listenelement aus

planeten = ['Sonne','Mond','Sterne']

nummern = range(10)
print 'Listenelemente ausgeben'
print planeten [1]
print nummern [3]

# S.11 "Benutzung von Listen"

einkaufsliste = ['Aepfel','Mangos','Karotten','Bananen']

# Laenge einer Liste ausgeben
print '\n Ich habe', len(einkaufsliste), 'Dinge einzukaufen.'

# Elemente einer Liste ausgeben (interessant ist hier, dass eine 
# Variable "ding" für die Listenelemente erst in der for-Schleife 
# erzeugt wird, ohne näher deklariert zu werden)
print 'Diese Dinge sind:',
for ding in einkaufsliste:
print ding,

# Ein Elemente der Liste hinzufuegen
print '\n ich muss auch Reis einkaufen'
einkaufsliste.append('Reis')
print 'Meine Einkaufsliste ist jetzt', str(einkaufsliste)

# Eine Liste sortieren
print 'Jetzt werde ich meine Einkaufsliste sortieren.'
einkaufsliste.sort()
print 'Die sortierte Einkaufsliste ist', einkaufsliste

Die Ausgabe dieses kleinen Programms auf der Konsole sieht dann folgendermaßen aus: